This page was automatically generated by NetLogo 4.1.1.
The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Sun's Java site.
In order for this to work, this file, your model file (Practisim4_quarantinegame2.nlogo), and the file NetLogoLite.jar must all be in the same directory. (You can copy NetLogoLite.jar from the directory where you installed NetLogo.)
The applet will also need access to the sound extension. Copy the entire directory for each required extension into the same directory as the applet.
On some systems, you can test the applet locally on your computer before uploading it to a web server. It doesn't work on all systems, though, so if it doesn't work from your hard drive, please try uploading it to a web server.
You don't need to include everything in this file in your page. If you want, you can just take the HTML code beginning with <applet> and ending with </applet>, and paste it into any HTML file you want. It's even OK to put multiple <applet> tags on a single page.
If NetLogoLite.jar and your model are in different directories, you must modify the archive= and value= lines in the HTML code to point to their actual locations. (For example, if you have multiple applets in different directories on the same web server, you may want to put a single copy of NetLogoLite.jar in one central place and change the archive= lines of all the HTML files to point to that one central copy. This will save disk space for you and download time for your users.)
powered by NetLogo
view/download model file: Practisim4_quarantinegame2.nlogo
This section could give a general understanding of what the model is trying to show or explain.
This section could explain what rules the agents use to create the overall behavior of the model.
This section could explain how to use the model, including a description of each of the items in the interface tab.
This section could give some ideas of things for the user to notice while running the model.
This section could give some ideas of things for the user to try to do (move sliders, switches, etc.) with the model.
This section could give some ideas of things to add or change in the procedures tab to make the model more complicated, detailed, accurate, etc.
This section could point out any especially interesting or unusual features of NetLogo that the model makes use of, particularly in the Procedures tab. It might also point out places where workarounds were needed because of missing features.
This section could give the names of models in the NetLogo Models Library or elsewhere which are of related interest.
This section could contain a reference to the model's URL on the web if it has one, as well as any other necessary credits or references.
;;Extensions Library;; extensions [sound] ;;Turtle Breeds;; breed [extractors extractor] breed [peeps peep] breed [apeeps apeep] breed [bpeeps bpeep] breed [cpeeps cpeep] breed [dpeeps dpeep] breed [epeeps epeep] breed [qpeeps qpeep] ;;Variables List;; globals [up lef down righ lift scan pop popstat level score tscore goal time startpop maxpop bio long iat ia ib ic id ie iq dialogue] ;; includes input from buttons the player presses among other globals patches-own [dirty wall] turtles-own [energy delay] ;; tracks reproductive readiness of healthy peeps and dpeeps before hatching clocks the amount of time sick peeps have before dying ;;Reporters List;; to-report timeLeft ;; shows time remaining for player to finish level report (time) end to-report extractorScore ;; tallies player's score for level (number of healthy peeps extracted) report (score) end to-report totalScore ;; tallies players' score for the whole campaign report (tscore) end to-report popSupport report (popstat) end to-report bioSphere report (bio) end to-report currentLevel report (level) end ;;Primary Procedures;; to setUp clear-all if "yes" = user-one-of "Welcome to Talahas Extractor! \n In this game, you're Charis, the operator of a spacecraft that siphons ('extracts') livestock in the BioDomes on planet Talahas. Your job is to oversee and harvest livestock from these BioDomes under various conditions. If this is your first time playing (or you enjoy a little back-story), dialogue mode is recommended... \n Run dialogue mode?" ["yes" "no"] [set dialogue true] setCounts addExtractor infectPatches wallPatches addPeeps infectPeeps checkBreeds end to setUpX clear-plot clear-turtles clear-patches setCounts addExtractor infectPatches wallPatches addPeeps infectPeeps checkBreeds end to runGame if count peeps = 0 [gameOver1 stop] if bio <= 0 [gameOver2 stop] if time = 0 and score < goal [gameOver3 stop] ;; stops game from running when time's up or other criteria fail if time = 0 and score >= goal [advanceGame stop] renewPopulation ;; processes the death and reproduction of new turtles useExtractor ;; player-controlled extractor makes its move(s) movePeeps ;; peeps wander around the map in pseudo-random fashion spreadInfection ;; disease status of turtles updated checkBreeds ;; sets appropriate color/ other attributes of diseased turtles updateCounts ;; refreshes game statistics and updates to viewer & plots if dialogue = true [showDialogue] ;; gives end ;;Secondary Procedures;; to setCounts ;; initializes variables and counters pertinent to the level if level = 0 [set level 1] if level = 1 [startLevel1] if level = 2 [startLevel2] if level = 3 [startLevel3] if level = 4 [startLevel4] if level = 5 [startLevel5] if level = 6 [startLevel6] if level = 7 [startLevel7] if level = 8 [startLevel8] if level = 9 [startLevel9] if level = 10 [startLevel10] if level = 11 [startLevel11] set score 0 set popstat (list startpop "/" maxpop) set scan -1 end to addExtractor create-extractors 1 ;; sets extractor at the center origin of the map ask extractors [set shape "circle 2" set color blue] end to infectPatches ;;while [count patches with [pcolor = brown] < 3] ;;[ask one-of patches ;;[if count patches with [pcolor = brown] in-radius 5 = 0 ;;[set pcolor brown]]] ask patches [if abs (pxcor) = 21 or abs (pycor) = 21 [set pcolor brown set dirty true]] end to wallPatches ;; defines impassable terrain for ordinary turtles if level = 1 [;;import-pcolors "jupiterspots.jpg" mapLevel1] if level = 2 [mapLevel2] if level = 3 [mapLevel3] if level = 4 [mapLevel4] if level = 5 [mapLevel5] if level = 6 [mapLevel6] if level = 7 [mapLevel7] if level = 8 [mapLevel8] if level = 9 [mapLevel9] if level = 10 [mapLevel10] end to addPeeps set-default-shape turtles "sheep" ;;loop [spawnPeeps] create-peeps 20 ask peeps [set color white setxy random-xcor random-ycor while [count peeps in-radius 2 > 1 or [dirty] of patch-here = true or [wall] of patch-here = true] [setxy random-xcor random-ycor]] ;; randomly seeds peeps across map, with specified minimum distance between peeps end to infectPeeps repeat ia ;; determines number of type sick peeps at start [ask one-of peeps [set breed apeeps set energy 80]] repeat ib [ask one-of peeps [set breed bpeeps set energy 80]] repeat ic [ask one-of peeps [set breed cpeeps set delay 40]] repeat id [ask one-of peeps [set breed dpeeps]] repeat ie [ask one-of peeps [set breed epeeps set delay 20]] end to renewPopulation ask peeps [set energy (energy + (count peeps-here * random 2))] ;; peeps reproductively mature at various rates, accelerated by proximity of mates ask peeps [if energy >= long [set energy 0 hatch 2 die]] ;; ask apeeps [set energy (energy - random 2) ;; infected peeps slowly die if energy = 0 [die]] ;; ask bpeeps [set energy (energy - random 2) if energy = 0 [die]] ;; ask cpeeps [set delay (delay - 1) ;; delay counts down before cpeep is fully manifest if delay = -1 [set energy 80]] ask cpeeps [set energy (energy - random 2) if energy = 0 [die]] ;; ask dpeeps [set energy (energy + random 2)] ;; dpeeps behave ostensibly like normal peeps, until they hatch their sick kin ask dpeeps [if energy >= (long * .5) ;; dpeeps sprout fake peep offspring which go on to produce apeeps and more dpeeps [set color white hatch 1] if energy >= (long) [set energy 80 hatch-apeeps 1 set energy 0 hatch 1 die]] ;; ask epeeps [set delay (delay - 1) if delay = -1 [set energy 80]] ask epeeps [set energy (energy - random 2) if energy = 0 [die]] end to useExtractor ;;if (key =! 0) if (up = 1) [moveUp] if (lef = 1) [moveLeft] if (down = 1) [moveDown] if (righ = 1) [moveRight] if (lift = 1) [extractPeep] if (scan = 1) [showEnergy] set up 0 set lef 0 set down 0 set righ 0 set lift 0 end to movePeeps ask peeps ;;if not can-move? 0.5 [rt 180] [rt random 360 if [wall] of patch-ahead 1 = true [if heading >= 315 or heading < 45 or (heading >= 135 and heading < 225) [set heading (180 - heading)] if (heading >= 45 and heading < 135) or (heading >= 225 and heading < 315) [set heading (- heading)]] fd 0.5] ;; peeps turn around randomly and go forward or 'bounce off' a wall in front of them ask apeeps [rt random 360 if [wall] of patch-ahead 1 = true [if heading >= 315 or heading < 45 or (heading >= 135 and heading < 225) [set heading (180 - heading)] if (heading >= 45 and heading < 135) or (heading >= 225 and heading < 315) [set heading (- heading)]] fd 0.5] ;; ask bpeeps [rt random 360 if [wall] of patch-ahead 1 = true [if heading >= 315 or heading < 45 or (heading >= 135 and heading < 225) [set heading (180 - heading)] if (heading >= 45 and heading < 135) or (heading >= 225 and heading < 315) [set heading (- heading)]] fd 0.25] ;; due to symptoms, bpeeps move slower than other peeps ;; ask cpeeps [rt random 360 if [wall] of patch-ahead 1 = true [if heading >= 315 or heading < 45 or (heading >= 135 and heading < 225) [set heading (180 - heading)] if (heading >= 45 and heading < 135) or (heading >= 225 and heading < 315) [set heading (- heading)]] fd 0.5] ;; ask dpeeps [rt random 360 if [wall] of patch-ahead 1 = true [if heading >= 315 or heading < 45 or (heading >= 135 and heading < 225) [set heading (180 - heading)] if (heading >= 45 and heading < 135) or (heading >= 225 and heading < 315) [set heading (- heading)]] fd 0.5] ;; ask epeeps [if delay >= 0 [rt random 360 if [wall] of patch-ahead 1 = true [if heading >= 315 or heading < 45 or (heading >= 135 and heading < 225) [set heading (180 - heading)] if (heading >= 45 and heading < 135) or (heading >= 225 and heading < 315) [set heading (- heading)]] fd 0.5] if delay < 0 ;; After Delay, epeeps move faster than others and ignore movement restrictions imposed by walls (tearing them down instead) [rt random 360 fd 1.0 ask patch-here [set wall false set pcolor brown]]] end to spreadInfection ask apeeps [let victim peeps-here ask victim [set breed apeeps set energy 80]] ;; apeeps infect healthy peeps on contact ask bpeeps [let victim peeps in-radius 2 ask victim [set breed bpeeps set energy 80]] ;; bpeeps infect healthy peeps in the local area ask cpeeps [let victim peeps-here ask victim [set breed cpeeps set delay 40]] ;;dpeeps infect other peeps indirectly ask epeeps [let victim peeps-here ask victim [set breed epeeps set delay 20]] ask qpeeps [let victim peeps-here ask victim [set breed qpeeps]] ;; ask patches [if dirty = true [ask peeps-here [let strain random 20 if strain < ia [set breed apeeps set energy 80] if strain < (ia + ib) and strain >= ia [set breed bpeeps set energy 80] if strain < (ia + ib + ic) and strain >= (ia + ib) [set breed cpeeps] if strain < (ia + ib + ic + id) and strain >= (ia + ib + ic) [set breed dpeeps] if strain < (ia + ib + ic + id + ie) and strain >= (ia + ib + ic + id) [set breed epeeps]]]] ;; ask peeps [let infection random 10000 if infection <= iat [let strain random 20 if strain < ia [set breed apeeps] if strain < (ia + ib) and strain >= ia [set breed bpeeps] if strain < (ia + ib + ic) and strain >= (ia + ib) [set breed cpeeps] if strain < (ia + ib + ic + id) and strain >= (ia + ib + ic) [set breed dpeeps] if strain < (ia + ib + ic + id + ie) and strain >= (ia + ib + ic + id) [set breed epeeps]]] end to checkBreeds ask turtles [if breed = peeps [set color white] if breed = apeeps [set color yellow] if breed = bpeeps [set color orange] if breed = cpeeps and delay = 0 [set color green] if breed = dpeeps and energy <= (long * .5) [set color violet] ;; makes this breed visually indistinguishable from normal peeps *except when contained as purple if breed = epeeps and delay = 0 [set color red]] end to updateCounts set pop count turtles - 1 set popstat (list pop "/" maxpop) if pop > maxpop [set bio bio - (pop - maxpop)] ;;Biosphere Vitals Plot set-current-plot "BioSphere" set-current-plot-pen "Healthy" plot count peeps set-current-plot-pen "Sick" plot (count apeeps + count bpeeps + count cpeeps + count dpeeps + count epeeps) set-current-plot-pen "Integrity" plot bio / 10 set time time - 1 end ;;Tertiary Procedures;; to moveUp ask extractors [set heading 0 fd 2] end to moveLeft ask extractors [set heading 270 fd 2] end to moveDown ask extractors [set heading 180 fd 2] end to moveRight ask extractors [set heading 90 fd 2] end to extractPeep ask extractors [let points peeps in-radius 2 ask points [set score score + 1] let target other turtles in-radius 2 ask target [die]] end to showEnergy ask turtles [set label-color blue set label energy] end ;;to tagPeeps ask peeps [set label who] end ;;Special Level Procedures;; to startLevel1 ;; introductory level. No sick peeps and slower reproduction set goal 100 set time 1000 set startpop 20 set maxpop 80 set bio 800 set long 80 end to startLevel2 set goal 150 set time 1200 set startpop 30 set maxpop 100 set bio 1000 set long 80 set ia 5 end to startLevel3 set goal 75 set time 1500 set startpop 30 set maxpop 100 set bio 1000 set long 80 set iat 20 ;; Plague settings are tweaked here set ia 5 end to startLevel4 set time 2000 set startpop 30 set maxpop 100 set bio 1000 set long 80 set iat 2 set ia 4 set ib 4 end to startLevel5 set time 1200 set startpop 30 set maxpop 100 set bio 1000 set long 80 set iat 2 set ia 0 set ib 0 set ic 5 end to startLevel6 set time 2000 set startpop 40 set maxpop 120 set bio 1200 set long 80 set iat 5 set ia 3 set ib 3 set ic 3 end to startLevel7 set time 1500 set startpop 30 set maxpop 100 set bio 1000 set long 80 set iat 2 set ia 5 set ib 0 set ic 0 set id 5 end to startLevel8 set time 2000 set startpop 50 set maxpop 150 set bio 1500 set long 50 set iat 5 set ia 4 set ib 4 set ic 4 set id 4 end to startLevel9 set time 1200 set startpop 40 set maxpop 120 set bio 1200 set long 80 set iat 10 set ia 4 set ib 4 set ic 4 set id 4 set ie 4 end to startLevel10 set time 1200 set startpop 30 set maxpop 100 set bio 1000 set long 50 set iat 20 set ia 4 set ib 4 set ic 4 set id 4 set ie 4 end to startLevel11 set time 2000 set startpop 25 set maxpop 999999 set bio 1000 set long 80 set iat 0 set ia 0 set ib 0 set ic 0 set id 0 set ie 0 set iq 7 end to mapLevel1 ask patch 0 0 [set wall true set pcolor green] ;; starting pod wall ask patches [if abs (pxcor) >= 20 or abs (pycor) >= 20 [set wall true set pcolor green]] ;; thick protective wall around ask patches [if ((pxcor > 3 and pxcor < 6) and (pycor > 3 and pycor < 12)) or ((pxcor > 3 and pxcor < 12) and (pycor > 3 and pycor < 6)) or ((pxcor > -6 and pxcor < -3) and (pycor > -12 and pycor < -3)) or ((pxcor > -12 and pxcor < -3) and (pycor > -6 and pycor < -3)) or ((pxcor > 3 and pxcor < 6) and (pycor > -12 and pycor < -3)) or ((pxcor > 3 and pxcor < 12) and (pycor > -6 and pycor < -3)) or ((pxcor > -6 and pxcor < -3) and (pycor > 3 and pycor < 12)) or ((pxcor > -12 and pxcor < -3) and (pycor > 3 and pycor < 6)) [set wall true set pcolor green]] end to mapLevel2 ask patch 0 0 [set wall true set pcolor green] ;; starting pod wall ask patches [if (abs (pycor) <= 13) and ((pxcor >= -14 and pxcor <= -13) or (pxcor >= 13 and pxcor <= 14)) [set wall true set pcolor green]] ask patches [if abs (pxcor) = 21 or abs (pycor) = 21 [set wall true set pcolor green]] ;; outer surrounding wall ask patches [if (abs (pycor) = 21) and ((pxcor >= -14 and pxcor <= -13) or (pxcor >= 19 and pxcor <= 21)) [set wall false set pcolor black]] ;; outer wall holes end to mapLevel3 ask patches [if abs (pxcor) = 21 or abs (pycor) = 21 [set wall true set pcolor green]] ;; outer surrounding wall ask patches [if abs (pxcor) = 12 or abs (pycor) = 12 ;; inner surrounding wall [set wall true set pcolor green]] ask patches [if (pxcor > -10 and pxcor < 0) or (pycor > 0 and pycor < 10) ;; set holes in walls [set wall false set pcolor black]] end to mapLevel4 ;; giant land ask patches [if (pxcor >= -2 and pxcor <= 2) and (pycor >= -2 and pycor <= 2) [set wall true set pcolor green]] ;; a larger 'start pod' ask patches [if abs (pxcor) >= 19 or abs (pycor) >= 19 [set wall true set pcolor green]] ;; huge thick outer wall ask patches [if ((pxcor >= -21 and pxcor <= 19) and (pycor >= 13 and pycor <= 18)) or ((pxcor >= -18 and pxcor <= -13) and (pycor >= -21 and pycor <= -19)) or ((pxcor >= 13 and pxcor <= 18) and (pycor >= 19 and pycor <= 21)) or ((pxcor >= 19 and pxcor <= 21) and (pycor >= -18 and pycor <= -13)) [set wall false set pcolor black]] ;; great holes in the great wall ask patches [if ((pxcor >= 11 and pxcor <= 15) and (pycor <= 10)) or ((pxcor >= -13 and pxcor <= -9) and (pycor <= 10)) [set wall true set pcolor green]] end to mapLevel5 ;; folding-in corridor end to mapLevel6 end to mapLevel7 end to mapLevel8 end to mapLevel9 end to mapLevel10 end ;;Game Progress and Messages;; to gameOver1 user-message (word "In your negligence, all healthy livestock have been wiped out. GAME OVER") end to gameOver2 user-message (word "Your creatures have overrun the biosphere and destroyed it from within. GAME OVER") end to gameOver3 user-message (word "You have not reached your extraction quota in the allotted time. GAME OVER") end to advanceGame user-message (word "Congragulations. You have harvested" score "peeps and earn a BioSphere maintanence bonus of" floor (bio / 10)) if level = 1 [user-message (word "OVERSEER: You've met your first quota, well done. Perhaps you'll prove useful to the corporation afterall...")] set tscore (tscore + (score + (floor (bio / 10)))) set level (level + 1) setUpX end to showDialogue if level = 1 and time = 999 [user-message (word "OVERSEER: Welcome to work at PeepCo. You'll be operating the extractor unit in Talahas sector 13Ya. Before being sent to the larger fields, you will learn about our collection procedure and basic population management here. I now defer you to your new assistant android, ROYJO.") user-message (word "ROYJO: Greetings, Miss Charis. I have been assigned to accompany you for training and the duration of your employment. If it would ease our interaction significantly, please call me Joe.") user-message (word "CHARIS: An android for an assistant, huh? This company is already making me feel like royalty...") user-message (word "ROYJO: Regardless of what my built-in sarcasm detector tells me, Miss Charis, my duty is to make sure you're properly trained...") user-message (word "CHARIS: This is going to be a long day... need coffee...")] if level = 1 and time = 990 [user-message (word "ROYJO: See the blue circle in the center of the map? This is your Extractor. You control its movement with the WASD keys...")] ;; if level = 1 and time = 980 [user-message (word "ROYJO: Now notice the white critters bumbling around the map... These are Extraterrestria Ptalaha, better known as 'peeps'.") user-message (word "CHARIS: Cute little buggers, aren't they?") user-message (word "ROYJO: If you watch them for a while, you'll notice their numbers start increasing somewhat")] ;; if level = 1 and time = 900 [user-message (word "ROYJO: Another tip you might appreciate: If you ever need a quick break, you can pause and unpause the game with the P button")] if level = 1 and time = 800 [user-message (word "ROYJO: The peeps are reproducing through the process of binary fission (splitting in two periodically)") user-message (word "CHARIS: That sounds even better than mammalian pregnancy") user-message (word "ROYJO: When peeps come into contact with other peeps, the genetic exchange accelerates their metabolism, propelling them to multiply even more quickly") user-message (word "ROYJO: Essentially, the more peeps there are around to reproduce, the faster the peep-ulation will continue growing") user-message (word "ROYJO: You can track exactly how many peeps are in this BioDome by glancing at the left number under 'Upkeep'")] ;; if level = 1 and time = 750 [user-message (word "ROYJO: Feel free to move around the Biodome. You'll notice that unlike our peeps, the Extractor isn't restricted by walls.") user-message (word "ROYJO: Even better, you can take advantage of the Biodome's shape to exit one edge and emerge from the opposite side of the map! This will prove to be a handy shortcut when things get frantic.")] ;; if level = 1 and time = 700 [user-message (word "ROYJO: Ultimately, we have to get the population under control, before the peeps multiply beyond the Biosphere's capacity") user-message (word "ROYJO: The right-side number tells you the total number of peeps our Biodome can support at one time before it starts collapsing") user-message (word "ROYJO: To trim the herd down, we need to start 'extracting' peeps from the Biosphere")] ;; if level = 1 and time = 675 [user-message (word "ROYJO: When you're ready, find a nice group of peeps and move your Extractor torwards them") user-message (word "ROYJO: Press O (as in Otter) when you're hovering over a few of the beasts.") user-message (word "This 'extracts' them from the biosphere to our facility (where they are processed for their organs). Don't worry, PeepCo assures us their slaughter is humane.") user-message (word "ROYJO: Ultimately, the number of peeps you harvest determines how many points you're awarded. That would be your 'Score'...")] ;; if level = 1 and time = 650 [user-message (word "ROYJO: As you start seeing, the task of harvesting from a BioDome is a delicate matter of balance. You want to keep enough peeps around to increase output, without allowing their population overwhelming the BioSphere's means of support") user-message (word "ROYJO: Note in case of emergency, the BioSphere can temporarily withstand overpopulation (see the brown line on the 'BioSphere' data output for structural integrity). However, gross overpopulation will cause it to collapse more quickly, giving you less time to bring things back under control") user-message (word "ROYJO: Above all else, make sure you do NOT kill all your peeps. Peep output will cease, and the company will have to repopulate the area. Ergo, you'll be fired!")] ;; if level = 1 and time = 600 [user-message (word "ROYJO: Your population is still high, I hope? We need to be able to extract 100 peeps before our time runs out!")] ;; if level = 1 and time = 100 [user-message (word "ROYJO: We got to start wrapping up pretty soon. We've extracted " score " peeps and the minimum is 100...") user-message (word "CHARIS: I'll try not to get TOO excited...")] ;; if level = 2 and time = 1199 [user-message (word "ROYJO: Unfortunately, not all our BioSpheres can be completely sterilized from intruders.") user-message (word "ROYJO: On this agricultural planet, there are numerous parasites that infest peeps' bodies and use them as vessels to infect more hosts. See those sickly yellow peeps? They're already infested and need to be removed before they come into physical contact with healthy bodies... ") user-message (word "CHARIS: So now we're competing with alien body-snatchers, great...") user-message (word "ROYJO: Most of these parasites are contracted along the outer edges of the BioSphere, where we can't monitor things directly and the barriers may be dillapidated. Hence, we must make a point to keep most of our herd in the middle of the BioSphere and stop too many peeps from wandering out to the edges.") user-message (word "CHARIS: I'll keep that in mind.")] ;; if level = 3 and time = 1499 [user-message (word "ROYJO: Making matters more unpredictable, many BioSpheres have not been properly decontaminated to begin with.") user-message (word "ROYJO: Data on this particular BioSphere shows continuous infection of the populace from pervasive airborne spores") user-message (word "CHARIS: I guess asking management to fix it would just make matters too easy, huh?") user-message (word "ROYJO: The situation is urgent. You must stop any outbreaks that occur before they threaten your entire stock")] if level = 4 and time = 1999 [user-message (word "CHARIS: What are those hideous things?") user-message (word "ROYJO: Those orange peeps are infested with another type of parasite. These buggers put extra stress on the hosts' bodies, reducing them to slow lumbering bags of disease.") user-message (word "CHARIS: Those poor bastards. At least it'll be easy to mop them up before they wreck everything else.") user-message (word "ROYJO: Not necessarily. This parasite has the unsavory ability to spray eggs from its host onto other nearby peeps. Left unchecked, this highly contagious parasite can spread through your populace like wildfire.") user-message (word "ROYJO: We should try to separate the herds out a little so we won't have a chain of infestations...") user-message (word "CHARIS: I know all about herding, so we should be set then!")] end