globals [ heights ;; contains the list of the terrain elevations ;;cannon-a ;; points to one of the cannon ;;cannon-b ;; points to the other cannon ;; current ;; points to the current cannon g ;; the gravity constant activity? ;; true when there is game action occuring shape-base ball-size pointer-size num-frames frame-rate A-Loses B-Loses AB-Lose Trees-Killed shots hits eff display-rate rock-freq ] breed [ emptyset nothing ] breed [ bases a-base ] ;; the non-rotating part of the cannon breed [ cannons a-cannon ] ;; the rotating / aiming part of the cannon breed [ balls a-ball ] ;; the projectile breed [ smoke a-smoke ] breed [ ashes an-ash ] breed [ trees a-tree ] ;; some trees smoke-own [ nx ny ] ashes-own [ nx ny vx vy] balls-own [ vx vy ;; velocity nx ny ;; new coordinates ox oy ;; old coordinates frame ;; the animation frame for the animated projectile off-screen? ;; is the projectile off the top of the screen? ascending? my-shape my-frames my-size ] cannons-own [ score ;; current score power ;; initial velocity of the shot aim ;; heading of the shot last-power ;; previous shot power (as yet unused) last-aim ;; previous shot aim (as yet unused) target ;; the target my-base ;; the base that belongs to this cannon my-platform ;; the patches that the base rests on my-space target-selected? on-target? reloading? reload-countdown ] trees-own [ root ] patches-own [ t ] to startup reset setup ask cannons [ ka-boom! ] ask patch max-pxcor 0 [ set plabel "OBLITERATE! OBLITERATE! OBLITERATE! OBLITERATE! OBLITERATE! " ] repeat 100 [ go wait display-rate ] reset setup end to reset set A-Loses 0 set B-Loses 0 set AB-Lose 0 set Trees-Killed 0 set shots 0 set hits 0 end to setup no-display let t1 A-Loses let t2 B-Loses let t3 AB-Lose let t4 Trees-Killed let t5 shots let t6 hits ca set A-Loses t1 set B-Loses t2 set AB-Lose t3 set Trees-Killed t4 set shots t5 set hits t6 if shots > 0 [ set eff (word (100 * precision (hits / shots) 2) " %")] set g -0.04 set shape-base "bomb" set ball-size 5 set pointer-size 25 set num-frames 5 set frame-rate .25 set display-rate 1 / 45 set rock-freq 300 + random 90 set-default-shape smoke "smoke" set-default-shape ashes "ash" setup-hills setup-cannons setup-trees display end to setup-trees ;; find patches on the border tween earth and sky let horizon patches with [ is-rock? and [ is-air? ] of patch-at 0 1 ] ask n-of 50 horizon [ sprout-trees 1 [ set size 6 + random 6 let offset ycor - 10 - random 20 if offset < (min-pycor + 3) [ set offset (min-pycor + 3) ] set ycor offset set heading 0 set color gray set shape one-of [ "tree0" "tree1" ] set root patch-at 0 -3 ] ] end to setup-hills cp ;; build a list of elevations that slope up and down let dir 1 set heights [ ] let max-peak min-pycor + world-height * .5 let min-peak min-pycor + world-height * .1 let peak min-peak + random (max-peak - min-peak - 1) foreach n-values world-width [ min-pxcor + ? ] [ if random 100 < 5 [ set dir (sign dir) * -1 * random-float 2.0 ] set peak peak + dir if peak > max-peak or peak < min-peak [ set dir dir * -1 set peak peak + dir + dir ] set heights lput floor peak heights ] ; color patches according to the elevations ask patches [ ifelse pycor < item (pxcor - min-pxcor) heights [ set pcolor rock ] [ set pcolor air ] ] display end to setup-cannons set-default-shape cannons "cannons" set-default-shape bases "bases" set-default-shape balls "banana0" ask setup-cannon-patch (.1 + random-float .2) [ let a-cannon setup-cannon violet ] ask setup-cannon-patch (.4 + random-float .2) [ let a-cannon setup-cannon magenta ] ask setup-cannon-patch (.9 - random-float .2) [ let a-cannon setup-cannon magenta ] ask cannons [ set target one-of other cannons set power 1 ] ;; set current one-of cannons with [ current != self ] end to-report setup-cannon [ new-color ] let new-cannon nobody ;; the patch creates a cannon sprout-cannons 1 [ set color black set size 5 ;; record the platform patches for this cannon set my-platform patches with [ pycor = [pycor] of myself and pxcor + 5 >= [pxcor] of myself and pxcor - 5 <= [pxcor] of myself ] set my-space patches with [ pycor > [pycor] of myself and pycor - 5 <= [ pycor ] of myself and pxcor + 5 >= [pxcor] of myself and pxcor - 5 <= [pxcor] of myself ] set ycor ycor + .5 * size ;; create a base for this cannon hatch-bases 1 [ set color new-color set heading 0 ask myself [ set my-base myself ] ] set new-cannon self ask my-platform [ set pcolor brown - 4 ] set on-target? false set target-selected? false set reloading? true set reload-countdown random fire-rate ] report new-cannon end to-report setup-cannon-patch [ location ] let cannon-index floor (world-width * location) let cannon-pxcor cannon-index + min-pxcor let cannon-pycor item cannon-index heights ask patches with [ pxcor >= cannon-pxcor - 5 and pxcor <= cannon-pxcor + 5 ] [ ifelse pycor = cannon-pycor [ set pcolor steel ] [ ifelse pycor < cannon-pycor [ if not is-rock? [ set pcolor rock ] ] [ if not is-air? [ set pcolor air ] ] ] ] set location patch cannon-pxcor cannon-pycor ask location [ set pcolor white ] report location end to-report sign [ n ] ifelse n < 0 [ report -1 ][ ifelse n > 0 [ report 1 ][ report 0 ]] end to-report rock ;; report varying shades of a color report brown - 2 + random-float 1 * sin ((pycor + .02 * pxcor )* rock-freq) end to-report ash ;; report varying shades of a color report brown - 4 + random-float 2 end to-report steel ;; report varying shades of a color report red - 1 + random-float 2 end to-report air ;; report varying shades of a color report sky - 3 + 5 * (.1 * scale-color gray pycor min-pycor max-pycor) + random-float .5 end to-report fire ;; report varying shades of a color report red - 5 + random-float 10 end to-report smoke-color ;; report varying shades of a color report orange - 2 + random-float 3 end to go every display-rate [ set activity? false rocks-smoke-ashes-fire! let blown-up cannons with [ any? my-platform with [ not is-rock? ] ] if any? blown-up [ ask blown-up [ ka-boom! ] set activity? true ] if any? balls [ balls-fly! set activity? true ] if ticks mod 300 = 0 [ garbage-collection ] ;if is-a-cannon? current ; [ ask current ; [ if not reloading? ; [ ifelse not target-selected? [ ready! ] ; [ ifelse not on-target? [ aim! ] ; [ fire! ] ; ] ; ; ] ; ] ; ] ask cannons [ if-else reloading? [ set reload-countdown reload-countdown - 1 if reload-countdown <= 0 [ prepare-to-fire ] ] [ ifelse not target-selected? [ ready! ] [ ifelse not on-target? [ aim! ] [ fire! ] ] ] ] tick ifelse not activity? [ if ticks < 999999999 [ tick-advance 999999999 - ticks ] if ticks > 1000000100 [ setup ] if ticks mod 10 = 0 [ if count cannons = 1 [ ask cannons [ set color white - color ] ] ] ] [ if ticks > 999999999 [ reset-ticks ] ] ] end to prepare-to-fire set reloading? false set target-selected? false set on-target? false end to ready! set target one-of other cannons if-else is-a-cannon? target [ set activity? true set target-selected? true ;; make sure I am not buried. ;; If I am buried, apply settings to self-destruct (or clear rubble, if lucky) ifelse is-rock? [ ask my-space with [ not is-air? ] [ set pcolor air ] set power 2 set aim 0 set reloading? false set target-selected? true set on-target? true ] [ ;; I am not buried--use normal aiming procedures if-else test? [ set aim aim' * (sign subtract-headings (towards target) 0) ; (sign subtract-headings (towards target) 0) * 45 set power power' ; 1.5 ] [ set power range 1.5 4 set aim (sign subtract-headings (towards target) 0) * range 5 85 ] ] ] [ ;; no action for no targets ] end to-report range [ minr maxr ] report (minr + random-float (maxr - minr)) end to aim! let diff .1 * subtract-headings aim heading if-else abs diff > 1 [ rt diff ] [ set heading aim ;; see if there is a clear path for the missle, nearby ;; (try to reduce some obvious self-destruction senarios) ;; build list of true/false values from patches in line along direction of aim let clear-target-path? n-values 5 [ [ is-air? ] of (patch-ahead (5 + 2 * ?)) ] ;; reduce to a single true/false value ;; (if any false (non-air) values, result is false (not a clear path) set clear-target-path? reduce [ ifelse-value ( ?2 = false) [ false ] [ ?1 ] ] clear-target-path? ifelse not clear-target-path? [ ;; not a clear path, set target-selected? false set color red - 3 ] [ ;; proceed with the selected angle set on-target? true set color black ] ] set activity? true end to fire! ;; cannon launches a projectile set heading aim hatch-balls 1 [ set vx [ dx * power ] of myself set vy [ dy * power ] of myself set ox xcor set oy ycor set nx xcor + [ dx * size ] of myself set ny ycor + [ dy * size ] of myself setxy nx ny set frame 0 set my-shape first bomb-shape set my-size item 2 bomb-shape set my-frames item 1 bomb-shape set size 5 * my-size set shape (word my-shape floor frame) set color black set off-screen? false set shots shots + 1 set ascending? true ] set reloading? true set reload-countdown fire-rate set activity? true end to balls-fly! ask balls [ ; set vx vx set vy vy + g set ox nx set oy ny set nx nx + vx set ny ny + vy ;; flew off side of screen if nx < min-pxcor or nx > max-pxcor [ destroy-ball ] ;; dropped past bottom of screen if ny < min-pycor [ destroy-ball ] ;; flew off top of screen ifelse ny > max-pycor [ ;; track xcor, but hide if not off-screen? [ set off-screen? true set shape "pointer-a" set size pointer-size] setxy nx max-pycor - size * .5 set label (word (floor ny * 5) "m") if ascending? and oy > ny [ set ascending? false set shape "pointer-d" ] ] [ ;; still on (or back on) screen ;; move to new position ; if ox != nx or oy != ny [ set pcolor smoke ] ; if ticks mod 5 = 0 [ ask patch-at (- vx) (- vy) [ set pcolor smoke ] ] setxy nx ny let nearby-balls other balls in-radius size with [ not off-screen? ] if any? ashes-here or any? smoke-here or any? nearby-balls or not is-air? [ ask nearby-balls [ bang! ] bang! ] ; ask neighbors [ set pcolor air] if vx != 0 or vy != 0 [ if-else (vx * vx + vy * vy) <= 1 [ set heading heading + 10 * sign vx] [ let new atan vx vy let diff .2 * subtract-headings new heading set heading heading + diff ] ] set frame frame + frame-rate if frame >= my-frames [ set frame 0 ] set shape (word my-shape floor frame) ;; if was hidden, show again if off-screen? [ set off-screen? false set size ball-size set label "" ] ] ] end to destroy-ball ;if-else count cannons > 1 ;[ set current one-of cannons with [ self != current ] ; ask current [ prepare-to-fire ] ;] ;[ set current nobody ] die end to destroy-tree set trees-killed trees-killed + 1 die end to bang! let rad 8 hide-turtle let crater patches in-radius rad ask crater [ set pcolor air ] ask crater [ if random 5 = 0 [ make-smoke make-ashes 1 ] ] ask crater [ ask neighbors with [is-rock? ] [ make-ashes 0 ] ] ask trees in-radius rad [ destroy-tree ] destroy-ball end to ka-boom! set hits hits + 1 let rad 6 let big-rad rad * 3 let cloud (patch-set [ patches in-radius big-rad ] of (patch-set [ patch-at 0 (2 * big-rad) ] of my-platform ) ) let column (patch-set [ patches at-points n-values big-rad [ (list 0 ? ) ] ] of my-platform ) let crater (patch-set [ patches in-radius rad ] of my-platform) let total (patch-set cloud column) ask n-of 200 total [ let r random 3 if-else r = 2 [ make-smoke ] [ make-ashes r ] ] ask crater with [ random 9 = 0 ] [ ifelse random 2 = 0 [ make-smoke] [ make-ashes 1] ] ;ask column with [ random 2 = 0 ] [ make-ashes 0 ] ;ask cloud with [ random 6 = 0 ] [ if-else random 2 = 0 [ make-smoke ][ make-ashes 1 ] ] ask trees with [ member? root column or member? root cloud or member? root crater] [ destroy-tree ] ask my-base [ die ] die end to rocks-smoke-ashes-fire! ; let in-air patches with ; [ pycor > min-pycor and is-rock? ; and ; ( value-from patch-at 0 -1 [ is-air? ] ; or ( ( pycor = max-pycor or value-from patch-at 0 1 [ is-air? ] ) ; and (not any? patches at-points [[-1 -1][1 -1]] with [ is-rock?] ) ; ) ; ) ; ] ; if any? in-air ; [ set activity? true ; ask in-air ; [ make-ashes ; set pcolor air ; ] ; ] ; if any? smoke or any? ashes [ set activity? true] ask smoke [ if pxcor <= min-pxcor or pxcor >= max-pxcor or pycor >= max-pycor or random 1000 < 20 [ die ] setxy (xcor + ((.5 * random 3) - .5)) (ycor + 1) set color smoke-color rt 5 ] ask ashes [ let over neighbors with [ pycor > [pycor] of myself and is-rock? ] if any? over [ ask over [ make-ashes 0 ] ] ] ask ashes [ ;; accelerate due to gravity set vy vy + g ;; project next location set nx nx + vx set ny ny + vy ;; if at or passed edge of screen, die if nx <= min-pxcor or nx >= max-pxcor or ny <= min-pycor or ny >= max-pycor [ die ] ;; apply next location setxy nx ny ;; did we hit rock? let under patch-at 0 -1 let over patch-at 0 1 if any? neighbors with [ is-rock? ] [ ;; stop moving set vx 0 set vy -1 setxy pxcor pycor ;; is there rock underneath? if is-patch? under and [ is-rock? ] of under [ ;; yes. stop. set pcolor ash set under nobody set over nobody die ] ] ] ask trees with [ [ is-air? ] of root ] [ destroy-tree ] end to-report is-air? report shade-of? pcolor sky end to-report is-rock? report shade-of? pcolor brown end to-report is-smoke? report shade-of? pcolor orange end to make-ashes [ flying ] sprout-ashes 1 [ set color ash set pcolor air set nx xcor set ny ycor ifelse flying = 1 [ set vx random-float 2.0 - 1.0 set vy random-float 1.0 ] [ if flying = -1 [ set vy -1 ] ] ] end to make-smoke sprout-smoke 1 [ set color smoke-color set size 3 set pcolor air ] end to garbage-collection ;; turn orphaned (floating) rock patches into ash turtles ask patches with [ pycor > min-pycor and is-rock? and [ is-air? ] of patch-at 0 -1 ] [ make-ashes 0 ] end @#$#@#$#@ GRAPHICS-WINDOW 12 70 745 464 120 60 3.0 1 16 1 1 1 0 0 0 1 -120 120 -60 60 0 0 0 ticks CC-WINDOW 5 478 754 573 Command Center 0 BUTTON 11 10 74 67 NIL go T 1 T OBSERVER NIL NIL NIL NIL BUTTON 424 30 500 63 abort-missles ask balls[ if off-screen? [ die ] bang! ] NIL 1 T OBSERVER NIL NIL NIL NIL SWITCH 112 10 202 43 test? test? 1 1 -1000 SLIDER 206 10 298 43 power' power' 0 5 2.2 0.1 1 NIL HORIZONTAL SLIDER 305 11 397 44 aim' aim' 0 90 15 1 1 NIL HORIZONTAL SLIDER 507 30 599 63 fire-rate fire-rate 5 100 100 5 1 NIL HORIZONTAL CHOOSER 602 21 744 66 bomb-shape bomb-shape ["bomb" 5 1] ["pac-man" 4 1] ["banana" 4 1.5] ["meteor" 2 1] ["fizz" 1 2] ["smile!" 1 2] ["skull" 2 2] ["balloon" 4 2] 0 TEXTBOX 84 10 399 46 Click GO to start OBLITERATION 11 0.0 0 BUTTON 358 30 421 63 reset setup NIL 1 T OBSERVER NIL NIL NIL NIL @#$#@#$#@ == WHAT IS IT? == Three mortar bases launch bombs in the general direction of the others. When bombs land they explode, making a crater and throwing up ash and cinders. Hot cinders rise, cooler ash falls. The explosion can undercut the nearby terrain. Undercut and unsupported terrain crumbles. Hot ash and cinders can also cause bombs to explode. Some cinders cool and become ash. If the terrain under a mortar crumbles, the mortar explodes. When only one mortar remains, it flashes victory, and the world resets. == TRICKS == Sometimes rock/ash (terrain) is patches, sometimes it is a turtle-based particle-system. When ball hits rock, crater is cleared of rock (colored "air") and filled with moving "ash" turtles, Also the edge of the crater is turned into ash turtles. When ash turtles settle, they "die", but color the patch beneath themselves the "ash" color. When ash turtles find rock/ash colored patches *above* themselves, they turn those patches into ash turtles, too. This enables under-cut rock to crumble. Terrain generator goes by columns, calculating an elevation for each column in a zig-zag fashion. Sky texturing is a combination of random and gradient coloring. Rock texturing is a combination of random and sin-wave (with vertical offset) coloring. When bomb velocity is > 1, the bomb rotates to face the direction of travel. Otherwise, the bomb tumbles. === Bomb Shapes and Animation === Swapping turtle shapes creates the illusion that the bombs are spinning. The bomb-shape chooser is populated with lists. The list contains not only the bomb-shape name, but also the number of animation frames and the size scalar. RELATED MODELS BALL-FALL GRAVITY @#$#@#$#@ default true 0 Polygon -7500403 true true 150 5 40 250 150 205 260 250 ash false 0 Rectangle -7500403 true true 15 15 285 285 balloon0 false 0 Circle -2674135 true false 75 0 150 Circle -2674135 true false 88 43 122 Polygon -1184463 true false 150 180 180 225 180 270 135 315 165 270 165 225 Circle -2674135 true false 105 90 90 balloon1 false 0 Circle -2674135 true false 90 0 150 Circle -2674135 true false 88 43 122 Polygon -1184463 true false 105 165 135 210 135 255 90 300 120 255 120 210 Circle -2674135 true false 90 90 90 balloon2 false 0 Circle -2674135 true false 75 0 150 Circle -2674135 true false 88 43 122 Polygon -1184463 true false 150 180 120 225 120 270 165 315 135 270 135 225 Circle -2674135 true false 105 90 90 balloon3 false 0 Circle -2674135 true false 60 0 150 Circle -2674135 true false 90 43 122 Polygon -1184463 true false 195 165 165 210 165 255 210 300 180 255 180 210 Circle -2674135 true false 120 90 90 banana0 false 0 Polygon -7500403 false true 78 275 86 271 95 270 103 273 122 283 151 288 181 282 211 261 234 239 247 204 259 145 257 97 245 57 229 25 205 12 192 16 188 40 187 51 187 86 188 112 189 119 189 156 183 178 175 193 158 211 126 231 95 244 83 250 68 262 Polygon -1184463 true false 69 261 77 274 88 270 103 271 124 283 152 288 179 282 205 266 233 240 249 201 260 145 259 104 248 63 230 28 205 11 194 16 190 36 188 56 188 79 191 115 191 130 190 155 186 177 178 192 157 213 126 232 103 241 88 248 Line -16777216 false 169 246 195 219 Line -16777216 false 193 225 199 218 Line -16777216 false 211 201 217 182 Line -16777216 false 211 59 210 46 Line -16777216 false 224 39 214 24 Polygon -16777216 true false 196 17 204 27 208 13 Polygon -16777216 true false 114 264 129 266 136 260 Polygon -16777216 true false 146 254 161 247 152 247 Line -16777216 false 132 235 162 218 Line -16777216 false 250 144 250 101 Polygon -16777216 true false 77 274 90 270 85 250 69 261 banana1 false 0 Polygon -7500403 false true 25 78 29 86 30 95 27 103 17 122 12 151 18 181 39 211 61 234 96 247 155 259 203 257 243 245 275 229 288 205 284 192 260 188 249 187 214 187 188 188 181 189 144 189 122 183 107 175 89 158 69 126 56 95 50 83 38 68 Polygon -1184463 true false 39 69 26 77 30 88 29 103 17 124 12 152 18 179 34 205 60 233 99 249 155 260 196 259 237 248 272 230 289 205 284 194 264 190 244 188 221 188 185 191 170 191 145 190 123 186 108 178 87 157 68 126 59 103 52 88 Line -16777216 false 54 169 81 195 Line -16777216 false 75 193 82 199 Line -16777216 false 99 211 118 217 Line -16777216 false 241 211 254 210 Line -16777216 false 261 224 276 214 Polygon -16777216 true false 283 196 273 204 287 208 Polygon -16777216 true false 36 114 34 129 40 136 Polygon -16777216 true false 46 146 53 161 53 152 Line -16777216 false 65 132 82 162 Line -16777216 false 156 250 199 250 Polygon -16777216 true false 26 77 30 90 50 85 39 69 banana2 false 0 Polygon -7500403 false true 222 25 214 29 205 30 197 27 178 17 149 12 119 18 89 39 66 61 53 96 41 155 43 203 55 243 71 275 95 288 108 284 112 260 113 249 113 214 112 188 111 181 111 144 117 122 125 107 142 89 174 69 205 56 217 50 232 38 Polygon -1184463 true false 231 39 223 26 212 30 197 29 176 17 148 12 121 18 95 34 67 60 51 99 40 155 41 196 52 237 70 272 95 289 106 284 110 264 112 244 112 221 109 185 109 170 110 145 114 123 122 108 143 87 174 68 197 59 212 52 Line -16777216 false 131 54 105 81 Line -16777216 false 107 75 101 82 Line -16777216 false 89 99 83 118 Line -16777216 false 89 241 90 254 Line -16777216 false 76 261 86 276 Polygon -16777216 true false 104 283 96 273 92 287 Polygon -16777216 true false 186 36 171 34 164 40 Polygon -16777216 true false 154 46 139 53 148 53 Line -16777216 false 168 65 138 82 Line -16777216 false 50 156 50 199 Polygon -16777216 true false 223 26 210 30 215 50 231 39 banana3 false 0 Polygon -7500403 false true 275 222 271 214 270 205 273 197 283 178 288 149 282 119 261 89 239 66 204 53 145 41 97 43 57 55 25 71 12 95 16 108 40 112 51 113 86 113 112 112 119 111 156 111 178 117 193 125 211 142 231 174 244 205 250 217 262 232 Polygon -1184463 true false 261 231 274 223 270 212 271 197 283 176 288 148 282 121 266 95 240 67 201 51 145 40 104 41 63 52 28 70 11 95 16 106 36 110 56 112 79 112 115 109 130 109 155 110 177 114 192 122 213 143 232 174 241 197 248 212 Line -16777216 false 246 131 219 105 Line -16777216 false 225 107 218 101 Line -16777216 false 201 89 182 83 Line -16777216 false 59 89 46 90 Line -16777216 false 39 76 24 86 Polygon -16777216 true false 17 104 27 96 13 92 Polygon -16777216 true false 264 186 266 171 260 164 Polygon -16777216 true false 254 154 247 139 247 148 Line -16777216 false 235 168 218 138 Line -16777216 false 144 50 101 50 Polygon -16777216 true false 274 223 270 210 250 215 261 231 bases true 0 Polygon -7500403 true true 0 300 90 150 210 150 300 300 bomb0 true 0 Polygon -7500403 true true 90 330 90 255 150 210 210 255 210 330 150 300 Circle -7500403 true true 90 -45 120 Polygon -7500403 true true 90 15 210 15 195 180 150 225 105 180 Polygon -1 true false 180 15 195 30 180 165 165 195 bomb1 true 0 Polygon -7500403 true true 90 330 90 255 150 210 210 255 210 330 150 300 Circle -7500403 true true 90 -45 120 Polygon -7500403 true true 90 15 210 15 195 180 150 225 105 180 Polygon -1 true false 180 15 150 15 150 210 165 195 bomb2 true 0 Polygon -7500403 true true 90 330 90 255 150 210 210 255 210 330 150 300 Circle -7500403 true true 90 -45 120 Polygon -7500403 true true 90 15 210 15 195 180 150 225 105 180 Polygon -1 true false 120 15 150 15 150 210 135 195 bomb3 true 0 Polygon -7500403 true true 90 330 90 255 150 210 210 255 210 330 150 300 Circle -7500403 true true 90 -45 120 Polygon -7500403 true true 90 15 210 15 195 180 150 225 105 180 Polygon -1 true false 120 15 105 30 120 165 135 195 bomb4 true 0 Polygon -7500403 true true 90 330 90 255 150 210 210 255 210 330 150 300 Circle -7500403 true true 90 -45 120 Polygon -7500403 true true 90 15 210 15 195 180 150 225 105 180 cannons true 0 Circle -7500403 true true 60 60 180 Polygon -7500403 true true 60 150 45 0 255 0 240 150 fizz0 false 0 Circle -7500403 true true 60 165 180 Rectangle -7500403 true true 120 135 180 180 Polygon -1 true false 135 135 165 105 150 75 120 75 105 60 150 60 165 75 180 105 150 135 Polygon -1184463 true false 90 0 120 60 180 30 120 75 105 75 60 45 105 60 Polygon -955883 true false 105 135 105 90 60 90 105 75 120 75 180 75 120 90 link true 0 Line -7500403 true 150 0 150 300 link direction true 0 Line -7500403 true 150 150 30 225 Line -7500403 true 150 150 270 225 meteor0 true 0 Polygon -2674135 true false 75 195 120 225 180 225 225 195 255 255 255 300 210 345 195 390 210 450 240 480 195 450 165 390 165 345 195 300 180 270 150 285 150 375 150 435 120 345 120 300 105 345 75 405 90 345 90 285 45 315 30 375 45 435 60 480 30 435 0 360 15 285 60 225 Circle -7500403 true true 60 60 180 meteor1 true 0 Polygon -2674135 true false 225 195 180 225 120 225 75 195 45 255 45 300 90 345 105 390 90 450 60 480 105 450 135 390 135 345 105 300 120 270 150 285 150 375 150 435 180 345 180 300 195 345 225 405 210 345 210 285 255 315 270 375 255 435 240 480 270 435 300 360 285 285 240 225 Circle -7500403 true true 59 59 182 meteor2 true 0 Circle -7500403 true true 73 -1 153 Polygon -2674135 true false 75 90 30 225 90 150 60 255 120 165 105 285 150 165 165 300 180 165 225 270 210 135 270 225 225 90 195 105 180 135 150 120 135 135 105 120 meteor3 true 0 Circle -7500403 true true 74 -1 153 Polygon -2674135 true false 225 90 255 165 210 150 225 210 180 165 180 255 150 165 120 240 120 165 75 210 90 135 30 180 75 90 90 120 120 120 150 135 180 135 210 120 pac-man0 true 0 Polygon -1184463 true false 45 45 150 150 255 45 285 90 300 150 285 210 255 255 210 285 150 300 90 285 45 255 15 210 0 150 15 90 pac-man1 true 0 Polygon -1184463 true false 45 45 150 150 255 45 285 90 300 150 285 210 255 255 210 285 150 300 90 285 45 255 15 210 0 150 15 90 Polygon -1184463 true false 90 15 150 150 210 15 255 45 150 150 45 45 pac-man2 true 0 Polygon -1184463 true false 45 45 150 150 255 45 285 90 300 150 285 210 255 255 210 285 150 300 90 285 45 255 15 210 0 150 15 90 Polygon -1184463 true false 90 15 150 150 210 15 255 45 150 150 45 45 Polygon -1184463 true false 135 0 150 150 165 0 210 15 150 150 90 15 pac-man3 true 0 Polygon -1184463 true false 45 45 150 150 255 45 285 90 300 150 285 210 255 255 210 285 150 300 90 285 45 255 15 210 0 150 15 90 Polygon -1184463 true false 90 15 150 150 210 15 255 45 150 150 45 45 pointer false 0 Line -2674135 false 0 45 30 45 Line -2674135 false 15 45 15 75 Line -2674135 false 45 75 45 45 Line -2674135 false 45 45 75 45 Line -2674135 false 75 45 60 60 Line -2674135 false 60 60 75 75 Line -2674135 false 90 75 105 45 Line -2674135 false 105 45 120 75 Line -2674135 false 97 60 112 60 Line -2674135 false 150 45 135 45 Line -2674135 false 120 60 135 75 Line -2674135 false 135 75 150 75 Line -2674135 false 165 45 165 75 Line -2674135 false 195 45 165 60 Line -2674135 false 165 60 195 75 Line -2674135 false 210 45 210 75 Line -2674135 false 225 75 225 45 Line -2674135 false 225 45 255 75 Line -2674135 false 255 45 255 75 Line -2674135 false 270 45 270 75 Line -2674135 false 270 45 300 45 Line -2674135 false 270 75 300 75 Line -2674135 false 300 75 300 60 Line -2674135 false 120 60 135 45 Polygon -7500403 true true 120 30 150 0 180 30 Line -2674135 false 300 60 285 60 pointer-a false 0 Line -2674135 false 0 45 30 45 Line -2674135 false 15 45 15 75 Line -2674135 false 45 75 45 45 Line -2674135 false 45 45 75 45 Line -2674135 false 75 45 60 60 Line -2674135 false 60 60 75 75 Line -2674135 false 90 75 105 45 Line -2674135 false 105 45 120 75 Line -2674135 false 97 60 112 60 Line -2674135 false 150 45 135 45 Line -2674135 false 120 60 135 75 Line -2674135 false 135 75 150 75 Line -2674135 false 165 45 165 75 Line -2674135 false 195 45 165 60 Line -2674135 false 165 60 195 75 Line -2674135 false 210 45 210 75 Line -2674135 false 225 75 225 45 Line -2674135 false 225 45 255 75 Line -2674135 false 255 45 255 75 Line -2674135 false 270 45 270 75 Line -2674135 false 270 45 300 45 Line -2674135 false 270 75 300 75 Line -2674135 false 300 75 300 60 Line -2674135 false 120 60 135 45 Polygon -7500403 true true 120 30 150 0 180 30 Line -2674135 false 300 60 285 60 pointer-d false 0 Line -2674135 false 0 45 30 45 Line -2674135 false 15 45 15 75 Line -2674135 false 45 75 45 45 Line -2674135 false 45 45 75 45 Line -2674135 false 75 45 60 60 Line -2674135 false 60 60 75 75 Line -2674135 false 90 75 105 45 Line -2674135 false 105 45 120 75 Line -2674135 false 97 60 112 60 Line -2674135 false 150 45 135 45 Line -2674135 false 120 60 135 75 Line -2674135 false 135 75 150 75 Line -2674135 false 165 45 165 75 Line -2674135 false 195 45 165 60 Line -2674135 false 165 60 195 75 Line -2674135 false 210 45 210 75 Line -2674135 false 225 75 225 45 Line -2674135 false 225 45 255 75 Line -2674135 false 255 45 255 75 Line -2674135 false 270 45 270 75 Line -2674135 false 270 45 300 45 Line -2674135 false 270 75 300 75 Line -2674135 false 300 75 300 60 Line -2674135 false 120 60 135 45 Polygon -7500403 true true 120 90 150 120 180 90 Line -2674135 false 300 60 285 60 skull0 false 0 Polygon -16777216 true false 75 0 45 45 30 90 45 135 75 180 75 240 120 270 180 270 225 240 225 180 255 135 270 90 255 45 225 0 180 -15 120 -15 Polygon -1 true false 90 165 90 225 135 255 165 255 210 225 210 165 Circle -1 true false 54 -6 192 Circle -16777216 true false 75 45 60 Circle -16777216 true false 165 45 60 Polygon -16777216 true false 141 76 150 90 157 74 165 150 150 120 135 150 Line -16777216 false 105 195 195 195 Line -16777216 false 90 165 105 195 Line -16777216 false 195 195 210 165 Line -16777216 false 105 210 105 165 Line -16777216 false 150 210 150 165 Line -16777216 false 195 210 195 165 Line -16777216 false 120 210 135 165 Line -16777216 false 180 210 165 165 skull1 false 0 Polygon -16777216 true false 75 0 45 45 30 90 45 135 75 180 75 255 120 285 180 285 225 255 225 180 255 135 270 90 255 45 225 0 180 -15 120 -15 Polygon -1 true false 90 180 90 240 135 270 165 270 210 240 210 180 Circle -1 true false 54 -6 192 Circle -16777216 true false 75 45 60 Circle -16777216 true false 165 45 60 Polygon -16777216 true false 141 76 150 90 157 74 165 150 150 120 135 150 Line -16777216 false 105 195 195 195 Line -16777216 false 90 165 105 195 Line -16777216 false 195 195 210 165 Line -16777216 false 105 210 105 165 Line -16777216 false 150 210 150 165 Line -16777216 false 195 210 195 165 Line -16777216 false 120 210 135 165 Line -16777216 false 180 210 165 165 Line -16777216 false 105 240 105 195 Line -16777216 false 120 240 135 195 Line -16777216 false 150 240 150 195 Line -16777216 false 180 240 165 195 Line -16777216 false 195 240 195 195 Polygon -16777216 true false 90 165 105 195 195 195 210 165 225 195 195 225 105 225 75 195 smile!0 false 0 Circle -16777216 true false 0 0 300 Circle -1184463 true false 9 9 282 Circle -16777216 true false 90 75 30 Circle -16777216 true false 90 120 30 Rectangle -16777216 true false 90 90 120 135 Rectangle -16777216 true false 180 90 210 135 Circle -16777216 true false 180 75 30 Circle -16777216 true false 180 120 30 Polygon -16777216 true false 60 195 90 240 135 270 165 270 210 240 240 195 225 180 195 225 150 240 105 225 75 180 Polygon -16777216 true false 255 210 225 195 210 165 240 135 225 180 240 195 285 180 Polygon -16777216 true false 45 210 75 195 90 165 60 135 75 180 60 195 15 180 smoke true 0 Rectangle -7500403 true true 180 30 270 120 Rectangle -7500403 true true 105 180 195 270 Rectangle -7500403 true true 30 30 120 120 tracking false 0 Line -2674135 false 0 180 30 180 Line -2674135 false 15 180 15 210 Line -2674135 false 45 210 45 180 Line -2674135 false 45 180 75 180 Line -2674135 false 75 180 60 195 Line -2674135 false 60 195 75 210 Line -2674135 false 75 210 90 180 Line -2674135 false 90 180 105 210 Line -2674135 false 82 195 97 195 Line -2674135 false 135 180 120 180 Line -2674135 false 105 195 120 210 Line -2674135 false 120 210 135 210 Line -2674135 false 150 180 150 210 Line -2674135 false 180 180 150 195 Line -2674135 false 150 195 180 210 Line -2674135 false 195 180 195 210 Line -2674135 false 210 210 210 180 Line -2674135 false 210 180 240 210 Line -2674135 false 240 180 240 210 Line -2674135 false 255 180 255 210 Line -2674135 false 255 180 285 180 Line -2674135 false 255 210 285 210 Line -2674135 false 285 210 270 195 Line -2674135 false 105 195 120 180 Circle -2674135 true false 120 0 60 Circle -2674135 true false 60 105 60 Circle -2674135 true false 180 105 60 Polygon -2674135 true false 180 15 240 120 210 165 90 165 60 120 120 15 Polygon -16777216 true false 150 30 210 135 90 135 tree0 false 0 Rectangle -6459832 true false 120 210 180 300 Polygon -13840069 true false 60 240 150 210 240 240 195 165 225 180 180 90 210 105 150 0 90 105 120 90 75 180 105 165 tree1 false 0 Rectangle -6459832 true false 135 150 165 300 Circle -10899396 true false 63 3 175 Circle -13840069 true false 153 18 85 Polygon -6459832 true false 195 75 165 120 150 120 195 60 Circle -13840069 true false 45 45 90 Polygon -6459832 true false 90 120 135 150 150 150 90 105 @#$#@#$#@ NetLogo 4.0.4 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ default 0.0 -0.2 0 0.0 1.0 0.0 1 1.0 0.0 0.2 0 0.0 1.0 link direction true 0 Line -7500403 true 150 150 90 180 Line -7500403 true 150 150 210 180 @#$#@#$#@