Logo Bolo: a re-envisioning of the classic tank game by Stuart Cheshire in NetLogo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

808 lines
24 KiB

  1. ;; lobo: Logo Bolo
  2. ;; (c) Ben Kurtovic, 2011-2012
  3. ;;
  4. ;; Logo Bolo is a re-envisioning of the classic tank game by Stuart Cheshire in NetLogo.
  5. ;;
  6. __includes [
  7. "ai.nls"
  8. "base.nls"
  9. "bullet.nls"
  10. "explosion.nls"
  11. "pillbox.nls"
  12. "player.nls"
  13. "tank.nls"
  14. ]
  15. extensions [
  16. sound
  17. table
  18. ]
  19. globals [
  20. last-sound-time
  21. last-tick-time
  22. max-fps
  23. mouse-was-down?
  24. sound-stopped?
  25. stop-game
  26. sounds
  27. ]
  28. patches-own [
  29. ground-type
  30. ground-friction
  31. ]
  32. ;; ===========================
  33. ;; Button-initiated procedures
  34. ;; ===========================
  35. to setup
  36. clear-all
  37. no-display
  38. setup-defaults
  39. make-sounds-table
  40. make-explosions-table
  41. load-map
  42. ask patch -3 0 [
  43. spawn-player 270
  44. ]
  45. ask patch 2 0 [
  46. spawn-tank 1 90
  47. ]
  48. show-hud
  49. render
  50. end
  51. to go
  52. set stop-game false
  53. do-player-logic
  54. ask tanks [
  55. do-tank-logic
  56. ]
  57. ask pillboxes [
  58. do-pill-logic
  59. ]
  60. ask bases [
  61. do-base-logic
  62. ]
  63. ask bullets [
  64. do-bullet-logic
  65. ]
  66. ask explosions [
  67. keep-exploding
  68. ]
  69. if stop-game != false [
  70. clear-drawing
  71. clear-turtles
  72. clear-patches
  73. ask patch 0 2 [
  74. set plabel first stop-game
  75. ]
  76. ask patch 0 0 [
  77. set plabel last stop-game
  78. ]
  79. render
  80. stop
  81. ]
  82. show-crosshairs
  83. show-hud
  84. stop-old-sounds
  85. render
  86. keep-time
  87. end
  88. ;; ================
  89. ;; Other procedures
  90. ;; ================
  91. to startup
  92. setup
  93. end
  94. to debug [agent action msg]
  95. ; Comment this to turn off debugging info:
  96. print (word (round timer) ": " agent ": " action " (" msg ")")
  97. end
  98. to setup-defaults
  99. set-patch-size 20
  100. resize-world -17 17 -12 12
  101. set last-sound-time timer
  102. set last-tick-time timer
  103. set map-file "lobo-default-map.png"
  104. set max-fps 30
  105. set mouse-was-down? false
  106. set sound-stopped? true
  107. set stop-game false
  108. set player-deaths 0
  109. set player-has-target? false
  110. set player-kills 0
  111. set player-target-xcor 0
  112. set player-target-ycor 0
  113. end
  114. to make-sounds-table
  115. set sounds table:make
  116. table:put sounds "fire" "Hand Clap"
  117. table:put sounds "kill" "Electric Snare"
  118. table:put sounds "noammo" "Cowbell"
  119. table:put sounds "pickup" "Hi Bongo"
  120. table:put sounds "shot" "Acoustic Snare"
  121. table:put sounds "place" "Vibraslap"
  122. table:put sounds "nopill" "Cowbell"
  123. table:put sounds "spawn" "Open Hi Conga"
  124. end
  125. to load-map
  126. import-pcolors-rgb map-file
  127. ask patches [
  128. ifelse pcolor = [0 0 0] [
  129. set pcolor black
  130. set ground-type "road"
  131. set ground-friction 1.15
  132. ] [
  133. ifelse pcolor = [0 128 0] [
  134. set pcolor lime - 4
  135. set ground-type "forest"
  136. set ground-friction 0.5
  137. ] [
  138. ifelse pcolor = [0 255 0] [
  139. set pcolor lime - 2
  140. set ground-type "grass"
  141. set ground-friction 0.75
  142. ] [
  143. ifelse pcolor = [255 255 0] [
  144. set pcolor black
  145. set ground-type "road"
  146. set ground-friction 1.15
  147. spawn-base
  148. ] [
  149. ifelse pcolor = [255 0 0] [
  150. set pcolor lime - 4
  151. set ground-type "forest"
  152. set ground-friction 0.5
  153. spawn-pillbox
  154. ] [
  155. debug (word "(" pxcor ", " pycor ")") "PATCH-LOAD-FAILURE" (word "unknown color: " pcolor)
  156. set pcolor red
  157. ]
  158. ]
  159. ]
  160. ]
  161. ]
  162. ]
  163. end
  164. to show-crosshairs
  165. clear-drawing
  166. if mouse-inside? [
  167. ask patch mouse-xcor mouse-ycor [
  168. draw-border white 1
  169. ]
  170. ]
  171. if player-has-target? [
  172. ask patch player-target-xcor player-target-ycor [
  173. draw-border white 2
  174. ]
  175. ]
  176. end
  177. to draw-border [b-color b-thickness]
  178. sprout 1 [
  179. set color b-color
  180. set pen-size b-thickness
  181. set heading 0
  182. fd 0.5
  183. pd
  184. rt 90
  185. fd 0.5
  186. repeat 3 [
  187. rt 90
  188. fd 1
  189. ]
  190. rt 90
  191. fd 0.5
  192. die
  193. ]
  194. end
  195. to show-hud
  196. let player-armor 0
  197. let player-ammo 0
  198. let num-pills 0
  199. if player != nobody [
  200. set player-armor [armor] of player
  201. set player-ammo [ammunition] of player
  202. set num-pills [number-of-pills] of player
  203. ]
  204. ask patch (min-pxcor + 4) max-pycor [
  205. set plabel (word "Armor: " player-armor)
  206. ]
  207. ask patch (min-pxcor + 12) max-pycor [
  208. set plabel (word "Ammo: " player-ammo)
  209. ]
  210. ask patch (max-pxcor - 1) max-pycor [
  211. set plabel (word "Pillboxes: " num-pills)
  212. ]
  213. ask patch (max-pxcor - 1) (min-pycor + 2) [
  214. set plabel (word "Deaths: " player-deaths)
  215. ]
  216. ask patch (max-pxcor - 1) (min-pycor + 1) [
  217. set plabel (word "Kills: " player-kills)
  218. ]
  219. end
  220. to render
  221. display
  222. no-display
  223. end
  224. to keep-time
  225. let time-since-last-tick timer - last-tick-time
  226. let wait-time (1 / max-fps) - time-since-last-tick
  227. wait wait-time
  228. tick
  229. set last-tick-time timer
  230. end
  231. to stop-old-sounds
  232. ; NetLogo sometimes plays sounds for longer than we want
  233. ; i.e., it doesn't know how to properly stop long sounds:
  234. let time-since-last-sound timer - last-sound-time
  235. if time-since-last-sound > 2 and not sound-stopped? [
  236. debug -1 "SOUND-STOP" (word round time-since-last-sound " seconds since last")
  237. sound:stop-music
  238. set sound-stopped? true
  239. ]
  240. end
  241. to play-sound [name]
  242. if enable-sound? [
  243. let dist 0
  244. if player != nobody [
  245. set dist distancexy ([xcor] of player) ([ycor] of player)
  246. ]
  247. let volume 100 - (dist * 4)
  248. if volume > 0 [
  249. sound:play-drum (table:get sounds name) volume
  250. set last-sound-time timer
  251. set sound-stopped? false
  252. ]
  253. ]
  254. end
  255. @#$#@#$#@
  256. GRAPHICS-WINDOW
  257. 254
  258. 10
  259. 964
  260. 541
  261. 17
  262. 12
  263. 20.0
  264. 1
  265. 14
  266. 1
  267. 1
  268. 1
  269. 0
  270. 0
  271. 0
  272. 1
  273. -17
  274. 17
  275. -12
  276. 12
  277. 0
  278. 0
  279. 1
  280. frames
  281. BUTTON
  282. 20
  283. 231
  284. 115
  285. 264
  286. New Game
  287. setup
  288. NIL
  289. 1
  290. T
  291. OBSERVER
  292. NIL
  293. R
  294. NIL
  295. NIL
  296. BUTTON
  297. 130
  298. 231
  299. 224
  300. 264
  301. Play Game
  302. go
  303. T
  304. 1
  305. T
  306. OBSERVER
  307. NIL
  308. G
  309. NIL
  310. NIL
  311. BUTTON
  312. 22
  313. 296
  314. 225
  315. 343
  316. Fire!
  317. player-fire
  318. NIL
  319. 1
  320. T
  321. OBSERVER
  322. NIL
  323. F
  324. NIL
  325. NIL
  326. SWITCH
  327. 50
  328. 97
  329. 186
  330. 130
  331. enable-sound?
  332. enable-sound?
  333. 0
  334. 1
  335. -1000
  336. BUTTON
  337. 23
  338. 396
  339. 226
  340. 429
  341. Cancel Order
  342. player-cancel-order
  343. NIL
  344. 1
  345. T
  346. OBSERVER
  347. NIL
  348. C
  349. NIL
  350. NIL
  351. TEXTBOX
  352. 16
  353. 14
  354. 303
  355. 53
  356. LoBo: Logo Bolo
  357. 28
  358. 0.0
  359. 1
  360. TEXTBOX
  361. 41
  362. 53
  363. 304
  364. 87
  365. a game by Ben Kurtovic
  366. 14
  367. 0.0
  368. 1
  369. TEXTBOX
  370. 19
  371. 75
  372. 241
  373. 93
  374. ---------------------------------
  375. 11
  376. 0.0
  377. 1
  378. TEXTBOX
  379. 22
  380. 273
  381. 263
  382. 301
  383. ---------------------------------
  384. 11
  385. 0.0
  386. 1
  387. BUTTON
  388. 23
  389. 353
  390. 226
  391. 386
  392. Place Pill
  393. player-place-pill
  394. NIL
  395. 1
  396. T
  397. OBSERVER
  398. NIL
  399. P
  400. NIL
  401. NIL
  402. INPUTBOX
  403. 23
  404. 137
  405. 219
  406. 197
  407. map-file
  408. lobo-default-map.png
  409. 1
  410. 0
  411. String
  412. TEXTBOX
  413. 22
  414. 207
  415. 257
  416. 225
  417. ---------------------------------
  418. 11
  419. 0.0
  420. 1
  421. MONITOR
  422. 59
  423. 466
  424. 187
  425. 511
  426. Current AI Routine
  427. [ai-objective] of one-of tanks with [not is-player?]
  428. 17
  429. 1
  430. 11
  431. @#$#@#$#@
  432. LOBO
  433. ----
  434. Lobo is Logo Bolo: a re-envisioning of the classic tank game by Stuart Cheshire in NetLogo. Below you will find a short tutorial on how to play, some known bugs and limitations, and credits.
  435. TUTORIAL
  436. --------
  437. In Lobo, you control a tank and attempt to gain strategic control of the map by posessing all of the refueling bases, while simultaneously using your bullets and automated "pillboxes" as defensive or offensive weapons.
  438. You move your tank, which is black, by clicking anywhere on the playing field Ð you'll drive to that square and stop once you've reached it. If you change your mind and want to stop immediately, double-click anywhere on the map or press "C" (cancel order). The color of the tile represents the type of ground, which determines how fast you drive over it. You drive the fastest on road, which is black; light green grass gives you a medium speed; dark green forest makes you move slowest.
  439. When you start, you'll have a bit of ammunition and full armor. Fire your gun straight by pressing "F", lowering your ammo count by one. Getting shot by another tank or a pillbox will lower your armor count by one, and if that reaches zero, you'll die and respawn randomly. (Both of these counts are displayed on the top-left of the screen.)
  440. The map contains a few bases, which look like yellow squares. At the start of the game, they are gray (neutral) and any tank can claim one by driving over it. If you own a particular base, stopping over it will refuel your tank with ammo and armor. An base you don't own won't refuel you, but you can repeatedly shoot at it to weaken it, then drive over it to "capture" it.
  441. The map also contains a few pillboxes, or "pills", which look like gray circles with colored rectanges sticking out of them. Pills will automatically shoot at their nearest target within range, and they have infinite ammo, but not infinite armor. Destroy an enemy pill (red) and pick it up by driving over it, then place it below you, anywhere on the map, with "P". It'll be green, and will shoot at your enemies instead of you!
  442. You win the game by controlling all refueling bases on the map and then destroying your rival tanks Ð tanks that don't control any bases don't respawn!
  443. ADVANCED TIPS
  444. -------------
  445. * Refueling bases have limited reserves of armor and ammo, which regenerate slowly over time. In particular, shooting at a base lowers its armor reserves, and it is "destroyed" when its armor count reaches zero. Therefore, trying to refuel yourself on a recently captured base might not help that much!
  446. * At the start of the game, try your hardest to ignore the enemy tanks and pills and go straight for bases Ð controlling bases is the most important strategic element, after all.
  447. * To protect your bases from enemy attack, try placing pillboxes directly adjacent to them.
  448. * Pillboxes have "anger" Ð they'll shoot faster if you shoot at them, but they'll calm down over time. In other words, it might not be the best idea to take down an entire pillbox in one go, but hurt it and then come back later.
  449. * Consider shooting your own pillboxes if an enemy is nearby Ð you'll "anger" it, and it will shoot at your opponent faster! Also, don't hesitate to destroy your own pills completely and re-place them in a better location, or even in the same location with full health if they were damaged beforehand.
  450. BUGS / LIMITATIONS
  451. ------------------
  452. In the original Bolo, the map takes up many screen widths and is scrollable with the tank at the center. "follow" by itself wouldn't work, because NetLogo does not allow objects off-screen. I spent a while trying to figure this out, at one point essentially rewriting the rendering engine and using a table of "actual" patch coordinates that was translated into "virtual" patch coordinates each frame Ð not only was this very slow, but it was very overcomplicated and I wasn't able to do everything I had wanted. Instead, the map was made one screen size.
  453. In the original Bolo, patches are not merely colors - they have patterns on them (grass has little green lines, forests are spotted, roads have white stripes). This was not possible in NetLogo because patches can only have a single color.
  454. Time was also a limiting factor: I had planned a lot of additional features found in the original Bolo, like a nicer GUI for showing armor and ammunition, water as a ground-type (which drowns your tank), allies and multiple enemies (grr!), a nicer game-over screen, and a much, much smarter AI. These were skipped so more work could be spent on general polishing and testing.
  455. CREDITS / MISC
  456. --------------
  457. * Stuart Cheshire for the original Bolo game. Some graphics used in this project (tanks, pillboxes, and bases) were heavily based on old sprites taken from Bolo.
  458. * My dad for introducing me to Bolo many years ago, and for helping me simplify the original Bolo game into something possible with NetLogo.
  459. * Josh Hofing for advice on implementing certain features and positive encouragement.
  460. * Chain Algorithm - I wrote the entire AI routine in less than an hour immediately before the project was due (ha!), and I don't think it would be possible if I hadn't been listening to your music on loop the entire time. Really gets your blood pumping, y'know? Yeah.
  461. This project is available on GitHub at https://github.com/earwig/lobo. I used it for syncing code between my netbook and my desktop when working on the project away from home.
  462. Ñ Ben Kurtovic
  463. @#$#@#$#@
  464. default
  465. true
  466. 0
  467. Polygon -7500403 true true 150 5 40 250 150 205 260 250
  468. base
  469. false
  470. 0
  471. Rectangle -1184463 true false 60 240 120 255
  472. Rectangle -1184463 true false 120 225 180 240
  473. Rectangle -1184463 true false 180 240 240 255
  474. Polygon -1184463 true false 45 240 30 240 30 270 60 270 60 255 45 255
  475. Polygon -7500403 true true 195 210 195 225 225 225 225 195 210 195 210 210
  476. Polygon -1184463 true false 60 45 60 30 30 30 30 60 45 60 45 45
  477. Polygon -1184463 true false 240 255 240 270 270 270 270 240 255 240 255 255
  478. Rectangle -1184463 true false 45 60 60 120
  479. Rectangle -1184463 true false 180 45 240 60
  480. Rectangle -1184463 true false 240 180 255 240
  481. Rectangle -1184463 true false 60 120 75 180
  482. Rectangle -1184463 true false 120 60 180 75
  483. Rectangle -1184463 true false 225 120 240 180
  484. Rectangle -1184463 true false 45 180 60 240
  485. Rectangle -1184463 true false 60 45 120 60
  486. Rectangle -1184463 true false 240 60 255 120
  487. Rectangle -1184463 true false 135 135 165 165
  488. Rectangle -1184463 true false 165 120 180 135
  489. Rectangle -1184463 true false 120 120 135 135
  490. Rectangle -1184463 true false 120 165 135 180
  491. Rectangle -1184463 true false 165 165 180 180
  492. Rectangle -7500403 true true 195 105 210 195
  493. Polygon -1184463 true false 255 60 270 60 270 30 240 30 240 45 255 45
  494. Rectangle -7500403 true true 105 90 195 105
  495. Rectangle -7500403 true true 90 105 105 195
  496. Rectangle -7500403 true true 105 195 195 210
  497. Polygon -7500403 true true 210 105 225 105 225 75 195 75 195 90 210 90
  498. Polygon -7500403 true true 105 90 105 75 75 75 75 105 90 105 90 90
  499. Polygon -7500403 true true 90 195 75 195 75 225 105 225 105 210 90 210
  500. bullet
  501. true
  502. 5
  503. Rectangle -16777216 true false 135 30 165 90
  504. Rectangle -1 true false 135 90 165 150
  505. Rectangle -1 true false 135 150 165 210
  506. Polygon -16777216 true false 135 30 150 0 165 30 135 30
  507. Rectangle -2674135 true false 135 210 165 270
  508. Rectangle -16777216 true false 120 270 180 300
  509. Polygon -7500403 true false 195 210 165 150 165 210 195 210
  510. Rectangle -7500403 true false 165 210 195 268
  511. Rectangle -7500403 true false 105 210 135 268
  512. Polygon -7500403 true false 105 210 135 150 135 210 105 210
  513. explosion-large
  514. false
  515. 0
  516. Circle -6459832 true false 2 2 297
  517. Circle -2674135 true false 30 30 240
  518. Circle -955883 true false 60 60 180
  519. Circle -1184463 true false 90 90 120
  520. explosion-med
  521. false
  522. 0
  523. Circle -2674135 true false 0 0 300
  524. Circle -955883 true false 45 45 210
  525. Circle -1184463 true false 90 90 120
  526. explosion-small
  527. false
  528. 0
  529. Circle -2674135 true false 2 2 295
  530. Circle -955883 true false 75 75 148
  531. pillbox-alive-1
  532. false
  533. 1
  534. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  535. Rectangle -2674135 true true 225 135 300 165
  536. Rectangle -2674135 true true 135 0 165 75
  537. Rectangle -2674135 true true 0 135 75 165
  538. Rectangle -2674135 true true 135 225 165 300
  539. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  540. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  541. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  542. Circle -7500403 true false 47 42 210
  543. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  544. Polygon -16777216 true false 203 122 218 185 193 205 150 235 138 219 149 221 176 201 203 188 183 173 200 157 187 128 198 109
  545. Polygon -16777216 true false 116 183 126 216 143 210 129 207 123 182
  546. Polygon -16777216 true false 116 185 101 216 116 235 127 214
  547. Polygon -16777216 true false 154 67 188 61 218 99 192 86 178 144 179 86 158 66
  548. Polygon -16777216 true false 221 118 236 158 231 191 243 157
  549. Polygon -16777216 true false 105 120 135 90 150 120 123 146 110 181 97 157 112 105
  550. Polygon -16777216 true false 116 97 80 101 73 121 61 127 64 152 62 196 81 194 75 154 85 125 95 100
  551. Polygon -16777216 true false 152 224 182 234 212 216 230 196 211 202 191 218 187 206 160 223
  552. Polygon -16777216 true false 86 78 118 58 154 60 169 52 146 71 126 68 97 87 71 93 86 78
  553. Polygon -16777216 true false 218 107 248 139 245 184 230 192 224 154 225 126 214 109
  554. Polygon -16777216 true false 75 90 120 60 195 60 227 123 232 177 202 178 198 105 156 74 84 99 57 133 73 83
  555. Polygon -16777216 true false 77 147 124 213 176 210 222 179 167 171 137 191 105 141 67 117
  556. Polygon -16777216 true false 76 196 135 244 191 237 226 206 174 209 110 220 82 179 74 198
  557. Polygon -16777216 true false 101 67 154 52 175 134 135 94 92 95
  558. Polygon -16777216 true false 79 168 170 162 172 139 135 151 72 153
  559. Polygon -16777216 true false 207 80 249 119 166 172 160 128 208 83
  560. pillbox-alive-2
  561. false
  562. 1
  563. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  564. Rectangle -2674135 true true 225 135 300 165
  565. Rectangle -2674135 true true 135 0 165 75
  566. Rectangle -2674135 true true 0 135 75 165
  567. Rectangle -2674135 true true 135 225 165 300
  568. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  569. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  570. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  571. Circle -7500403 true false 47 42 210
  572. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  573. Polygon -16777216 true false 203 122 218 185 193 205 150 235 138 219 149 221 176 201 203 188 183 173 200 157 187 128 198 109
  574. Polygon -16777216 true false 116 183 126 216 143 210 129 207 123 182
  575. Polygon -16777216 true false 116 185 101 216 116 235 127 214
  576. Polygon -16777216 true false 154 67 188 61 218 99 192 86 178 144 179 86 158 66
  577. Polygon -16777216 true false 221 118 236 158 231 191 243 157
  578. Polygon -16777216 true false 105 120 135 90 150 120 123 146 110 181 97 157 112 105
  579. Polygon -16777216 true false 116 97 80 101 73 121 61 127 64 152 62 196 81 194 75 154 85 125 95 100
  580. Polygon -16777216 true false 152 224 182 234 212 216 230 196 211 202 191 218 187 206 160 223
  581. Polygon -16777216 true false 86 78 118 58 154 60 169 52 146 71 126 68 97 87 71 93 86 78
  582. Polygon -16777216 true false 218 107 248 139 245 184 230 192 224 154 225 126 214 109
  583. Polygon -16777216 true false 75 90 120 60 195 60 227 123 232 177 202 178 198 105 156 74 84 99 57 133 73 83
  584. Polygon -16777216 true false 77 147 124 213 176 210 222 179 167 171 137 191 105 141 67 117
  585. Polygon -16777216 true false 76 196 135 244 191 237 226 206 174 209 110 220 82 179 74 198
  586. pillbox-alive-3
  587. false
  588. 1
  589. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  590. Rectangle -2674135 true true 225 135 300 165
  591. Rectangle -2674135 true true 135 0 165 75
  592. Rectangle -2674135 true true 0 135 75 165
  593. Rectangle -2674135 true true 135 225 165 300
  594. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  595. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  596. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  597. Circle -7500403 true false 47 42 210
  598. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  599. Polygon -16777216 true false 203 122 218 185 193 205 150 235 138 219 149 221 176 201 203 188 183 173 200 157 187 128 198 109
  600. Polygon -16777216 true false 116 183 126 216 143 210 129 207 123 182
  601. Polygon -16777216 true false 116 185 101 216 116 235 127 214
  602. Polygon -16777216 true false 154 67 188 61 218 99 192 86 178 144 179 86 158 66
  603. Polygon -16777216 true false 221 118 236 158 231 191 243 157
  604. Polygon -16777216 true false 105 120 135 90 150 120 123 146 110 181 97 157 112 105
  605. Polygon -16777216 true false 116 97 80 101 73 121 61 127 64 152 62 196 81 194 75 154 85 125 95 100
  606. Polygon -16777216 true false 152 224 182 234 212 216 230 196 211 202 191 218 187 206 160 223
  607. Polygon -16777216 true false 86 78 118 58 154 60 169 52 146 71 126 68 97 87 71 93 86 78
  608. Polygon -16777216 true false 218 107 248 139 245 184 230 192 224 154 225 126 214 109
  609. pillbox-alive-4
  610. false
  611. 1
  612. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  613. Rectangle -2674135 true true 225 135 300 165
  614. Rectangle -2674135 true true 135 0 165 75
  615. Rectangle -2674135 true true 0 135 75 165
  616. Rectangle -2674135 true true 135 225 165 300
  617. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  618. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  619. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  620. Circle -7500403 true false 47 42 210
  621. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  622. Polygon -16777216 true false 203 122 218 185 193 205 150 235 138 219 149 221 176 201 203 188 183 173 200 157 187 128 198 109
  623. Polygon -16777216 true false 116 183 126 216 143 210 129 207 123 182
  624. Polygon -16777216 true false 116 185 101 216 116 235 127 214
  625. Polygon -16777216 true false 154 67 188 61 218 99 192 86 178 144 179 86 158 66
  626. Polygon -16777216 true false 221 118 236 158 231 191 243 157
  627. Polygon -16777216 true false 105 120 135 90 150 120 123 146 110 181 97 157 112 105
  628. Polygon -16777216 true false 116 97 80 101 73 121 61 127 64 152 62 196 81 194 75 154 85 125 95 100
  629. pillbox-alive-5
  630. false
  631. 1
  632. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  633. Rectangle -2674135 true true 225 135 300 165
  634. Rectangle -2674135 true true 135 0 165 75
  635. Rectangle -2674135 true true 0 135 75 165
  636. Rectangle -2674135 true true 135 225 165 300
  637. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  638. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  639. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  640. Circle -7500403 true false 45 45 210
  641. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  642. Polygon -16777216 true false 203 122 218 185 193 205 150 235 138 219 149 221 176 201 203 188 183 173 200 157 187 128 198 109
  643. Polygon -16777216 true false 116 183 126 216 143 210 129 207 123 182
  644. Polygon -16777216 true false 116 185 101 216 116 235 127 214
  645. Polygon -16777216 true false 154 67 188 61 218 99 192 86 178 144 179 86 158 66
  646. pillbox-alive-6
  647. false
  648. 1
  649. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  650. Rectangle -2674135 true true 225 135 300 165
  651. Rectangle -2674135 true true 135 0 165 75
  652. Rectangle -2674135 true true 0 135 75 165
  653. Rectangle -2674135 true true 135 225 165 300
  654. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  655. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  656. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  657. Circle -7500403 true false 45 45 210
  658. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  659. Polygon -16777216 true false 203 122 218 185 193 205 150 235 138 219 149 221 176 201 203 188 183 173 200 157 187 128 198 109
  660. Polygon -16777216 true false 116 183 126 216 143 210 129 207 123 182
  661. pillbox-alive-7
  662. false
  663. 1
  664. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  665. Rectangle -2674135 true true 225 135 300 165
  666. Rectangle -2674135 true true 135 0 165 75
  667. Rectangle -2674135 true true 0 135 75 165
  668. Rectangle -2674135 true true 135 225 165 300
  669. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  670. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  671. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  672. Circle -7500403 true false 45 45 210
  673. Polygon -16777216 true false 117 90 87 136 100 198 102 149 111 121 145 95 129 78 122 95
  674. pillbox-alive-8
  675. false
  676. 1
  677. Polygon -2674135 true true 270 240 270 270 240 270 180 210 210 180 270 240
  678. Rectangle -2674135 true true 225 135 300 165
  679. Rectangle -2674135 true true 135 0 165 75
  680. Rectangle -2674135 true true 0 135 75 165
  681. Rectangle -2674135 true true 135 225 165 300
  682. Polygon -2674135 true true 240 30 270 30 270 60 210 120 180 90 240 30
  683. Polygon -2674135 true true 30 60 30 30 60 30 120 90 90 120 30 60
  684. Polygon -2674135 true true 60 270 30 270 30 240 90 180 120 210 60 270
  685. Circle -7500403 true false 45 45 210
  686. pillbox-dead
  687. false
  688. 1
  689. Polygon -7500403 true false 240 30 270 30 270 60 240 90 210 60 240 30
  690. Rectangle -7500403 true false 135 0 165 45
  691. Rectangle -7500403 true false 0 135 45 165
  692. Rectangle -7500403 true false 135 255 165 300
  693. Rectangle -7500403 true false 255 135 300 165
  694. Polygon -7500403 true false 30 60 30 30 60 30 90 60 60 90 30 60
  695. Polygon -7500403 true false 60 270 30 270 30 240 60 210 90 240 60 270
  696. Polygon -7500403 true false 270 240 270 270 240 270 210 240 240 210 270 240
  697. Polygon -2674135 true true 195 165 210 180 210 210 180 210 165 195
  698. Polygon -2674135 true true 165 105 180 90 210 90 210 120 195 135
  699. Polygon -2674135 true true 105 135 90 120 90 90 120 90 135 105
  700. Polygon -2674135 true true 135 195 120 210 90 210 90 180 105 165
  701. tank
  702. true
  703. 1
  704. Rectangle -7500403 true false 78 85 116 103
  705. Polygon -7500403 true false 105 270 210 271 210 105 180 105 180 135 120 135 120 105 90 105 89 270
  706. Polygon -2674135 true true 120 105 90 105 90 180 120 180 120 195 180 195 180 180 210 180 210 105 180 105 165 105 165 135 135 135 135 105 120 105
  707. Polygon -1 true false 135 15 135 150 165 150 165 15
  708. Polygon -1 true false 67 105 67 255 97 255 97 105
  709. Polygon -1 true false 202 105 202 255 232 255 232 105
  710. Rectangle -7500403 true false 184 85 222 103
  711. @#$#@#$#@
  712. NetLogo 4.1.3
  713. @#$#@#$#@
  714. @#$#@#$#@
  715. @#$#@#$#@
  716. @#$#@#$#@
  717. @#$#@#$#@
  718. default
  719. 0.0
  720. -0.2 0 1.0 0.0
  721. 0.0 1 1.0 0.0
  722. 0.2 0 1.0 0.0
  723. link direction
  724. true
  725. 0
  726. Line -7500403 true 150 150 90 180
  727. Line -7500403 true 150 150 210 180
  728. @#$#@#$#@
  729. 0
  730. @#$#@#$#@