| !---------------------------------------------------------------------------- | |
| ! Visual.inf (Visualizing) Doe's Scenery Example 5/10/99 | |
| ! Copyright 1999 by The Tame Computer, Marnie Parker | |
| ! All rights reserved. (aka Doe) doeadeer3@aol.com | |
| ! | |
| ! The source code is solely for educational purposes, it may not be changed, | |
| ! recompiled (when changed), and redistributed by anyone but the author. | |
| !---------------------------------------------------------------------------- | |
| ! The creek near where I lived. Real life stuff and probably boring as hell, | |
| ! but it is meant to be more experiential than a "story". This is definitely | |
| ! a more complicated entry than most newbies would write. Took me about 4-6 | |
| ! weeks all told. With longer time and more polishing, it could be better. | |
| ! Note: Discussion of puzzle vs. non-puzzle through out this source code | |
| ! pertains to earlier art shows when "puzzles" were not allowed. Rules | |
| ! were changed for IF Art Show 2000, because I thought the basic point of | |
| ! the show had been made well enough that puzzles could now be allowed. | |
| ! 3/9/00 Doe | |
| ! I suppose it does have an "end goal", getting across the creek and swinging | |
| ! on rope and/or putting the egg in the nest. Technically that may mean it | |
| ! doesn't fit the rules. See comments about "puzzles" above PrintTaskName. | |
| ! Nothing startling or unusual in this code, but I plan to share it later. | |
| ! Mainly for Inform newbies, although the code is chunky and not elegant. | |
| ! Kathleen Green turned up errors with MaxZip, regardless of the fact this | |
| ! had been thoroughly beta tested. Version 1.01, changed if (noun == second) | |
| ! rfalse, to if ((second ~= 0) && (noun == second)) rfalse. Version 1.02 | |
| ! replaced add_to_scope knee hand 0 0, with add_to_scope knee hand scab | |
| ! splinter and added attribute hurt to determine if player now had scab | |
| ! or splinter (previously used if (player.&add_to_scope-->2 == 0)). | |
| ! Version 1.03, found array task_scores was one too short because I had | |
| ! added a task at the last minute, so added another one. Version 1.05 added | |
| ! this note, cleaned up some code and recompiled. Also found Achieved(5), | |
| ! put board in creek was not scored. Version 1.07 tried to fix another | |
| ! MaxZip error with the up direction on the west bank (not sure it did). | |
| !---------------------------------------------------------------------------- | |
| ! Globals | |
| !---------------------------------------------------------------------------- | |
| switches s; | |
| !Constant DEBUG; | |
| Constant Story "^Visualizing^"; | |
| Constant Headline "Copyright 1999 by The Tame Computer, Marnie Parker, | |
| all rights reserved^Version 1.70 / "; | |
| Replace TieSub; | |
| Replace WakeSub; | |
| Constant TASKS_PROVIDED; ! Check off the "activities". | |
| Constant NUMBER_TASKS = 13; | |
| Constant MAX_SCORE = 12; | |
| Constant AMUSING_PROVIDED; | |
| Array task_scores -> 1 1 1 1 1 1 1 1 1 1 1 1 1 1; | |
| Attribute flown; ! player tried to fly (first time) | |
| Attribute crushed; ! jars and/or nest | |
| Attribute splattered; ! rocks splattered with muck | |
| Attribute smeared; ! anything egg is thrown at | |
| Attribute hurt; ! knee scabbed or hand has splinter | |
| Attribute infected; ! picked scab too many times (hand) | |
| ! or hurt nest too many times (player) | |
| Attribute lump; ! hand gets lump from hitting board | |
| Attribute muddy; ! hand is muddy (player has put mud on it) | |
| ! also for inside shed timer (inside_shed) | |
| Attribute touched; ! player touched/tried touching something | |
| ! picked up rocks (first time, rock1 & rock2), | |
| ! picked off scab (knee), scratched rash (first time | |
| ! without mud on it, hand), touched bush again after | |
| ! it is known to be poison oak (first time, bush), | |
| ! hugged tree (first time, player), pushed tree | |
| ! while on rope (for speeding up message, elm) | |
| ! tried to tie a knot in the rope (rope), thrown | |
| ! egg at broken jars (jars) | |
| Attribute braved; ! player tried something brave | |
| ! pissed in creek (player), tried taking knee or hand | |
| ! (knee/hand), tried eating rock (rock1 & rock2), tried | |
| ! jumping across creek (creek), carried board down slope | |
| ! (by_shed), examined jars closely and recognized contents | |
| ! (jars), tried to tie another knot in rope (rope), | |
| ! inside shed timer (inside_shed) | |
| ! eating worm (ditty, first time, worm) | |
| ! pissing in shed (first time) | |
| Attribute foundordone;! puzzle/object found or done | |
| ! pissed again after hugging tree (player), gone up | |
| ! slope (first time, east_creek), knee skinned (knee), | |
| ! rash erupted (hand, timer), rock2 found (rock2), eyes | |
| ! adjusted in shed (first time, inside_shed), seen jars | |
| ! (last time, jars), crossed creek (west_creek) | |
| ! Note: I usually use the general attribute usually to indicate if a daemon or | |
| ! timer is still running. I also put these notes in for myself to | |
| ! double check my use of attributes. Actually, I got lost. :-) I probably | |
| ! could have trimmed off some, but some objects needed 3-4 attributes. | |
| ! general: tried to open eyes (player), picked up one rock (rock1 & rock2), | |
| ! scab has formed (timer, knee), itch timer is running (hand), | |
| ! listened or smelled before prompted to do so (east_creek), | |
| ! tried to go west first time (without board in creek, creek), gone | |
| ! down slope without board (first time, by_shed), recognized poison | |
| ! oak (first time, bush), eyes still unadjusted in shed (inside_shed), | |
| ! seen jars (first time, jars), hit board while it is in the water | |
| ! (first time, board), examined outside of shed (first time, shed), | |
| ! picked up egg (egg), smashed_egg timer has expired (smashed_egg), | |
| ! rope daemon is running (rope) | |
| Property state 0; | |
| Replace NotifyOnSub; | |
| Replace NotifyOffSub; | |
| Replace DrawStatusLine; | |
| #include "parser"; | |
| #include "outofrh2.h"; ! altered for dropping egg from rope | |
| ! Note: Delete verbs and verbsubs if share code (so won't compile). | |
| !---------------------------------------------------------------------------- | |
| ! Control Routines | |
| !---------------------------------------------------------------------------- | |
| ! Change score reporting to things to do. | |
| Object LibraryMessages "lm" | |
| with before | |
| [ i j; Miscellany: | |
| if (lm_n == 4) | |
| { print " You open your eyes "; | |
| rtrue; | |
| } | |
| ! This section of code comes from Ken Fair (kjfair@midway.uchicago.edu). | |
| ! Posted to raif -- Subject: Re: [Inform] "I don't know the word 'vocabulary'." | |
| ! Date: Sun, Nov 23, 1997 23:51 EST -- in response to a query on how to make | |
| ! Inform behave more like the old Infocom games. Replaces the default Inform | |
| ! library response "You can't see any such thing." Thanks, Ken! | |
| ! Note: Does not handle parsed names. Will create a warning upon compile. | |
| if (lm_n == 30) | |
| { wn = 1; | |
| while (i = NextWordStopped()) | |
| if (i == -1) | |
| { if ((location == inside_shed) && | |
| (inside_shed hasnt foundordone)) | |
| "You are still too blinded to see."; | |
| "You can't see that here."; | |
| } | |
| i = (wn * 4) - 4; | |
| print "[I don't know the word ~"; | |
| for (j = 0 : j < parse->i : j++) { | |
| print (char) buffer->(parse->(i+1) + j); | |
| } | |
| ".~]"; | |
| } | |
| if (lm_n == 39) | |
| { if (lm_o has pluralname) | |
| "They're not important in and of themselves."; | |
| "That's not important in and of itself."; | |
| } | |
| Examine: if (lm_n == 2) | |
| { if (lm_o == u_obj or d_obj) | |
| { print "You see nothing special about "; | |
| if (lm_o == u_obj) | |
| { if (location == inside_shed) "the ceiling."; | |
| "the sky."; | |
| } | |
| if (lm_o == d_obj) | |
| { if (location == inside_shed) "the floor."; | |
| "the ground."; | |
| } | |
| } | |
| } | |
| Score: if (deadflag) | |
| print "You found "; | |
| else | |
| print "So far you have found "; | |
| print score; | |
| if (score == 1) print " activity"; else print " activities"; | |
| print " of a possible ", MAX_SCORE, | |
| ", in ", turns, " turn"; | |
| if (turns>1) print "s"; | |
| return; | |
| FullScore: if (lm_n == 1) | |
| { if (deadflag) print "The activity list was "; | |
| else print "The activity list is "; | |
| "made up as follows:^"; | |
| } | |
| ]; | |
| ! Don't show score on status line. | |
| [ DrawStatusLine width; | |
| @split_window 1; @set_window 1; | |
| @set_cursor 1 1; style reverse; | |
| width = 0->33; | |
| if (width == 0) width = 80; | |
| spaces (width-1); | |
| @set_cursor 1 2; | |
| print (name) location; | |
| @set_cursor 1 1; style roman; @set_window 0; | |
| ]; | |
| ! Not included: barfing, pissing, scratching something other than rash, | |
| ! flying, eating rock/board/bush, holding nose, breaking | |
| ! all jars and/or breaking some and pissing in shed, taking | |
| ! flowers into shed, throw rocks at egg and vice-a-versa | |
| ! The above are optional experiences. Actually most are except for 4-10. | |
| ! Added holding nose and breaking all jars, pissing in shed, flowers and | |
| ! throwing egg at rocks or rocks at egg and getting large rock gooey. | |
| ! Decided to leave these actions unmentioned by scored tasks AND amusing after. | |
| ! Is taking the board and putting it across the creek a puzzle? Maybe. Except | |
| ! it is EASY and not puzzling. However, the player has to do it to "finish". | |
| ! Is putting the mud on the rash a puzzle? Maybe, it stops the itch. Except it | |
| ! is optional, doesn't resolve something that is an obstacle to proceeding and | |
| ! doesn't provide another object for another puzzle. Also after the first itch | |
| ! if the player doesn't scratch it won't itch again. I.E. Scratching makes | |
| ! it itch more (like a real case of poison oak, hehehe). | |
| ! Is taking flowers into shed, when you can't get into it anymore because | |
| ! you have broken all the jars, a puzzle? Yes, definitely. But choosing | |
| ! to break ALL the jars is optional and wanting to recover the large | |
| ! rock from the shed once it stinks so much the player can't stay, is also | |
| ! optional. Still, had to have a way for the player to get in. Since it is | |
| ! optional and not mentioned by scored tasks (thinking of omitting breaking all | |
| ! jars from amusing as well), it is really a branch the player can find or not. | |
| ! Note that the player can get the same score whether they rescue the egg | |
| ! (put it in the nest and leave it unharmed) and/or destroy it. Of course, if | |
| ! they rescue it and then hug the tree, Gaia is pleased. | |
| ! Exhibit ends when: player persists in trying to cross the sunken board, | |
| ! jumps off the swing to the bank (when the board is sunken), jumps off the | |
| ! swing into the water, hugs tree when unsmashed egg is in the nest or when | |
| ! timer expires. | |
| [ PrintTaskName achievement; | |
| switch(achievement) | |
| { 0: "thrown the small rock at shed and/or tree and/or skipped it on the creek"; | |
| 1: "thrown the large rock at shed and/or tree and/or tossed it in the creek"; | |
| 2: "managed to climb up the slope"; | |
| 3: "snatched the board"; | |
| 4: "got the board down the slope"; | |
| 5: "put the board across the creek"; | |
| 6: "crossed to other side of the creek"; | |
| 7: "swung in the swing and/or jumped from the swing"; | |
| 8: "shattered the bottles with the large rock and/or crushed/rescued the egg"; | |
| 9: "picked scab and/or scratched rash"; | |
| 10: "hugged the tree, eaten mud and/or got splinter in and/or lump on hand"; | |
| 11: "listened and/or smelled (before AND after tape prompted either)"; | |
| 12: "a bonus - * environmentalist gold star for not picking the wild flowers"; | |
| } | |
| ]; | |
| [ PrintRank; "."; ]; | |
| [ Amusing; | |
| print "Did you try...^ | |
| floating?^ | |
| eating a rock?^ | |
| tasting the board or shed?^ | |
| fishing for the large rock after throwing it in the creek?^ | |
| picking the scab repeatedly?^ | |
| scratching a body part other than your hand?^ | |
| taking your hand and/or knee?^ | |
| eating mud repeatedly?^ | |
| eating the worm?^ | |
| eating the egg?^ | |
| peeling the egg?^ | |
| peeling some other things?^ | |
| throwing the egg at the tree, shed or jars?^ | |
| putting the large rock in the nest?^ | |
| hugging the tree after some polluting/home wrecking action?^ | |
| hugging the tree again after another polluting/home wrecking action?^"; | |
| ]; | |
| [ ChooseObjects obj code; | |
| if (code<2) { if (obj has scenery) return 2; rfalse; } | |
| if ((action_to_be==##ThrowAt or ##Insert or ##PutOn or ##Examine or | |
| ##SmellThing or ##Touch or ##Eat or ##Taste or ##Peel or ##Rub) && | |
| (obj in player)) | |
| return 3; | |
| if (action_to_be==##Fish && obj in creek) return 3; | |
| if (obj hasnt scenery) return 2; | |
| return 1; | |
| ]; | |
| #include "verblib"; | |
| !---------------------------------------------------------------------------- | |
| ! Customized Grammar | |
| !---------------------------------------------------------------------------- | |
| #include "grammar"; | |
| Verb meta 'help' 'hints' 'hint' 'about' 'information' 'info' 'instructions' | |
| 'instruct' | |
| * -> Help; | |
| ! Real Actions | |
| Extend 'get' first | |
| * 'down' -> Exit; | |
| Extend 'eat' replace | |
| * noun -> Eat; | |
| Extend 'swim' replace | |
| * -> NoSwim | |
| * 'in' noun -> NoSwim; | |
| Extend 'peel' replace | |
| * noun -> Peel | |
| * 'off' noun -> Take; | |
| Extend 'smell' replace | |
| * -> Smell | |
| * noun -> SmellThing; | |
| Extend 'put' last | |
| * multiexcept 'across'/'over' noun -> PutOn | |
| * 'head'/'face' 'in'/'into'/'under' 'water'/'creek'/'stream'/'river' | |
| -> UnderWater; | |
| Extend only 'throw' replace | |
| * held 'at'/'against'/'on'/'onto'/'in'/'into' noun | |
| -> ThrowAt; | |
| Extend 'push' last | |
| * 'off' noun -> Push; | |
| Extend 'cross' last | |
| * noun 'with' noun -> Bridge; | |
| Verb 'crush' = 'attack'; | |
| Verb 'wade' = 'swim'; | |
| Verb 'lick' = 'taste'; | |
| Verb 'kick' | |
| * noun ->Kick; | |
| Verb 'grab' | |
| * noun -> Grab; | |
| Verb 'untie' | |
| * noun -> Untie | |
| * noun 'from' noun -> Untie; | |
| Verb 'bridge' 'span' | |
| * noun 'with' noun -> Bridge; | |
| Verb 'fish' | |
| * -> Fish | |
| * 'for' noun -> Fish; | |
| Verb 'splash' 'paddle' 'wash' | |
| * -> Paddle | |
| * noun -> Paddle | |
| * noun 'in' noun -> Paddle; | |
| Verb 'skim' | |
| * held -> SkipOn | |
| * held 'on'/'over'/'across' noun -> SkipOn; | |
| Extend only 'skip' replace | |
| * -> Jump | |
| * held -> SkipOn | |
| * held 'on'/'over'/'across' noun -> SkipOn; | |
| Extend 'pick' last | |
| * noun -> PickIt | |
| * 'nose' -> PickIt | |
| * 'off' noun -> PickIt; | |
| Extend 'jump' last | |
| * 'on'/'onto' noun -> Enter; | |
| ! "Fake" actions for wiseass players | |
| Extend 'open' last | |
| * 'eyes' -> Wake | |
| * 'your' 'eyes' -> Wake | |
| * 'my' 'eyes' -> Wake; | |
| Extend 'take' last | |
| * 'leak' -> Piss | |
| * 'leak' 'in' 'creek' -> Piss | |
| * 'leak' 'in' 'water' -> Piss | |
| * 'nose' -> HoldNose; | |
| Extend 'go' last | |
| * 'to' 'bathroom' -> Piss; | |
| Extend 'throw' last | |
| * 'up' -> Vomit | |
| * 'up' 'cookies'/'lunch'/'dinner'/'breakfast' | |
| -> Vomit; | |
| Verb 'fly' 'soar' 'float' | |
| * -> Fly; | |
| Verb 'pinch' | |
| * 'nose' -> HoldNose | |
| * 'nose' 'closed' -> HoldNose; | |
| Verb 'barf' 'vomit' 'heave' 'toss' | |
| * -> Vomit | |
| * 'up' -> Vomit | |
| * 'cookies' -> Vomit | |
| * 'your' 'cookies' -> Vomit; | |
| Verb 'piss' 'urinate' 'pass' 'pee' | |
| * -> Piss | |
| * 'water' -> Piss | |
| * 'in' 'creek' -> Piss | |
| * 'in' 'water' -> Piss | |
| * 'water' 'in' 'creek' -> Piss | |
| * 'water' 'in' 'water' -> Piss; | |
| Verb 'scratch' | |
| * -> Scratch | |
| * 'crotch'/'scrotum'/'penis'/'ass'/'rear'/'butt'/'bottom' | |
| -> NaughtyS | |
| * 'clitoris'/'vagina'/'thatch'/'pussy'/'fanny' | |
| -> NaughtyS | |
| * 'balls'/'boobs'/'buttocks' -> NaughtyP | |
| * 'jock' 'itch' -> NaughtyS | |
| * 'head'/'face'/'nose'/'neck'/'arm'/'leg'/'foot' | |
| -> NaughtyS | |
| * 'arms'/'legs'/'feet' -> NaughtyP | |
| * noun -> Scratch; | |
| ! A real one sneaked in here. | |
| !---------------------------------------------------------------------------- | |
| ! Meta Routines | |
| !---------------------------------------------------------------------------- | |
| [ HelpSub; | |
| print "This is a scenery example. I created the IF Art Show for several reasons: | |
| to explore interactivity (IF's 3-dimensionality), to help people look at IF | |
| differently, to encourage creativity without the burden of too much structure, | |
| to provide a way for IF authors get their ~feet wet~ without having to write a | |
| ~game~ and because it is the sort of ~contest~ I would like to enter.^^ | |
| ~Visualizing~ is based on ~real~ life and is simple since its sole purpose is | |
| to explore, to be experiential. However, technically it is a complex, | |
| probably more than a newbie could write. This is to illustrate that an entry | |
| doesn't HAVE to be simple to stay within the rules. There is a definite ending, | |
| four locations and five takeable objects, but those are really only important for | |
| interacting with the scenery. Daemons/timers are also used for special effects.^^"; | |
| print "This example also deliberately raises questions about ~What is a plot and | |
| what is a puzzle?~ There are directive comments, but those are covered by the | |
| rules as hints to the player. There are things to do, but none are really | |
| puzzling or help solve scored tasks or help the player ~win~. ~Visual~ | |
| also flirts with an ~end game~. I hope this makes clear that although the IF | |
| Art Show rules are firm, they are also flexible enough to allow some leeway.^^ | |
| The score is a ~task done~ type, a list of activities. You can finish without | |
| doing them all. Enter full or fullscore to see which activities you have found.^^"; | |
| "Thank you to beta testers: Stuart Barrow, Keith A. Marrocco, David Myers, | |
| Doug Sojourner and Zimriel for their help with including more synonyms, finding | |
| bugs and improving overall play. Also to Adam J. Thornton, for his outrageous | |
| suggestions, beta testing and editing. If you have comments/reactions/bug | |
| reports/arguments about how this example ~broke the rules~/etc., please email:\ | |
| ^^ Marnie Parker doeadeer3@@64aol.com"; | |
| ]; | |
| ! Make sure score notification can't be turned back on. | |
| [ NotifyOnSub; "For score enter score."; ]; | |
| [ NotifyOffSub; "For score enter score."; ]; | |
| ! The "ending". | |
| [ Satisfied i; | |
| if (wild hasnt touched) Achieved(12); | |
| print "You have that same sore and exhausted but happy feeling you had as a | |
| child after a good day of exploring. You have:^^"; | |
| for (i=0:i<NUMBER_TASKS:i++) | |
| if (task_done->i==1) | |
| { print " "; | |
| PrintTaskName(i); | |
| } | |
| if ((egg in nest) && (task_done->12~=0)) | |
| { print " "; | |
| print "(So it was a lie. Conservation isn't always JUST its own reward.)^"; | |
| } | |
| print "^It almost feels like you were really there. You're satisfied."; | |
| deadflag = 2; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Verb Routines | |
| !---------------------------------------------------------------------------- | |
| ! Real Verbs | |
| [ SmellThingSub; <<Smell>>; ]; | |
| [ GrabSub; <<Take noun>>; ]; | |
| [ PeelSub; <<Take noun>>; ]; | |
| [ TieSub; | |
| print_ret (CTheyreOrThats) noun, " not something you can tie."; | |
| ]; | |
| [ UntieSub; | |
| print_ret (CTheyreOrThats) noun, " not something you can untie."; | |
| ]; | |
| [ KickSub; <<Attack noun>>; ]; | |
| [ PickItSub; | |
| if (noun == 0) "Sheesh. There is a lot of realism in this exhibit, but not THAT much. Gross."; | |
| print_ret (CTheyreOrThats) noun, " not something you can pick."; | |
| ]; | |
| [ PaddleSub; | |
| if (noun ~= 0) | |
| { if ((noun ~= hand or knee or player) && (noun notin player)) | |
| print_ret "You aren't holding ", (the) noun, "."; | |
| if (noun == knee) "Huh?"; | |
| if (noun == wild) | |
| { if (wild.time_left < 10) "Water won't revive them."; | |
| "Water won't do them any good."; | |
| } | |
| if (noun == board) "The board is too unwieldy to paddle in the water."; | |
| } | |
| if ((second ~= 0) && (second ~= creek)) "Huh?"; | |
| if (second == 0) second = creek; | |
| if (RunRoutines(second,before)~=0) rtrue; | |
| <<Touch creek>>; | |
| ]; | |
| [ NoSwimSub; | |
| if ((second ~= 0) && (second ~= creek)) "Huh?"; | |
| if (location == inside_shed) "But you can't see the creek here."; | |
| if (location == by_shed) return Std_Msgs(2, creek); | |
| print "Ugh. The creek is too dirty and shallow to be an appealing swimming hole"; | |
| if (player has braved) ". (Especially after you peed in it, for pete's sake!)"; | |
| "."; | |
| ]; | |
| [ FishSub; | |
| if (noun == 0) "But you don't have a fishing pole."; | |
| if (noun notin creek) print_ret "But ", (the) noun, " isn't in the water."; | |
| ]; | |
| [ SkipOnSub; | |
| if ((second ~= 0) && (second ~= creek)) | |
| "Unlikely (even for a visualization exercise)."; | |
| if (noun == board) "The board is too heavy to skip."; | |
| if (second == 0) second = creek; | |
| if (RunRoutines(second,before)~=0) rtrue; | |
| <<ThrowAt noun creek>>; | |
| ]; | |
| [ UnderWaterSub; | |
| <<LookUnder creek>>; | |
| ]; | |
| [ BridgeSub; | |
| if (noun ~= creek) "Huh?"; | |
| <<Insert second noun>>; | |
| ]; | |
| ! "Fake" Verbs | |
| [ WakeSub; | |
| if (player hasnt general) | |
| { give player general; | |
| "You don't want to! Not when you feel you are finally getting somewhere | |
| with this visualization stuff."; | |
| } | |
| "No."; | |
| ]; | |
| [ HoldNoseSub; | |
| if (location ~= by_shed or inside_shed) | |
| "That's cute. You do that often?"; | |
| "You hold your nose, but it doesn't seem to really help, so you stop."; | |
| ]; | |
| [ PissSub; | |
| if (location == by_shed) | |
| "But you can't reach the creek from here."; | |
| if (location == inside_shed) | |
| { if (inside_shed hasnt braved) | |
| { give inside_shed braved; | |
| "Crude, but fortunately for you, Gaia doesn't care about what happens indoors. | |
| However, that really made the stink much, much worse. (Done.)"; | |
| } | |
| "Really, once was quite enough! (Not done.)"; | |
| } | |
| if (player in rope) | |
| "You'll have to get off the rope first."; | |
| if (player hasnt braved) | |
| { give player braved; | |
| "Boy, some people! Show them water out of doors and they have one-track minds. | |
| Polluting this sweet piece of IF! If that isn't a compelling enough argument, | |
| remember, all creeks and rivers are in trouble. Get in touch with Gaia! (Done.)"; | |
| } | |
| if (player has touched) | |
| { if (player hasnt foundordone) | |
| { give player foundordone; | |
| "Gaia has revoked her pardon and notified her enforcers, the TERMITES. Your home | |
| should make a nice little snack before the tornado/earthquake/flood hits. (Done.)"; | |
| } | |
| if (player has infected) | |
| "Tempting fate? Gaia is already as pissed off as she can be. (Not done.)"; | |
| "Seen any termites yet? Hmmm, isn't that a faint crunching sound in the background? (Done.)"; | |
| } | |
| "Maybe a sign, ~Polluters Will Be Fined Until They Bleed~, should be posted. You definitely | |
| haven't gotten in touch with Gaia. (Not done.)"; | |
| ]; | |
| [ VomitSub; | |
| "There is such a thing as carrying realism in visualization too far. | |
| That's too far."; | |
| ]; | |
| [ FlySub; | |
| if (player hasnt flown) | |
| { give player flown; | |
| if (player in rope) | |
| print "Hey neat! You lift off the rope and drift gently upward, feet dangling. But | |
| when you are only a few feet up you fall back, barely managing to grab the | |
| rope again, avoiding a nasty crash landing. "; | |
| else | |
| print "Hey neat! Your lift off the ground and you drift gently upward, feet dangling. | |
| But when you are only a few feet up you fall back with a jarring crash. "; | |
| "You just remembered you are trying to be realistic, not fantastic. How deflating."; | |
| } | |
| "Sorry, you haven't earned enough frequent flyer miles. Or wings."; | |
| ]; | |
| [ NaughtySSub; | |
| "That doesn't itch. (No, it doesn't!)"; | |
| ]; | |
| [ NaughtyPSub; | |
| "They don't itch. (No, they don't!)"; | |
| ]; | |
| [ ScratchSub; | |
| "But nothing itches."; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Special Routines | |
| !---------------------------------------------------------------------------- | |
| ! I tend to make my own Library Messages for each "game". So I'm lazy. Saves | |
| ! on code and saves me trying to think up something different to say each time. | |
| [ Std_Msgs n x usebut; | |
| switch(n) | |
| { 1 : "Played this before, eh?"; | |
| 2 : if (x ~= 0) print_ret (The) x, " is too far away."; | |
| "It is too far away."; | |
| 3 : "You can just brush the nest with your finger tips."; | |
| 4 : if (usebut) print "But your "; | |
| else print "Your "; | |
| "fingers are already gripping the small rock."; | |
| 5 : "The large rock already fills your palm."; | |
| 6 : if (usebut) print "But balancing "; | |
| else print "Balancing "; | |
| "the board is taking both of your hands."; | |
| 7 : if (usebut) print "But you "; | |
| else print "You "; | |
| "are already gently cradling the egg."; | |
| 8 : "You are swinging too far away from the tree trunk to reach it."; | |
| 9 : "Sure, and get a splinter in your tongue. Do you lick frozen flag poles too?"; | |
| 10 : "The board has thoroughly sunk into the mud and dark water. You can't see it."; | |
| 11 : print_ret (The) x, " don't really make a good missile."; | |
| 12 : "You can only kick something freestanding."; | |
| 13 : "You can't kick that high."; | |
| 14 : "Er, the laws of physics? You can't throw something at itself."; | |
| } | |
| ]; | |
| [ Dalmer obj; | |
| if (obj == knee) | |
| print "The knee bone is connected to the thigh bone and the thigh | |
| bone is connected to the... "; | |
| else | |
| print "The hand bone is connected to the arm bone and the arm | |
| bone is connected to the... "; | |
| if (obj hasnt braved) | |
| { give obj braved; | |
| if (((obj == knee) && (hand has braved)) || | |
| ((obj == hand) && (knee has braved))) | |
| "it also seems to be a part of you."; | |
| "it seems to be part of you."; | |
| } | |
| "aren't you getting tired of this song?"; | |
| ]; | |
| [ SmashEgg loc; | |
| Achieved(8); | |
| remove egg; | |
| move smashed_egg to loc; | |
| StartTimer(smashed_egg, 15); | |
| ]; | |
| [ AttachSmear obj loc; | |
| Achieved(8); | |
| give obj smeared; | |
| remove egg; | |
| move smashed_egg to loc; | |
| StartTimer(smashed_egg, 15); | |
| move smear to loc; | |
| smear.number = obj; | |
| ]; | |
| [ DettachSmear obj; | |
| give obj ~smeared; | |
| if (obj has touched) | |
| give obj ~touched; | |
| smear.number = 0; | |
| remove smear; | |
| ]; | |
| [ WashOffMud inc; | |
| give hand ~muddy; | |
| hand.number = 6; | |
| if (hand has general) | |
| StopTimer(hand); | |
| StartTimer(hand, hand.number); | |
| if (inc) print ". Unfortunately, that also "; | |
| else print ". That "; | |
| "washed off the mud soothing your itch."; | |
| ]; | |
| [ SeeBoard; | |
| if ((location == inside_shed) && (board has concealed)) | |
| { if (jars has foundordone) | |
| print "^But not before you notice... "; | |
| else print "^"; | |
| "The bottom shelf is empty. It is really just a long wooden board."; | |
| } | |
| if ((location == east_creek or west_creek) && (board in creek) && | |
| (board.number < 3)) | |
| print ". Spanning the creek is a board"; | |
| ]; | |
| [ SeeSmashed; | |
| if (jars has crushed) | |
| print " Several of the jars are broken, their vile contents spilling out."; | |
| ]; | |
| [ SeeJarSmear; | |
| if (jars has smeared) | |
| { if (jars has touched) | |
| print " On one jar is a gooey, yellow smear."; | |
| else | |
| print " Artistically and abstractly dribbled in the yucky, watery, muck is a | |
| gooey, yellow trail of egg."; | |
| } | |
| ]; | |
| [ GetSplinter obj usepush; | |
| if (hand hasnt hurt) | |
| { Achieved(10); | |
| give hand hurt; | |
| if (usepush) | |
| print "You push, rubbing your hand up and down the rough "; | |
| else print "You rub your hand up and down the rough "; | |
| if (obj == shed) print "boards."; | |
| else print "board."; | |
| if (usepush) | |
| print " The shed is stronger than it looks, the boards only give a little."; | |
| " You get a splinter. Smarts."; | |
| } | |
| "Children may be inconsiderate of their own health and used to minor injuries, | |
| but you should really know better. Unless, of course, you play graphic games."; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Classes (Only one except for InsideOrOn from outofrch.h) | |
| !---------------------------------------------------------------------------- | |
| Class Rock | |
| with name "rock" "stone" "pebble" "gravel" "rocks" "stones", | |
| state 0, | |
| description | |
| [; if (self hasnt moved) | |
| { print "It's a rock"; | |
| if (self has smeared) ". On it is a gooey, yellow smear."; | |
| "."; | |
| } | |
| if (self == rock1) "The small rock is a little larger than a backgammon piece."; | |
| print "The large rock is about the size of a baseball"; | |
| if (self has smeared) ". On it is a gooey, yellow smear."; | |
| "."; | |
| ], | |
| before | |
| [; Take : if ((self == rock2) && (rock1 in player)) | |
| return Std_Msgs(4); | |
| if ((self == rock1) && (rock2 in player)) | |
| return Std_Msgs(5); | |
| if (board in player) | |
| return Std_Msgs(6); | |
| if (egg in player) | |
| return Std_Msgs(7); | |
| if (self hasnt general) | |
| { give rock1 general; | |
| give rock2 general; | |
| if (~~(voice.sound_prompt)) voice.number = 3; | |
| print "As you pick it up, the rock is warm in your hand. "; | |
| } | |
| if (self hasnt touched) | |
| { give self touched; | |
| if (self == rock1) | |
| print "A finger traces one edge that is slightly sharp, but otherwise you can feel it is smooth and flat. "; | |
| else | |
| { print "Your fingers curl around it's oblong smoothness"; | |
| if (self has smeared) print ", but draw back slightly from the gooiness"; | |
| print ". It fits snugly in your palm. "; | |
| } | |
| } | |
| if (self has splattered) | |
| { give self ~splattered; | |
| print "You fastidiously (and almost compulsively) wipe the splattered "; | |
| if (self has smeared) | |
| { DettachSmear(self); | |
| print "and smeared "; | |
| } | |
| print "rock off on the ground, before picking up it up. "; | |
| } | |
| Eat, Taste : if (self notin player) | |
| print_ret "You need to be holding the ", | |
| (name) self, " before you can eat it."; | |
| if (self has braved) | |
| "Real players don't eat rocks."; | |
| give rock1 braved; | |
| give rock2 braved; | |
| if (self.state == 1) | |
| { self.state = 0; | |
| print "But you can't really imagine eating a rock either, "; | |
| } else print "You can't really imagine eating a rock, "; | |
| "so as you raise it to your lips it morphs into rock candy. Hesitant to strain | |
| the tenuous reality of your visualization, you stop. The candy instantly morphs | |
| back to rock."; | |
| ThrownAt : if (self has concealed) print_ret "You can't see ", (the) self, "."; | |
| if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| if (noun == egg) | |
| { if (self == rock2) | |
| { AttachSmear(rock2, location); | |
| "The egg hits the large rock dead-center, leaving a gooey, yellow smear. The | |
| rest oozes off it to the ground."; | |
| } | |
| else | |
| { SmashEgg(location); | |
| "The egg completely misses the small rock, but the shell breaks open | |
| when it crashes on the ground. Junk oozes out."; | |
| } | |
| } else move noun to location; | |
| if (noun == board) | |
| { print "The board "; | |
| if (voice.sound_prompt) print "thuds on"; | |
| else print "hits"; | |
| " the ground."; | |
| } | |
| "The rocks make a banging sound as they hit each other."; | |
| Attack : if (self has concealed) print_ret "You can't see ", (the) self, "."; | |
| "Ouch!"; | |
| Kick : if (self has concealed) print_ret "You can't see ", (the) self, "."; | |
| if (self in player) return Std_Msgs(12); | |
| if (self == rock1) | |
| { print "You kick the small rock"; | |
| if (location == by_shed) | |
| { print ", "; | |
| move self to east_creek; | |
| if (voice.sound_prompt) print "with a clatter "; | |
| "it disappears down the slope."; | |
| } | |
| if (location == inside_shed) | |
| { if (voice.sound_prompt) | |
| ". It lightly taps a shed wall."; | |
| ". It hits a shed wall lightly."; | |
| } | |
| if (location == east_creek) move self to west_creek; | |
| else move self to east_creek; | |
| print ". It sails completely over the creek, "; | |
| if (voice.sound_prompt) print "clattering when it lands "; | |
| else print "landing "; | |
| "on the other side."; | |
| } | |
| print "You kick the large rock. "; | |
| if (location == by_shed) | |
| { move self to east_creek; | |
| if (voice.sound_prompt) print "It bangs"; | |
| else print "It rolls"; | |
| " down the slope."; | |
| } | |
| if (location == inside_shed) | |
| { if (voice.sound_prompt) | |
| "It thuds into a shed wall. Boards rattle."; | |
| "It hits a shed wall. Boards shake."; | |
| } | |
| move rock2 to creek; | |
| give rock2 concealed; | |
| if (location == east_creek) rock2.number = west_creek; | |
| else rock2.number = east_creek; | |
| print "It starts to sail over the water, but falls short, plunging below the surface near the "; | |
| if (location == east_creek) print "western"; else print "eastern"; | |
| print " bank"; | |
| if (voice.sound_prompt) print " with a loud splash. "; | |
| else print ". "; | |
| "Ripples swirl outward from the spot."; | |
| Peel : if (self hasnt braved) | |
| { self.state = 1; | |
| print "You can't imagine trying to peel a rock, so you try to imagine eating it instead. "; | |
| <<Eat self>>; | |
| } | |
| "Where's the rock tumbler?"; | |
| Touch : if (self notin player) print_ret "You can feel ", (the) self, " better if you hold it."; | |
| if (self==rock1) print_ret (The) self, " is flat with one slightly sharp edge."; | |
| if (self has smeared) | |
| print_ret (The) self, " is smooth and oblong, but the smear is gooey."; | |
| print_ret (The) self, " is smooth and oblong."; | |
| Rub : if (((self hasnt smeared) && (self hasnt splattered)) && | |
| (self notin player)) <<Touch self>>; | |
| if ((self has smeared) || (self has splattered)) | |
| { if (player in rope) "You'll have to get off the rope first."; | |
| print "You lean over and rub ", (the) self, " back and forth on the ground, wiping off the "; | |
| if (self has splattered) | |
| { give self ~splattered; | |
| print "splatters"; | |
| if (self has smeared) print " and "; | |
| } | |
| if (self has smeared) | |
| { DettachSmear(self); | |
| print "smear"; | |
| } | |
| "."; | |
| } | |
| print_ret (The) self, " feels very solid."; | |
| SmellThing : if (~~(voice.smell_prompt)) <<Smell>>; | |
| if (east_creek has general) Achieved(11); | |
| if ((self has splattered) && (self has smeared) && (smashed_egg has general)) | |
| "You take a whiff and wish you hadn't. Rancid vinegar with dashes of sulfur, | |
| up close and personal."; | |
| if (self has splattered) | |
| "You take a whiff and wish you hadn't. Rancid vinegar, up close and personal."; | |
| if (self has smeared) <<SmellThing Smear>>; | |
| "It is a strange fact of life that rocks don't have much odor, normally."; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Start | |
| !---------------------------------------------------------------------------- | |
| [ Initialise; | |
| print "^^^You are determined to improve your visualization skills. You popped your | |
| newly bought cassette in the recorder, lit some incense, stretched out | |
| on the couch, closed your eyes and followed the muscle relaxation steps.^^ | |
| The tape instructed you to visualize a favorite spot, maybe a | |
| place you played as a child. Slow hypnotic music plays in the background | |
| as occasionally more instructions are uttered over it by a soothing voice.^^ | |
| At first you concentrate too hard and stare intently at the red of your | |
| eyelids. Then, slowly, slowly, you relax and find yourself...^"; | |
| notify_mode = false; ! Turn off score notification. | |
| player = newselfobj; | |
| location = east_creek; | |
| StartTimer(wakeup_call, 180); | |
| StartDaemon(voice); | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Player Changed to INTERACT with the Scenery. | |
| !---------------------------------------------------------------------------- | |
| Object newselfobj "(self object)" | |
| has concealed animate proper transparent | |
| with short_name | |
| [; return L__M(##Miscellany, 18); | |
| ], | |
| description | |
| [; if (~~(voice.depth_prompt)) | |
| "You don't seem to be able to visualize a clear picture of yourself."; | |
| "You are still cloudy to yourself, but you seem to be child-size."; | |
| ], | |
| before NULL, after NULL, life NULL, each_turn NULL, | |
| time_out NULL, describe NULL, | |
| capacity 100, parse_name 0, | |
| orders 0, number 0, | |
| add_to_scope knee hand scab splinter; | |
| Object knee "your knee" | |
| has concealed proper | |
| with name "knee" "my", article "your", | |
| description | |
| [; if (self hasnt foundordone) | |
| "Dimpled."; | |
| if (self has hurt) | |
| { if (scab has infected) | |
| "Your knee has a big angry red scab tinged with black. Yep, it's infected."; | |
| "Yep, it's a BIG scab."; | |
| } | |
| if (self has touched) | |
| "Since you couldn't keep your hands to yourself, naturally your knee is bleeding."; | |
| "Your knee is well and truly skinned. It will make an impressive scab."; | |
| ], | |
| number 0, | |
| before | |
| [; PickIt : if (self hasnt foundordone) | |
| return Std_Msgs(1); | |
| if (self hasnt hurt) | |
| "Too soon. The scab hasn't formed yet."; | |
| if (scab has infected) | |
| "Looking at the infected scab you decide that annoying standard library response, | |
| ~Keep your hands to yourself!~, may have a point after all. So you don't pick."; | |
| give self ~hurt; | |
| if (self hasnt touched) | |
| { give self touched; | |
| Achieved(9); | |
| } | |
| StartTimer(self, 6); | |
| self.number++; | |
| if (self.number == 2) | |
| "You keep this up and it's going to get inflected! You pick off the scab."; | |
| if (self.number == 3) | |
| { give scab infected; | |
| "You pick off the scab one more time. Your knee is bleeding again."; | |
| } | |
| "You pick off the scab. That was smart! Now it's bleeding again."; | |
| Take, Remove, Pull : Dalmer(self); rtrue; | |
| Scratch : <<PickIt self>>; | |
| Attack : "Ouch!"; | |
| ], | |
| time_left 0, | |
| time_out [; give self hurt; ]; | |
| ! Stuck with one hand, because player could be right or left handed. | |
| Object hand "your hand" | |
| has concealed proper | |
| with name "hand" "hands" "palm" "rash" "red" "my", article "your", | |
| parse_name | |
| [ i j k l; | |
| if (self has lump) j='lump'; else j=-1; | |
| if (self has foundordone) k='red'; else k=-1; | |
| if (self has foundordone) l='rash'; else l=-1; | |
| while (NextWord()==j or k or l or 'my' or 'hand' or 'hands' or 'palm') i++; | |
| return i; | |
| ], | |
| description | |
| [; if ((self hasnt foundordone) && (self hasnt hurt) && | |
| (self hasnt lump)) | |
| "Five-fingered."; | |
| if (self has foundordone) | |
| print "Your hand has a red rash"; | |
| if (self has muddy) | |
| print " partially covered with mud"; | |
| if (self has hurt) | |
| { if (self hasnt foundordone) | |
| print "A "; | |
| else | |
| { if (self hasnt lump) print " and a "; | |
| else print ", a "; | |
| } | |
| print "splinter is embedded in your palm"; | |
| } | |
| if (self has lump) | |
| { if ((self hasnt foundordone) && (self hasnt hurt)) | |
| print "Along the edge of your palm is a lump"; | |
| else print " and along the side is a lump"; | |
| } | |
| "."; | |
| ], | |
| number 10, | |
| before ! Don't scratch it won't itch again. Scratch it itches again sooner. | |
| [; Scratch : if (self hasnt foundordone) | |
| return Std_Msgs(1); | |
| if (self has muddy) | |
| self.number = 6; | |
| else if (self.number > 2) | |
| self.number = self.number - 2; | |
| if (self hasnt general) | |
| { give self general; | |
| StartTimer(self, self.number); | |
| } else | |
| { StopTimer(self); | |
| StartTimer(self, self.number); | |
| } | |
| if (self hasnt touched) | |
| { give self touched; | |
| Achieved(9); | |
| "You rake your fingernails over the rash. Ahhhh. That feels GOOD."; | |
| } | |
| if (self has muddy) | |
| { give self ~muddy; | |
| "Ahhhh. Nothing like an itch that has been scratched! Unfortunately you just scrapped off all the mud too."; | |
| } | |
| "Ahhhh. But scratching seems to make it itch even more."; | |
| Take, Remove, Pull : Dalmer(self); rtrue; | |
| Attack : "Ouch!"; | |
| ], | |
| time_left 0, | |
| time_out | |
| [; give self ~general; | |
| if (self hasnt foundordone) | |
| { give self foundordone; | |
| if (~~(voice.physical_prompt)) | |
| { voice.number = 5; | |
| voice.daemon(); | |
| } else print "^"; | |
| "Suddenly, one of your hands itches."; | |
| } | |
| "^Your hand throbs, itching fiercely."; | |
| ]; | |
| Object scab "scab" | |
| has concealed | |
| with name "scab", | |
| before | |
| [; Examine : <<Examine knee>>; | |
| Take, Remove, Pull, | |
| Scratch, PickIt : <<PickIt knee>>; | |
| ]; | |
| Object splinter "splinter", | |
| has concealed | |
| with name "splinter", | |
| before | |
| [; Examine : <<Examine hand>>; | |
| Take, Remove, Pull : if (hand hasnt hurt) <<Take hand>>; | |
| "You won't get that splinter out without tweezers and you left your personal grooming | |
| kit in the bathroom."; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! The Visualization Tape | |
| !---------------------------------------------------------------------------- | |
| Object voice "voice" | |
| with number 0, | |
| depth_prompt false, ! What it prompts the player to visualize. | |
| touch_prompt false, ! 90% of this daemon is NOT run automatically. | |
| smell_prompt false, ! Doesn't need to be part of the object tree, | |
| sound_prompt false, ! talking will show up anyway. | |
| physical_prompt false, | |
| daemon | |
| [; if (self.number == 0) self.number++; | |
| if ((self.number == 1) && (~~(voice.depth_prompt))) | |
| { if (wild hasnt foundordone) | |
| { give wild foundordone; | |
| move wild to east_creek; | |
| } | |
| self.depth_prompt = true; | |
| print "^The mellifluous voice oozes, ~Give your visualization depth. Then move around and | |
| explore it. But don't float as if dreaming, be as realistic as you can.~^"; | |
| } | |
| if ((self.number == 2) && (~~(self.touch_prompt))) | |
| { self.touch_prompt = true; | |
| print "^The voice gently urges, ~Visualization is not just about seeing pretty pictures. | |
| Add shape and texture to your images. Then reach out and touch them.~^"; | |
| } | |
| if ((self.number == 3) && (~~(self.sound_prompt))) | |
| { self.sound_prompt = true; | |
| print "^The voice whispers, ~Involve all your senses, add sound to your experience~.^"; | |
| } | |
| if ((self.number == 4) && (~~(self.smell_prompt))) | |
| { self.smell_prompt = true; | |
| print "^The voice coos, ~Add scents as well. Odors can be very evocative, recalling | |
| memories. Many people reexperience past emotions.~^"; | |
| } | |
| if ((self.number == 5) && (~~(self.physical_prompt))) | |
| { self.physical_prompt = true; | |
| print "^The soothing voice says, ~Add physical sensations to give your images a | |
| sense of immediacy. Involve your whole body in the experience.~^^"; | |
| } | |
| ]; | |
| Object wakeup_call | |
| with time_left 0, | |
| time_out | |
| [; print "^Suddenly, real life intrudes harshly. The phone rings.^^"; | |
| Satisfied(); rtrue; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! The Scenery | |
| !---------------------------------------------------------------------------- | |
| Object east_creek "By The Creek" | |
| has light | |
| with name "east_creek", | |
| number 0, | |
| state 0, | |
| description ! Changes depending on what the player is prompted to "visualize". | |
| [; if (voice.physical_prompt) | |
| { if ((voice.smell_prompt) && (voice.sound_prompt) && (voice.touch_prompt)) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with shifting bright and dark circles as the leaves | |
| rustle in the musty breeze blowing off the water. The cooled air brushes against | |
| your skin, providing some relief from the oppressive heat. Across the creek to | |
| the west, in the deeper shadows pooling directly under the trees, you can also | |
| make out the tantalizing outline of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old wooden shed beckons."; | |
| } | |
| if ((voice.sound_prompt) && (voice.touch_prompt)) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with shifting bright and dark circles as the leaves | |
| rustle in the breeze blowing off the water. The cooled air brushes against your | |
| skin, providing some relief from the oppressive heat. Across the creek to | |
| the west, in the deeper shadows pooling directly under the trees, you can also | |
| make out the tantalizing outline of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old wooden shed beckons."; | |
| } | |
| if ((voice.smell_prompt) && (voice.touch_prompt)) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with bright and dark circles. A musty, cool breeze | |
| blows off the water and brushes against your skin, providing some relief from | |
| the oppressive heat. Across the creek to the west, in the deeper shadows | |
| pooling directly under the trees, you can also make out the tantalizing outline | |
| of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old wooden shed beckons."; | |
| } | |
| if ((voice.smell_prompt) && (voice.sound_prompt)) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of the full-grown oaks that arch protectively over it, dappling water and ground | |
| with shifting bright and dark circles as the leaves rustle in the musty breeze | |
| blowing off the water. The cooled air brushes against your skin, providing some | |
| relief from the oppressive heat. Across the creek to the west, in the deeper | |
| shadows pooling directly under the trees, you can also make out the tantalizing | |
| outline of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| if (voice.smell_prompt) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of the full-grown oaks that arch protectively over it, dappling water and ground | |
| with bright and dark circles. A musty, cool breeze blows off the water and | |
| brushes against your skin, providing some relief from the oppressive heat. | |
| Across the creek to the west, in the deeper shadows pooling directly under the | |
| trees, you can also make out the tantalizing outline of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| if (voice.sound_prompt) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of the full-grown oaks that arch protectively over it, dappling water and ground | |
| with shifting bright and dark circles as the leaves rustle in the breeze blowing | |
| off the water. The cooled air brushes against your skin, providing some relief | |
| from the oppressive heat. Across the creek to the west, in the deeper shadows | |
| pooling directly under the trees, you can also make out the tantalizing outline | |
| of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| if (voice.touch_prompt) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with bright and dark circles. A cool breeze blows off | |
| the water and brushes against your skin, providing some relief from the | |
| oppressive heat. Across the creek to the west, in the deeper shadows pooling | |
| directly under the trees, you can also make out the tantalizing outline of a | |
| hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old wooden shed beckons."; | |
| } | |
| print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of the full-grown oaks that arch protectively over it, dappling the water and | |
| ground with bright and dark circles. A cool breeze blows off the water and | |
| brushes against your skin, providing some relief from the oppressive heat. | |
| Across the creek to the west, in the deeper shadows pooling directly under the | |
| trees, you can also make out the tantalizing outline of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of steep slope, a rickety old shed beckons."; | |
| } | |
| ! No physical --------------------------------- | |
| if ((voice.smell_prompt) && (voice.touch_prompt)) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with bright and dark circles. A musty breeze wafts | |
| off the water. Across the creek to the west, in the deeper shadows pooling | |
| directly under the trees, you can also make out the tantalizing outline of a | |
| hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old shed beckons."; | |
| } | |
| if ((voice.sound_prompt) && (voice.touch_prompt)) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with shifting bright and dark circles as the leaves | |
| rustle in the breeze. Across the creek to the west, in the deeper shadows | |
| pooling directly under the trees, you can also make out the tantalizing outline | |
| of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old wooden shed beckons."; | |
| } | |
| if ((voice.sound_prompt) && (voice.smell_prompt)) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of full-grown oaks that arch protectively over it, dappling water and ground | |
| with shifting bright and dark circles as their leaves rustle in the musty breeze | |
| blowing off the water. Across the creek to the west, in the deeper shadows | |
| pooling directly under the trees, you can also make out the tantalizing outline | |
| of hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| if (voice.smell_prompt) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of full-grown oaks that arch protectively over it, dappling water and ground | |
| with bright and dark circles. A musty breeze wafts off the water. Across the | |
| creek to the west, in the deeper shadows pooling directly under the trees, you | |
| can also make out the tantalizing outline of hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| if (voice.sound_prompt) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of full-grown oaks that arch protectively over it, dappling water and ground | |
| with shifting bright and dark circles as their leaves rustle in the breeze. | |
| Across the creek to the west, in the deeper shadows pooling directly under | |
| the trees, you can also make out the tantalizing outline of hanging knotted | |
| rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| if (voice.touch_prompt) | |
| { print "You are in the open by a creek. Full-grown oaks arch over it, thrusting out | |
| their gnarled branches like sheltering arms, trying to offer protection from | |
| the relentless summer sun. Shafts of light pierce their shading canopies, | |
| dappling water and ground with bright and dark circles. Across the creek to | |
| the west, in the deeper shadows pooling directly under the trees, you can also | |
| make out the tantalizing outline of a hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep rocky slope, a rickety old wooden shed beckons."; | |
| } | |
| if (voice.depth_prompt) | |
| { print "You are in the open by a creek. Shafts of sunlight pierce the shading canopies | |
| of the full-grown oaks that arch protectively over it, dappling the water and | |
| ground with bright and dark circles. Across the creek to the west, in the | |
| deeper shadows pooling directly under the trees, you can also make out the | |
| tantalizing outline of hanging knotted rope"; | |
| SeeBoard(); | |
| ". Northwest, at the top of a steep slope, a rickety old shed beckons."; | |
| } | |
| "You are by the creek where you used to play as a child. You haven't thought | |
| about it for years! Shafts of sunlight slant through the full-grown oak trees | |
| that arch over it. You can't see much more because the landscape seems hazy."; | |
| ], | |
| before | |
| [; Look : self.state++; | |
| if ((self.state > 1) && (~~(voice.depth_prompt))) | |
| { voice.number = 1; | |
| voice.daemon(); | |
| } | |
| Listen : if (voice.sound_prompt) | |
| { if (self has general) Achieved(11); | |
| "An occasional distinctive bird call accompanies the leaves' rustle. The same one | |
| you used to hear summers as a child. Hearing it now, it seems to chirp, ~Summer~."; | |
| } | |
| give self general; | |
| "You can faintly hear some innocuous ~elevator~ type music in the background."; | |
| Smell : if (voice.smell_prompt) | |
| { if (self has general) Achieved(11); | |
| "The dankness of the creek almost overwhelms the sun-baked scent of a summer day."; | |
| } | |
| give self general; | |
| "Maybe the incense was a mistake. It does smell like the out of doors, but its | |
| pungent fragrance is attention-grabbing, making it hard to imagine other odors."; | |
| Jump : <<JumpOver creek>>; | |
| ], | |
| nw_to | |
| [; if (voice.depth_prompt) | |
| { self.number++; | |
| if (self.number == 1) | |
| { if (rock2 hasnt foundordone) | |
| { give rock2 foundordone; | |
| move rock2 to self; | |
| } | |
| move rock1 to self; | |
| if (~~(voice.touch_prompt)) voice.number = 2; | |
| print "The slope seems much bigger than you remember or you are much smaller. You | |
| try, but keep sliding back down. Some gravel rolls back down with you"; | |
| if ((voice.sound_prompt) && (rock2 in self)) | |
| ", making a scraping sound as rock hits rock."; | |
| "."; | |
| } | |
| if (self.number == 2) | |
| { move bush to self; | |
| "The slant seems to be more of a ~coming down~ than a ~going up~ slope. Looking | |
| around for another approach, you spot a bush growing by it, about 1/2 way up."; | |
| } | |
| if (self.number >= 3) | |
| { if ((hand has foundordone) && (bush hasnt touched)) | |
| { give bush touched; | |
| print "You hesitate to touch the bush again. But then you realize you | |
| have already exposed yourself and have no other way to get up the slope. "; | |
| } | |
| print "You grab the bush. By tugging on it and pushing with your feet, you | |
| manage to scramble up the slope.^"; | |
| if (self hasnt foundordone) | |
| { Achieved(2); | |
| voice.number = 4; | |
| voice.daemon(); | |
| give self foundordone; | |
| give hand general; | |
| StartTimer(hand, 12); | |
| } | |
| give shed ~concealed; | |
| return by_shed; | |
| } | |
| } | |
| ], | |
| u_to | |
| [; if ((rope has general) && (rope.number == 1 or 3)) | |
| <<Take rope>>; | |
| <<Go nw_obj>>; | |
| ], | |
| w_to | |
| [; if (voice.depth_prompt) | |
| { if (board notin creek) | |
| { if (creek hasnt general) | |
| { give creek general; | |
| if (~~(voice.physical_prompt)) | |
| { voice.number = 5; | |
| voice.daemon(); | |
| } | |
| move mud to self; | |
| print "As you start west, the mud squishes beneath your feet"; | |
| if (rock2 hasnt foundordone) | |
| { give rock2 foundordone; | |
| move rock2 to self; | |
| if (~~(voice.touch_prompt)) voice.number = 2; | |
| print " until you lightly stub one toe on a rock and stop. "; | |
| } else print ". "; | |
| if (voice.sound_prompt) | |
| print "The wet clay slurps as you pull your foot out. "; | |
| if (voice.sound_prompt) print "It "; | |
| else print "The wet clay "; | |
| "is as gummy as glue. If you go any further you would probably get stuck."; | |
| } | |
| "There is no purchase on the wet clay. It is too slushy to support your weight."; | |
| } | |
| if (west_creek hasnt foundordone) | |
| { give west_creek foundordone; | |
| Achieved(6); | |
| } | |
| board.number++; | |
| if (board.number >= 5) | |
| { print "The board can no longer be crossed. Do you want to finish? (Y or N) > "; | |
| if (YesOrNo()) | |
| { print "^"; Satisfied(); rtrue; } | |
| print "^"; | |
| } | |
| if (board.number >= 4) return Std_Msgs(10); | |
| print "As you scurry across the board, it sinks a little more into the mud and water.^"; | |
| return west_creek; | |
| } | |
| ], | |
| cant_go | |
| [; if (~~(voice.depth_prompt)) "There doesn't seem to be anywhere to go."; | |
| "You can only go west and northwest."; | |
| ]; | |
| Object wild "wild flowers" | |
| with name "wild" "flowers" "flower" "pretty" "tiny" "delicate" "pink" "stems" | |
| "stalks" "stalk" "petals" "petal" "weeds" "wilted" "faded" "long" "fragrant" | |
| "weed-like" "clump" "bunch" "of", | |
| article | |
| [; if (self has touched) print "bunch of"; | |
| else print "clump of"; | |
| rtrue; | |
| ], | |
| short_name | |
| [; if (self has general) print "weeds"; | |
| else print "wild flowers"; | |
| rtrue; | |
| ], | |
| initial "A clump of wild flowers is growing here.", | |
| description | |
| [; if (self has general) | |
| "The long stalks now look just like weeds. The flowers are gone, long-time | |
| passing. The petals have completely wilted or dropped off."; | |
| if (self hasnt touched) | |
| "You admire the tiny, pink flowers. Like most wild flowers, they are delicate | |
| (won't last long once picked) and their long stalks look almost like weeds."; | |
| switch(self.time_left) | |
| { 12, 11, 10 : "The wild flowers are very pretty."; | |
| 9, 8, 7 : "The wild flowers are already beginning to wilt."; | |
| 6, 5, 4 : "The wild flowers are wilting fast."; | |
| 3, 2, 1 : "The wild flowers are now almost completely wilted."; | |
| } | |
| ], | |
| parse_name | |
| [ i j k l m; | |
| if (self has general) | |
| { while (NextWord()=='weeds' or 'long' or 'weed-like' or 'stems' or 'stem' or | |
| 'stalks' or 'stalk' or 'clump' or 'bunch' or 'of') i++; | |
| return i; | |
| } | |
| else | |
| { if (self.time_left <= 10) j='wilted'; else j=-1; | |
| if (self.time_left <= 10) k='wilting'; else k=-1; | |
| if (self.time_left <= 10) l='faded'; else l=-1; | |
| if (self.time_left <= 10) m='fading'; else m=-1; | |
| while (NextWord()==j or k or l or 'wild' or 'flowers' or 'flower' or 'petals' or 'petal' or 'fragrant' or | |
| 'pretty' or 'delicate' or 'tiny' or 'pink' or 'long' or 'weed-like' or 'stems' or 'stem' | |
| or 'stalks' or 'stalk' or 'clump' or 'bunch' or 'of') i++; | |
| return i; | |
| } | |
| ], | |
| before | |
| [; PickIt : if (self has touched) | |
| print_ret "You already picked ", (the) self, "."; | |
| <<Take self>>; | |
| Take : if (board in player) return Std_Msgs(6); | |
| Attack, | |
| ThrownAt : if ((action==##ThrownAt) && ((second ~= 0) && (noun == second))) return Std_Msgs(14); | |
| if (self hasnt general) "Ahhhh, the flowers are much too sweet to harm."; | |
| print_ret (The) self, " is rather bedraggled already."; | |
| Kick : if (self in player) return Std_Msgs(12); | |
| <<Attack self>>; | |
| Touch : if (self hasnt moved) "They are so delicate you hesitate to touch them."; | |
| "Soft."; | |
| Peel : if (self hasnt moved) | |
| "They love me, they love me not... you'll have to pick the wild flowers first."; | |
| if (self hasnt general) | |
| "The petals are really too small to pick off individually."; | |
| "Into health food, huh? Where's the blender?"; | |
| SmellThing : if (~~(voice.smell_prompt)) <<Smell>>; | |
| if (east_creek has general) Achieved(11); | |
| if (self has general) | |
| "The weeds have no fragrance to speak of."; | |
| if (self hasnt touched) | |
| "You sniff the wild flowers. Ahhhh, sweet perfume."; | |
| switch(self.time_left) | |
| { 12, 11, 10 : "The wild flowers' perfume is very sweet. Ahhhh."; | |
| 9, 8, 7 : "The wild flowers' sweet fragrance is already beginning to fade."; | |
| 6, 5, 4 : "The wild flowers' sweet fragrance is fading fast."; | |
| 3, 2, 1 : "The wild flowers barely have any fragrance left now."; | |
| } | |
| Eat, Taste : if (self notin player) | |
| print_ret "You need to be holding the ", | |
| (name) self, " before you can eat it."; | |
| if (self has braved) | |
| "Double your pleasure, double your fun... Nyah, you don't want to try the | |
| bitter stalks twice."; | |
| give self braved; | |
| if (self has general) | |
| "You nibble on a stalk. Unfortunately, it is quite bitter."; | |
| "You nibble on a stalk. The wild flowers may be very pretty, their perfume | |
| sweet, but the stalks are quite bitter."; | |
| ], | |
| after | |
| [; Take : if (self hasnt touched) | |
| { give self touched; | |
| StartTimer(self, 12); | |
| print "You pick the wild flowers, as you may, knowing full-well they won't | |
| the day"; | |
| if ((rock1 in player) || (rock2 in player) || (egg in player)) | |
| ", and switch them to your unoccupied hand."; | |
| "."; | |
| } | |
| print "Taken"; | |
| if ((rock1 in player) || (rock2 in player) || (egg in player)) | |
| ". You switch the wild flowers to your unoccupied hand."; | |
| "."; | |
| ], | |
| time_left 0, | |
| time_out | |
| [; give self general; ]; | |
| Object west_creek "Other Side of Creek" | |
| has light | |
| with name "west_creek", | |
| description | |
| [; print "Here, in the shade of the trees, it is darker and refreshingly cooler. The | |
| muddy ground is trampled down under the rope. East, across the creek, you can | |
| see a rickety old shed perched on top a rocky rise"; | |
| SeeBoard(); | |
| "."; | |
| ], | |
| before | |
| [; Listen : east_creek.before(); rtrue; | |
| Smell : east_creek.before(); rtrue; | |
| Jump : if (player notin rope) | |
| <<JumpOver Creek>>; | |
| if (rope.number == 1) | |
| { Achieved(7); | |
| print "You let out a Tarzan-type yell as you leap off the rope. Air rushes pass you | |
| as you fly thrillingly across the creek. Squatting as you land, you settle | |
| unharmed on the other side. Great jump!^^"; | |
| if (board.number >= 3) Satisfied(); | |
| else PlayerTo(east_creek); | |
| rtrue; | |
| } | |
| if (rope.number == 3) | |
| { Achieved(7); | |
| print "You let out a Tarzan-type yell as you leap off the rope. But stop mid-yodel as | |
| you realize you are right over the water! Air rushes past you as you plummet | |
| down toward the dark, slimy water...^^"; | |
| Satisfied(); rtrue; | |
| } | |
| <<Exit rope>>; | |
| Go : if (noun==u_obj) | |
| { if (player in rope) <<Climb rope>>; | |
| <<Enter rope>>; | |
| } | |
| if ((noun==d_obj) && (player in rope)) <<Exit rope>>; | |
| ], | |
| e_to | |
| [; if (board in creek) | |
| { board.number++; | |
| if (board.number >= 5) | |
| { print "The board can no longer be crossed. Do you want to finish? (Y or N) > "; | |
| if (YesOrNo()) | |
| { print "^"; Satisfied(); rtrue; } | |
| print "^"; | |
| } | |
| if (board.number >= 4) return Std_Msgs(10); | |
| print "The board sinks a little more as you rush across it.^"; | |
| return east_creek; | |
| } | |
| <<JumpOver creek>>; | |
| ], | |
| cant_go "You can only go east."; | |
| Object -> elm "elm" | |
| has animate neuter supporter static | |
| with name "tree" "branch" "bough" "limb" "elm" "large" "mighty" "might" "leaves" "leaf" "bark" "trunk" "fork", | |
| initial | |
| [; print "Near the creek is a mighty elm. Hanging from one branch is a knotted rope"; | |
| if (nest in location) | |
| { print " and up in a fork of the tree is a "; | |
| if (nest has crushed) print "sagging "; | |
| print "nest"; | |
| } | |
| if (self has smeared) print ". Marring the trunk is a gooey, yellow smear"; | |
| "."; | |
| ], | |
| description | |
| [; print "The large elm is mighty impressive"; | |
| if (self has smeared) print ", except for the gooey, yellow smear on the trunk"; | |
| if (nest in location) print ". Up in the fork of the tree is a nest"; | |
| "."; | |
| ], | |
| before | |
| [; Search : <<Examine self>>; | |
| Take : "That's fixed in place."; | |
| Climb : "The lowest branches are way over your head."; | |
| Push, Touch : if (player in rope) | |
| { if (rope.number == 2 or 4) <<Swing rope>>; | |
| else | |
| { if (rope.number == 1 or 3) return Std_Msgs(8); | |
| return Std_Msgs(2, self); | |
| } | |
| } | |
| if (action==##Touch) <<Kiss self>>; | |
| <<Attack self>>; | |
| ThrownAt : if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| if (noun == egg) | |
| { AttachSmear(self, west_creek); | |
| "The egg hits the trunk, leaving a gooey yellow smear, then it oozes to the ground."; | |
| } | |
| move noun to location; | |
| if (noun == rock1) | |
| { Achieved(0); | |
| "The little rock bounces off the tree trunk, barely making a sound."; | |
| } | |
| if (noun == rock2) | |
| { Achieved(1); | |
| "The large rock hits the tree trunk with a loud thud and falls to the ground. The leaves rustle."; | |
| } | |
| ], | |
| life | |
| [; Attack, | |
| Kiss : if (action==##Attack) | |
| "There are easier ways to piss off Gaia."; | |
| if (player in rope) | |
| "You'll have to get off the rope first."; | |
| Achieved(10); | |
| print "Ah, how sweet, a tree-hugger. You're getting in touch with Gaia"; | |
| if (egg in nest) | |
| { print ". "; | |
| if ((player has braved) && (player hasnt touched)) | |
| print "Okay, she is willing to forgive and forget your previous transgression. | |
| In fact, Gaia is rather pleased with you. Good going.^^"; | |
| if (player has foundordone) | |
| print "Suspicious, not quite sure whether to trust you, Gaia graciously relents a little anyway.^^"; | |
| print "You suddenly notice the sunshine has never seemed so bright, the bird calls | |
| never so cheerful. You breathe deeply, filled with a sense of peace and joy.^^"; | |
| Satisfied(); rtrue; | |
| } | |
| if ((player has braved) || ((player has crushed) || (player has infected))) | |
| { if ((player hasnt touched) && (player hasnt infected)) | |
| { give player touched; | |
| print ". Okay, she is willing to forgive and forget your previous transgression"; | |
| if ((player has braved) && (player has crushed)) | |
| "s."; | |
| "."; | |
| } | |
| if ((player has foundordone) || (player has infected)) | |
| { if (player hasnt touched) give player touched; | |
| ". But you might as well forget it, she isn't buying your obviously phony kissing up anymore."; | |
| } | |
| ". But you're really pushing it, she has forgiven you once already. What do you | |
| want? A gold star?"; | |
| } | |
| "!"; | |
| Ask, Answer, Tell, Give, Show : "The elm appears to be the strong silent type. It doesn't respond."; | |
| ]; | |
| Object -> nest "nest" | |
| has concealed container open | |
| with name "nest" "twigs" "flattened" "sagging", | |
| description | |
| [; print "It is an ordinary nest, made up of twigs"; | |
| if (self has crushed) ", except it is rather sadly flattened."; | |
| "."; | |
| ], | |
| parse_name | |
| [ i j k; if (self has crushed) j='flattened'; else j=-1; | |
| if (self has crushed) k='sagging'; else k=-1; | |
| while (NextWord()==j or k or 'nest' or 'twigs') i++; | |
| return i; | |
| ], | |
| before | |
| [; if ((action~=##Examine or ##Search or ##ThrownAt or ##Kick) && (player notin rope)) | |
| "The nest is perched just a few feet too high to reach."; | |
| Search : "It is too high to see inside."; | |
| Take, Remove, | |
| Touch, Attack, | |
| Kick : if ((action==##Kick) && (player notin rope)) | |
| return Std_Msgs(13); | |
| if (rope.number == 1 or 3) return Std_Msgs(8); | |
| if (rope.number ~= 2 or 4) return Std_Msgs(2, self); | |
| if (action==##Kick) return Std_Msgs(13); | |
| return Std_Msgs(3); | |
| Receive : if (rope.number == 1 or 3) return Std_Msgs(8); | |
| if (rope.number ~= 2 or 4) return Std_Msgs(2, self); | |
| if (noun == wild) | |
| { move noun to west_creek; | |
| print_ret "You fling ", (the) noun, " at the nest, but they are too light. They | |
| miss, falling to the ground."; | |
| } | |
| if (self has crushed) | |
| { if (noun == egg) AttachSmear(elm, west_creek); | |
| else move noun to location; | |
| print "The flattened nest is sagging too much to hold ", (the) noun, ". "; | |
| if (noun == egg) | |
| print_ret "It falls out, smashes on the tree trunk, then oozes to the ground."; | |
| print_ret "It falls out, bounces off the tree trunk and hits the ground."; | |
| } | |
| if (noun == hand) return Std_Msgs(3); | |
| LetGo : if (rope.number == 1 or 3) return Std_Msgs(8); | |
| if (rope.number ~= 2 or 4) return Std_Msgs(2, self); | |
| ThrownAt : if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| if (noun == egg or rock1) | |
| { if ((player in rope) && (rope.number == 2 or 4)) | |
| <<Insert noun self>>; | |
| if (noun == egg) AttachSmear(elm, west_creek); | |
| else move noun to location; | |
| if (player notin rope) | |
| print "You jump up as you overhandedly lob ", (the) noun, " at the nest. But the nest | |
| is too small to make a good ~basket~. ", (The) noun, " misses, "; | |
| else print "You lob ", (the) noun, " at the nest. It misses, "; | |
| if (noun == egg) "smashes on the tree trunk, then oozes to the ground."; | |
| "hits the tree trunk, then bounces to the ground."; | |
| } | |
| if (noun == rock2) | |
| { if (egg in nest) | |
| { Achieved(8); | |
| remove egg; | |
| } | |
| remove rock2; | |
| remove self; | |
| give player infected; | |
| "You hurl the large rock. It knocks the nest backwards out of the tree as it | |
| sails through the fork. Both disappear forever into the foliage along with your | |
| environmental chances. Hmmm, how does drought and famine followed by hordes of | |
| locusts, sound? Or discovering you've been living next to an old, unmapped toxic | |
| waste dump? Don't worry, Gaia will decide soon enough how to get revenge."; | |
| } | |
| ], | |
| after | |
| [; Receive : if (noun == egg) | |
| { Achieved(8); | |
| "You carefully toss the egg into the nest. Ah, a true Gaia lover! Remember:^^ | |
| *** Conservation is its own reward. ***"; | |
| } | |
| if (noun == rock1) | |
| "You gently flip the small rock into it. Apparently the nest remains unhurt."; | |
| if (noun == rock2) | |
| { give self crushed; | |
| give player crushed; | |
| if (egg in nest) SmashEgg(nest); | |
| print "You fling the large rock into the nest. You hear a crunching sound and the nest | |
| sags dejectedly. Coincidentally (or not), at the same time, thunder rumbles | |
| angrily in the distance. Congratulations, you just crushed "; | |
| if (smashed_egg in nest) | |
| print "the eggs in the nest, including the one you rescued! "; | |
| else | |
| print "the rest of the eggs in the nest! "; | |
| "Not much of a conservationist, are you? Get in touch with Gaia!"; | |
| } | |
| ]; | |
| Object -> egg "little blue egg" | |
| with name "egg" "little" "egg" "fragile" "cute" "defenseless", | |
| number 0, | |
| description "The little blue egg looks cute, fragile and defenseless.", | |
| before | |
| [; Take : if (rock1 in player) return Std_Msgs(4); | |
| if (rock2 in player) return Std_Msgs(5); | |
| Peel : if (self notin player) | |
| print_ret "You aren't holding ", (the) self, "."; | |
| SmashEgg(location); | |
| "Nature's eggs don't come hard boiled. Stupidly trying to peel a raw egg, | |
| you poke a finger into the shell. Junk oozes out and it slips out of your hand."; | |
| SmellThing : Achieved(11); | |
| "Since the shell is intact, no odor escapes."; | |
| Eat, Taste : self.number++; | |
| if (self.number == 1) | |
| "You haven't learned how to swallow eggs whole yet. (Not in this visualization | |
| revisiting your childhood, anyway). Later in college you might. Along with | |
| other useful World Record feats. Such as: how many students can cram into a | |
| telephone booth and how long you can go without studying without flunking."; | |
| "Aha, a true egg sucker! Have fun."; | |
| ThrownAt : if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| move noun to location; | |
| if (noun == rock2) AttachSmear(noun, location); | |
| else SmashEgg(location); | |
| if (noun == rock1) | |
| print_ret (The) noun, " just misses the egg, but the shell breaks open as ", | |
| (the) noun, "'s sharp edge gives it a glancing blow in passing."; | |
| print_ret (The) noun, " hits the egg dead-center, then rolls aside. The shell crunches open and junk runs out."; | |
| Attack, | |
| Kick : if ((action==##Kick) && (self in player)) return Std_Msgs(12); | |
| if (action==##Attack) | |
| { if (self in player) | |
| { if (player in rope) print "You throw down the egg. It "; | |
| else print "You drop the egg and step on it. It "; | |
| } | |
| else print "You step on the egg. It "; | |
| } else print "The egg "; | |
| SmashEgg(location); | |
| "crunches, breaking open. Junk runs out."; | |
| ], | |
| after | |
| [; Take : if (self hasnt general) | |
| { give self general; | |
| if (~~(voice.sound_prompt)) voice.number = 3; | |
| print "From the heft of the egg, you can tell it is still viable, not old and hollow. "; | |
| } | |
| ]; | |
| Object by_shed "By the Shed" | |
| has light | |
| with name "by_shed", | |
| description "You are standing in the sultry warmth of the full sun. Southeast from this | |
| bare rocky shelf, a steep slope heads downhill to the creek. Something smells.", | |
| before | |
| [; Smell : if (east_creek has general) Achieved(11); | |
| print "A nose-crinkling odor is coming from the shed"; | |
| if (inside_shed hasnt visited) ". It is vaguely familiar."; | |
| "."; | |
| Listen : if (~~(voice.sound_prompt)){ east_creek.before(); rtrue; } | |
| if (east_creek has general) Achieved(11); | |
| "You can hear a few distinctive bird calls now and then."; | |
| ], | |
| se_to | |
| [; give shed concealed; | |
| if ((board notin player) && (self hasnt general)) | |
| { give self general; | |
| print "^You skid down the slope on your feet, then near the end fall on your rear"; | |
| if (voice.sound_prompt) print " with a whomp."; | |
| else print "."; | |
| print " Breath knocked out of you, you slide the rest of the way on your bottom.^"; | |
| } | |
| if (board in player) | |
| { if (self hasnt braved) | |
| { give self braved; | |
| Achieved(4); | |
| move board to east_creek; | |
| give knee foundordone; | |
| StartTimer(knee, 6); | |
| if (~~(voice.physical_prompt)) | |
| { voice.number = 5; | |
| voice.daemon(); | |
| } else print "^"; | |
| print "You start to skid down on your feet, but the board is too unwieldy to maintain your | |
| balance. Near the end you trip, drop it, fall forward and skin a knee. Stings.^"; | |
| } else | |
| "You've learned the get-overbalanced-and-fall lesson in physics already. The hard way."; | |
| } | |
| give shed concealed; | |
| return east_creek; | |
| ], | |
| in_to | |
| [; if (wild in player) | |
| { if (wild has general) | |
| { print "^You hold the weeds to your nose and sniff them, but they have | |
| no helping fragrance. You plow forward into the powerful stench"; | |
| if ((jars has crushed) || (inside_shed has braved)) | |
| print ", unprotected.^"; | |
| else print ", anyway.^"; | |
| } | |
| else | |
| { print "^You hold the wild flowers to your nose and sniffing them, plow forward. Their | |
| sweet fragrance partially masks the awful stench, making it"; | |
| if (jars.number > 5) | |
| print " almost bearable.^"; | |
| else print " more durable.^"; | |
| } | |
| } | |
| else | |
| print "^The stench is so strong it practically feels like a physical force pushing | |
| you back, but you duck your head and plow forward.^"; | |
| give shed concealed; | |
| return inside_shed; | |
| ], | |
| d_to | |
| [; <<Go se_obj>>; ]; | |
| Object inside_shed "Inside the Shed" | |
| has light | |
| with description | |
| [; if (self hasnt general) | |
| { give self general; | |
| "Your eyes haven't adjusted to the change from the bright sunlight to the dark. | |
| Blinded, you still have the unpleasant sensation you are being watched."; | |
| } | |
| if (self hasnt foundordone) | |
| { give self foundordone; | |
| move shelves to self; | |
| move jars to self; | |
| move motes to self; | |
| move sunlight to self; | |
| } | |
| print "The floor is dirt. Dust motes swirl in the slender fingers of sunlight poking | |
| through the slats. The spectral illumination dimly reveals a close interior"; | |
| if ((shed has smeared) && (smear in self)) print ". On the boards is a gooey, yellow smear"; | |
| "."; | |
| ], | |
| number 0, | |
| state 0, | |
| before | |
| [; if ((action~=##Look or ##Exit or ##Go or ##Smell or ##Listen or ##Drop or ##Vomit or | |
| ##HoldNose) && | |
| (self hasnt foundordone)) | |
| "You are still too blinded to see."; | |
| Smell : if (east_creek has general) Achieved(11); | |
| if (jars has braved) | |
| print "The piercing odor of rancid vinegar "; | |
| else print "The piercing odor "; | |
| if (self has braved) | |
| print "(mixed with the nauseating scent of urine"; | |
| if ((smear in location) || | |
| ((smear.number == rock2) && ((rock2 in location) || (rock2 in player)) | |
| && (smashed_egg has general))) | |
| print " and sulfur) "; | |
| else if (self has braved) print ") "; | |
| "is almost overwhelming and revolting enough to make you want to barf."; | |
| Listen : if (~~(voice.sound_prompt)){ east_creek.before(); rtrue; } | |
| if (east_creek has general) Achieved(11); | |
| if (jars has general) | |
| "You almost expect to hear froggie ribbits, but, thankfully, you don't."; | |
| "You can hear leaves rustling and an occasional bird chirp outside."; | |
| ], | |
| each_turn ! Want player to find board fairly easily, so it's not a puzzle. | |
| [; self.number++; | |
| if ((self.number > 3) && (jars has general) && (jars hasnt braved) && | |
| ((action~=##Examine) || ((action==##Examine) && (noun~=jars)))) | |
| { print "^"; | |
| <<Examine jars>>; | |
| } | |
| ! holding flowers, if flowers still have scent minus 1 turn | |
| if ((jars has crushed) || (self has braved)) | |
| { if (jars.number > 5) | |
| { if ((self.state < 2) && (self hasnt muddy)) | |
| { self.state = 2; | |
| give self muddy; | |
| } | |
| } | |
| else if ((jars has crushed) && (self has braved)) | |
| { if ((self.state < 1) && (self hasnt muddy)) | |
| { self.state = 1; | |
| give self muddy; | |
| } | |
| } | |
| if ((wild in player) && (wild hasnt general) && (self hasnt touched)) | |
| { if (self.state >= 1) | |
| { self.state--; | |
| give self touched; | |
| } | |
| } | |
| self.state++; | |
| if (self.state == 3) | |
| { self.state = 0; | |
| if (self has muddy) | |
| give self ~muddy; | |
| if (self has touched) | |
| give self ~touched; | |
| print "^The rank odor is so overpowering you simply can't take it"; | |
| if (jars.number > 5) print ". "; | |
| else print " any more. "; | |
| print "You run outside and try to breathe again.^"; | |
| give shed ~concealed; | |
| PlayerTo(by_shed); | |
| rtrue; | |
| } | |
| } | |
| ], | |
| out_to | |
| [; give shed ~concealed; | |
| return by_shed; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Objects that will be moved to the location when found. | |
| !---------------------------------------------------------------------------- | |
| ! Player is being like a child, so hands are smaller. | |
| Rock rock1 "small rock" | |
| with name "small"; | |
| Rock rock2 "large rock" | |
| with name "large", | |
| number 0, | |
| before | |
| [; Fish : if (self notin creek) "But ", (the) noun, " isn't in the creek."; | |
| <<Take self>>; | |
| Enter : if (self in player) return L__M(##Enter, 4); | |
| "Although large, the rock isn't a boulder. It isn't big enough to get on."; | |
| Take : if ((rock1 in player) || (egg in player) || (board in player)) rfalse; | |
| if (self in creek) | |
| { if (location == by_shed) return Std_Msgs(2, creek); | |
| if (self.number ~= location) | |
| { print "You didn't see the ripples on this side of the creek, but you thrust your | |
| hand into the turbid water anyway and idly fish around. Although something | |
| slippery brushes your hand, you come up empty"; | |
| if (hand has muddy){ WashOffMud(true); rtrue; } | |
| "."; | |
| } | |
| } | |
| ], | |
| after | |
| [; Take : if (self has concealed) | |
| { give self ~concealed; | |
| if (self has smeared) | |
| DettachSmear(self); | |
| print "You thrust your hand in the murky depths where you saw the ripples. Bravely | |
| raking the sludge with your fingers, you touch some weird things (what ARE | |
| they?), before finally feeling the oblong firmness of the rock. You pull it out"; | |
| if (hand has muddy){ WashOffMud(true); rtrue; } | |
| "."; | |
| } | |
| ]; | |
| Object bush "bush" !Oh, oh, poison oak! But no way to avoid it. Like real life. | |
| has static | |
| with name "bush" "clusters" "leaves" "leaf", | |
| initial | |
| [; if (hand has foundordone) | |
| "A poison oak bush is growing next to the slope."; | |
| "A bush is growing next to the slope."; | |
| ], | |
| short_name | |
| [; if (hand has foundordone) print "poison oak"; | |
| else print "bush"; | |
| rtrue; | |
| ], | |
| parse_name | |
| [ i j k; if (hand has foundordone) j='poison'; else j=-1; | |
| if (hand has foundordone) k='oak'; else k=-1; | |
| while (NextWord()==j or k or 'bush' or 'clusters' or 'leaves' or 'leaf') i++; | |
| return i; | |
| ], | |
| description | |
| [; if (by_shed hasnt visited) | |
| print "Fortunately it isn't sun-dried manzanita which would pull out or crumble | |
| in your hand. "; | |
| print "The shiny, dark green, pointy leaves group in clusters"; | |
| if (hand has foundordone) | |
| { if (self hasnt general) | |
| { give self general; | |
| ". You now recognize it as poison oak."; | |
| } | |
| ". It is definitely poison oak."; | |
| } | |
| "."; | |
| ], | |
| before | |
| [; Take, Remove : if (hand has foundordone) <<Touch self>>; | |
| "You tug on it, but it is firmly rooted in the ground."; | |
| Touch : if (voice.touch_prompt) | |
| { if (hand hasnt foundordone) | |
| "The prickly leaves scrape your hand."; | |
| if (self has touched) | |
| "Oh phooey, you guess touching it again won't make things any worse than | |
| they already are. Prickly."; | |
| if (self hasnt general) | |
| { <Examine self>; print "^"; } | |
| "You're sorry you touched it already."; | |
| } | |
| Eat, Taste, | |
| SmellThing : if (action==##SmellThing) | |
| { if (~~(voice.smell_prompt)) <<Smell>>; | |
| if (east_creek has general) Achieved(11); | |
| } | |
| if (hand hasnt foundordone) | |
| "Some instinct tells you you shouldn't."; | |
| print "Just what you need, a "; | |
| if (action==##SmellThing) print "snoot full"; | |
| else print "mouthful"; | |
| " of poison oak! Nope."; | |
| Grab, Pull : <<Go nw_obj>>; | |
| Attack : "The bush is just a little too far up the slope for that."; | |
| ThrownAt : if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| if (noun == egg) | |
| SmashEgg(location); | |
| else move noun to location; | |
| if (noun == board) | |
| { print "The board is too heavy, it falls short and "; | |
| if (voice.sound_prompt) print "thuds "; | |
| else print "slides "; | |
| "back down the slope."; | |
| } | |
| if (noun == egg) | |
| "The egg is too light, it falls short, crash landing with a splat."; | |
| print_ret (The) noun, " hits the bush, rustling the leaves, then rolls back | |
| down the slope."; | |
| ]; | |
| Object shelves "shelves" | |
| has static supporter pluralname | |
| with name "shelves" "back" "wall" "planks" "wooden", | |
| initial | |
| [; print "Stretching across the back wall are some wooden shelves.^^"; | |
| self.description(); rtrue; | |
| ], | |
| description | |
| [; switch(jars.number) | |
| { 0 : print "On the shelves are lots and lots of jars."; | |
| 1 : print "On the shelves are lots and lots of intact jars and a few shattered jars."; | |
| 2 : print "On the shelves are lots of intact jars and some shattered jars."; | |
| 3 : print "On the shelves are some intact jars and lots of shattered jars."; | |
| 4 : print "On the shelves are a few intact jars and lots and lots of shattered jars."; | |
| 5 : print "On the shelves are a few intact jars and lots and lots of shattered jars."; | |
| 6 : print "On the shelves are disintegrating green things, surrounded by vile muck and shattered glass."; | |
| } | |
| SeeJarSmear(); | |
| print "^"; | |
| if ((jars has braved) && (board has concealed)) | |
| "^You can also see a board here."; | |
| rtrue; | |
| ], | |
| before | |
| [; Search : <<Examine self>>; | |
| ThrownAt, Receive : if ((action==##Receive) && (noun == board)) | |
| "Since getting it down took courage, you're not about to put it back."; | |
| if (action==##ThrownAt) <<ThrowAt noun jars>>; | |
| "The shelves are not important in and of themselves."; | |
| ]; | |
| ! Just to add a little darkness to the "sweetness and light". Although | |
| ! this is actually part of my past (I hated the smell of vinegar for years). | |
| Object jars "jars" | |
| has concealed openable pluralname | |
| with name "jars" "bottles" "jar" "bottle" "glass" "contents" "vile" "pickles" "moldy" | |
| "disintegrating" "intact" "shattered" "broken" "muck" "watery" "marked" "smeared", | |
| number 0, | |
| description | |
| [; if (self.number > 5) | |
| { print "The disintegrating green things are surrounded by vile muck and shattered | |
| glass. They are disgusting and since the eerie black ~eyes~ still seem to | |
| stare, you can't shake the feeling that they aren't REALLY pickles."; | |
| SeeJarSmear(); | |
| print " You avert your eyes.^"; | |
| SeeBoard(); | |
| rtrue; | |
| } | |
| if (self hasnt general) | |
| { give self general; | |
| print "Behind the glass, suspended in a cloudy liquid, are green things with black, | |
| staring eyes. They seem somewhat cylindrical, but since they are falling apart, | |
| yucky bits of floating matter partially obscure them. You have no idea WHAT | |
| they are. Decaying frogs. Decomposing lab animals. Formaldehyded something..."; | |
| SeeSmashed(); | |
| SeeJarSmear(); | |
| print "^"; | |
| rtrue; | |
| } | |
| if (self hasnt braved) | |
| { give self braved; | |
| move board to inside_shed; | |
| print "Finally you recognize the smell. With a startling shift of perspective, the | |
| green things resolve into rotting pickles. A farmer or farmer's wife who once | |
| lived here must have canned them long ago because the seals have been broken | |
| some time. The escaping stink is rancid vinegar, the black eyes, spots of mold."; | |
| SeeSmashed(); | |
| SeeJarSmear(); | |
| print "^"; | |
| SeeBoard(); | |
| rtrue; | |
| } | |
| if (self hasnt foundordone) | |
| give self foundordone; | |
| print "They are disgusting and since the eerie black ~eyes~ still seem to stare, you | |
| can't shake the feeling that they aren't REALLY pickles."; | |
| SeeSmashed(); | |
| SeeJarSmear(); | |
| print " You avert your eyes.^"; | |
| SeeBoard(); | |
| rtrue; | |
| ], | |
| parse_name | |
| [ i j k l m n o p q r s t u; | |
| if (self.number > 5) | |
| { while (NextWord()=='pickle' or 'pickles' or 'disintegrating' or 'green' or 'things' or 'vile' or | |
| 'contents' or 'moldy' or 'watery' or 'muck' or 'shattered' or 'broken' or 'glass') i++; | |
| return i; | |
| } | |
| else | |
| { if (self has braved) j='pickle'; else j=-1; | |
| if (self has braved) k='pickles'; else k=-1; | |
| if (self has braved) l='moldy'; else l=-1; | |
| if (self has crushed) m='vile'; else m=-1; | |
| if (self has crushed) n='contents'; else n=-1; | |
| if (self has crushed) o='watery'; else o=-1; | |
| if (self has crushed) p='muck'; else p=-1; | |
| if (self has crushed) q='intact'; else q=-1; | |
| if (self has crushed) r='shattered'; else r=-1; | |
| if (self has crushed) s='broken'; else s=-1; | |
| if (self has touched) t='egg-marked'; else t=-1; | |
| if (self has touched) u='smeared'; else u=-1; | |
| while (NextWord()==j or k or l or m or o or p or q or r or s or t or u or 'disintegrating' or 'green' | |
| or 'things' or 'glass' or 'jars' or 'jar' or 'bottles' or 'bottle') i++; | |
| return i; | |
| } | |
| ], | |
| before | |
| [ i j; Take, Remove, | |
| Eat, Taste : if ((action==##Take or ##Remove) && (self hasnt general)) | |
| "Maybe you ought to examine them first."; | |
| "Nope. You don't WANT to."; | |
| Search : <<Examine self>>; | |
| Open, Attack, Touch : print "You have NO wish to touch the "; | |
| if (jars.number > 5) "muck."; | |
| "jars."; | |
| Kick : return Std_Msgs(13); | |
| ThrownAt : if ((second ~=0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| move noun to location; | |
| if (noun == board) | |
| { print "The board is too heavy, it falls short"; | |
| if (voice.sound_prompt) " with a thud."; | |
| "."; | |
| } | |
| if (noun == rock1) | |
| { if (self.number <= 5) | |
| "The small rock bumps harmlessly off the jars with a slight ping."; | |
| give rock1 splattered; | |
| "It bounces off a mucky shelf with a slight tap, then falls to the floor."; | |
| } | |
| if (noun == egg) | |
| { AttachSmear(jars, inside_shed); | |
| if (self.number > 5) | |
| "You must aspire to be Jackson Pollock. You squint, take careful aim and | |
| throw the egg at the muck on the shelves. It hits a shelf and breaks open, | |
| leaving a gooey, yellow trail of egg."; | |
| give self touched; | |
| "You squint, take careful aim and throw the egg at one of the jars. It hits it | |
| and breaks open, leaving a gooey, yellow smear, then oozes to the ground."; | |
| } | |
| if (noun == rock2) | |
| { if (self.number > 5) | |
| { give rock2 splattered; | |
| "You throw the large rock at the muck on the shelves. It bounces off a shelf, | |
| then falls to the floor with a thud."; | |
| } | |
| self.number++; | |
| if (self hasnt crushed) | |
| { Achieved(8); | |
| give self crushed; | |
| give rock2 splattered; | |
| print "You draw back your arm and throw the large rock hard at the"; | |
| if (self has touched) | |
| { DettachSmear(self); | |
| print " egg-marked jar. It hits it and several others beside it, "; | |
| } | |
| else print " jars. It hits several, "; | |
| "smashing them. Shattered glass tinkles and clatters. Incredibly, | |
| the awful stink actually manages to get worse."; | |
| } | |
| if (self.number > 2) | |
| { if (self.number == 3) i = 5; | |
| else{ if (self.number == 4) i = 4; else i = 3; } | |
| j = random(i); | |
| if (j == i) | |
| { self.number--; | |
| "You throw the large rock at the remaining jars. It misses, bounces harmlessly | |
| off the back wall, rattling the boards, then falls to the floor with a thud."; | |
| } | |
| } | |
| if (self.number == 5) | |
| { self.number++; | |
| give rock2 splattered; | |
| print "You take careful aim and throw the large rock at the"; | |
| if (self has touched) | |
| { DettachSmear(self); | |
| print " egg-marked jar. Bingo! It hits it dead-center, knocking into the ones on | |
| either side as well, "; | |
| } | |
| else print " few remaining jars. Bingo! It hits them dead-center, "; | |
| "smashing them. Shattered glass tinkles and clatters. The stink increases to the | |
| point it becomes unbearable."; | |
| } | |
| give rock2 splattered; | |
| print "You take careful aim and throw the large rock at the"; | |
| if (self has touched) | |
| { DettachSmear(self); | |
| print " egg-marked jar. It hits it and several others beside it, "; | |
| } | |
| else print " remaining jars. It hits several, "; | |
| "smashing them. The stench intensifies as shattered glass tinkles."; | |
| } | |
| ]; | |
| Object board "board" | |
| has concealed | |
| with name "board" "plank" "shelf" "wooden" "bottom" "long", | |
| description | |
| [; print "It is about six feet long"; | |
| if ((self in creek) && (self.number == 0)) | |
| ". The ends are covered with mud."; | |
| if (self.number == 1) | |
| ". The ends are sunk in the mud and some water laps over the top."; | |
| if (self.number == 2) | |
| ". The ends have almost disappeared into the mud and the middle sags just below the surface of the water."; | |
| "."; | |
| ], | |
| number 0, | |
| state 0, | |
| before | |
| [; if ((self.number >= 3) && (action ~= ##Take)) | |
| return Std_Msgs(10); | |
| Take : if (rock1 in player) return Std_Msgs(4); | |
| if (rock2 in player) return Std_Msgs(5); | |
| if (egg in player) return Std_Msgs(7); | |
| if (self in creek) | |
| { if (self.number >= 3) | |
| { print "You plunge a hand into the dark water and bravely poke around, searching for | |
| the board. You find an edge and tug, but it is firmly wedged into the mud"; | |
| if (hand has muddy) WashOffMud(true); | |
| "."; | |
| } | |
| "You tug on the board, but it now seems to be firmly wedged into the mud."; | |
| } | |
| Drop : if (location == by_shed) | |
| { Achieved(4); | |
| move self to east_creek; | |
| "The board falls, then bumps down the slope, landing by the creek."; | |
| } | |
| Push : if (location == by_shed) <<Drop self>>; | |
| if ((self notin creek) && (location == east_creek)) | |
| <<PutOn self creek>>; | |
| ThrownAt : if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| "B-o-r-i-n-g. There are better targets than the board."; | |
| Attack : if (self hasnt moved) | |
| { print "You have NO wish to be that close to the "; | |
| if (jars.number > 5) "muck."; | |
| "jars."; | |
| } | |
| if ((self in creek) && (self hasnt general)) | |
| { give self general; | |
| "It has no resistant with the water under it. You give it a slight slap."; | |
| } | |
| if ((self notin creek) && (hand hasnt lump)) | |
| { Achieved(10); | |
| give hand lump; | |
| "A karate expert you're not. With a yell, you hit the board. Ouch! It doesn't | |
| split, but it feels like your hand almost did."; | |
| } | |
| "You're not into sadomasochism, are you? This is a clean exhibit! (Sort of.)"; | |
| Kick : if (self hasnt moved) return Std_Msgs(13); | |
| if (self in player) return Std_Msgs(12); | |
| "Ouch!"; | |
| Eat : "Maybe if you could pulverize it some way, first. Maybe."; | |
| Taste : return Std_Msgs(9); | |
| Touch : "The board is rough and splintery under your hand."; | |
| Rub : GetSplinter(self, false); rtrue; | |
| Peel : "Where's the chain saw?"; | |
| Enter : if (self notin creek) rfalse; | |
| if (location == east_creek) <<Go w_obj>>; | |
| <<Go e_obj>>; | |
| ], | |
| after | |
| [; Take : if (self has concealed) | |
| { give self ~concealed; | |
| Achieved(3); | |
| "Reluctant to be close to those icky jars for very long, you dart up to | |
| the shelves, snatch the board and dash back."; | |
| } | |
| ]; | |
| Object motes "dust motes" | |
| has scenery pluralname | |
| with name "dust" "motes"; | |
| Object sunlight "sunlight" | |
| has scenery | |
| with name "sunlight" "sunshine" "light" "fingers"; | |
| Object worm "worm" | |
| has concealed | |
| with name "worm" "worms", | |
| before | |
| [; if (action~=##Examine) | |
| if (self hasnt general) | |
| { give self general; | |
| "The worm has crawled away."; | |
| } | |
| if (self hasnt foundordone) | |
| { give self foundordone; | |
| "It's GONE, I tell you!"; | |
| } | |
| if (self hasnt braved) | |
| { give self braved; | |
| print "Nobody loves me, everybody hates me. I think I will go in the | |
| back yard and eat worms (an old childhood ditty)"; | |
| } | |
| if (action==##Eat or ##Taste) | |
| { remove self; | |
| ". Well, if is that how you feel! You take the worm and pop it into your mouth. | |
| It wriggles on your tongue until you bite it to death. Yum, dirt-covered, raw meat."; | |
| } | |
| "."; | |
| ]; | |
| Object smashed_egg "smashed egg" | |
| with name "smashed" "egg" "little" "blue" "junk" "shell" "broken", | |
| description "The egg is thoroughly smashed. Junk oozes out of it.", | |
| number 0, | |
| before | |
| [; Eat, Taste : "You've eaten a lot of strange things, but it looks like that is NOT | |
| all yolk and egg white. Ugh, no way, Jose."; | |
| Take, Touch : "But it's all in bits and pieces."; | |
| Peel : "It already looks as quite peeled."; | |
| Attack, ThrownAt : if (action == ##ThrownAt) | |
| { if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| } | |
| "You can't make an omelet without breaking a few eggs, but you have | |
| already broken the only egg around."; | |
| SmellThing : if (east_creek has general) Achieved(11); | |
| if (self has general) | |
| "It smells like sulfur. Sort of like, er um, well, sort of like a... fart."; | |
| "Actually, it doesn't have much of an odor... yet."; | |
| ], | |
| time_left 0, | |
| time_out | |
| [; give self general; ]; | |
| Object smear "yellow smear" | |
| has concealed | |
| with name "smear" "eggy" "yellow" "gooey" "trail", | |
| description "Funny, the smear looks like splashed raw egg yolk.", | |
| number 0, | |
| before | |
| [; Eat, Taste : if ((self.number > 0) && (self.number == jars)) <<Taste jars>>; | |
| "You must be desperate for an afternoon snack or a sugar rush or ANY kind of | |
| rush. You lick the smear. Gag. More texture than taste, it is unpleasantly | |
| like some type of bodily fluid with only a vaguely eggy flavor."; | |
| Take : if (self.number == jars) | |
| { if (jars.number > 5) | |
| "The smear is embedded in the vile muck."; | |
| "The smear is plastered to a jar."; | |
| } | |
| print_ret "The smear is plastered to the ", (name) self.number, "."; | |
| Touch : if (self.number == jars) <<Touch jars>>; | |
| "Yep. The smear feels as gooey as it looks."; | |
| SmellThing : <<SmellThing smashed_egg>>; | |
| Attack : <<Attack smashed_egg>>; | |
| ]; | |
| !---------------------------------------------------------------------------- | |
| ! Background Scenery - Objects in more than one location (found_in). | |
| !---------------------------------------------------------------------------- | |
| Object landscape "landscape" | |
| has scenery | |
| with name "landscape", | |
| before | |
| [; Examine: if (~~(voice.depth_prompt)) | |
| { voice.number = 1; | |
| voice.daemon(); | |
| } | |
| <<Look>>; | |
| default : "You can only look at the landscape."; | |
| ], | |
| found_in east_creek west_creek by_shed; | |
| Object slope "slope" | |
| has static concealed | |
| with name "slope" "steep" "rocky" "rise", | |
| before | |
| [; if (location == east_creek) "Try northwest instead."; | |
| if (location == by_shed) "Try southeast instead."; | |
| "The slope isn't important in and of itself."; | |
| ], | |
| found_in east_creek west_creek by_shed; | |
| Object bird "bird" | |
| has scenery | |
| with name "bird" "birds", | |
| before | |
| [; if (~~(voice.sound_prompt)) "You can't see any such thing."; | |
| "Although you can hear birds, you can't actually see any."; | |
| ], | |
| found_in east_creek west_creek by_shed; | |
| Object shadows "shadows" | |
| has scenery | |
| with name "shadows" "shadow", | |
| description | |
| [; if (~~(voice.depth_prompt)) "You can't see any such thing."; | |
| "You must be thinking of some other piece of IF. These shadows are just shadows."; | |
| ], | |
| found_in east_creek west_creek by_shed; | |
| Object sun "sun" | |
| has scenery | |
| with name "sun" "sunlight" "sunshine" "light" "shafts", | |
| found_in east_creek west_creek by_shed; | |
| Object oak_trees "oaks" | |
| has static concealed pluralname | |
| with name "trees" "tree" "oak" "oaks" "large" "full-grown" "boughs" "branches" "limbs" | |
| "leaves" "leaf" "bark" "canopies" "tops", | |
| parse_name | |
| [ i j; if (player notin rope) j='tree'; else j=-1; | |
| while (NextWord()==j or 'trees' or 'oak' or 'oaks' or 'large' or 'full-grown' or 'boughs' or | |
| 'canopies' or 'branches' or 'limbs' or 'leaves' or 'leaf' or 'bark') i++; | |
| return i; | |
| ], | |
| description | |
| [; if (voice.depth_prompt) "The trees are large and stately, their branches massive gnarled arms. Some reach | |
| for the sky, but many bend away from it, contorting into interesting shapes."; | |
| "The trees are still foggy, but seem large and stately."; | |
| ], | |
| before | |
| [; if (action~=##Examine or ##Climb) "Which tree? There are so many."; | |
| Climb: if (~~(voice.depth_prompt)) | |
| "They are still foggy, so you can't spot a climbable one."; | |
| if (location == east_creek or by_shed) | |
| "All the trees are actually on the other side of the creek."; | |
| "You spot a likely oak and hoist yourself up into the lowest branches. You look | |
| around, enjoying the elevated view. After having your fill, you get down."; | |
| ], | |
| found_in east_creek west_creek by_shed; | |
| Object creek "creek" | |
| has concealed container open | |
| with name "creek" "muddy" "river" "water" "stream", | |
| description | |
| [; if (voice.depth_prompt) | |
| print "It is about five feet wide. The water is dark, almost stagnant. | |
| The banks are very muddy"; | |
| else print "It is dark and several feet wide"; | |
| SeeBoard(); | |
| "."; | |
| ], | |
| first_jump 0, | |
| before | |
| [; if ((action~=##Examine or ##ThrownAt or ##Receive) && | |
| (location ~= east_creek or west_creek)) | |
| return Std_Msgs(2, self); | |
| SkipOn : if (noun ~= egg) <<ThrowAt noun self>>; | |
| if (location == by_shed) <<ThrowAt noun self>>; | |
| if (location == east_creek) SmashEgg(west_creek); | |
| else SmashEgg(east_creek); | |
| "You flick your wrist as you hurl the egg. It hits the surface of the water | |
| with a loud splat and stops. The slow moving current starts to carry the broken | |
| shell away. As it does, the egg drifts sideways and lodges on the other bank."; | |
| ThrownAt, Receive | |
| : if ((action==##Receive) && (location == by_shed)) | |
| return Std_Msgs(2, self); | |
| if ((action==##ThrownAt) && ((second ~= 0) && (noun == second))) return Std_Msgs(14); | |
| if (noun == wild) | |
| { if (location == by_shed) "The creek is too far away."; | |
| remove wild; | |
| print_ret "You toss ", (the) noun, " in the creek. The slow moving current | |
| gradually carries them out of view."; | |
| } | |
| if (noun == hand) | |
| { if (hand hasnt foundordone) <<Touch self>>; | |
| if (hand has muddy) | |
| { print "You dip your hand in the cool water. Feels good"; | |
| WashOffMud(true); rtrue; | |
| } | |
| "The water cools the rash a little, but not enough."; | |
| } | |
| if (noun == rock1) | |
| { if (location == by_shed) | |
| { move rock1 to east_creek; | |
| "You toss the small rock at the creek, but it falls short, landing below you with | |
| a clatter."; | |
| } | |
| if (location == east_creek) move rock1 to west_creek; | |
| else move rock1 to east_creek; | |
| Achieved(0); | |
| "Flicking your wrist, you toss the small rock across the water. With a pishing | |
| sound it skips, once, no, twice! before it bounces onto the other bank."; | |
| } | |
| if (noun == rock2) | |
| { move rock2 to creek; | |
| give rock2 concealed; | |
| if (location == by_shed or east_creek) rock2.number = west_creek; | |
| else rock2.number = east_creek; | |
| Achieved(1); | |
| print "You hurl the large rock at the water. Much too heavy to skip, it plunges | |
| below the surface near the "; | |
| if (location == by_shed or east_creek) print "western"; else print "eastern"; | |
| " bank with a loud splash. Ripples swirl outward from the spot."; | |
| } | |
| if (noun == egg) | |
| { if (location == by_shed) | |
| { SmashEgg(east_creek); | |
| "You throw the egg at the creek, but it is too light and crash lands below you."; | |
| } | |
| if (location == east_creek) move egg to west_creek; | |
| else move egg to east_creek; | |
| "You lightly toss the egg in the creek. It bobs for a moment, then the slow | |
| moving current starts to carry it away. As it does, the egg drifts sideways | |
| and lodges on the other bank."; | |
| } | |
| if (noun == board) | |
| { if (action==##ThrownAt) | |
| { if (location ~= east_creek) | |
| { print "Practicing log tossing? "; | |
| return Std_Msgs(2); } | |
| Achieved(5); | |
| move board to self; | |
| give board supporter; | |
| "The board is heavy, so luckily it lands laying across the creek. It sinks | |
| slightly into the mud."; | |
| } | |
| Achieved(5); | |
| move board to self; | |
| give board supporter; | |
| "It takes some effort, but by hoisting the board horizontally, pointing | |
| one end west and letting go, you manage to lay the board across the creek. | |
| It sinks slightly into the mud."; | |
| } | |
| Search : <<Examine self>>; | |
| LookUnder : if (rock2 in self) | |
| { print "Looking at the filthy water, you decide there has GOT to be a better way. "; | |
| if (rock1 in player) return Std_Msgs(4, rock1, true); | |
| if (board in player) return Std_Msgs(6, board, true); | |
| if (egg in player) return Std_Msgs(7, egg, true); | |
| <<Fish rock2>>; | |
| } | |
| "You lower your face to the water to look under it. But as you get near the | |
| filthy surface, you chicken out, stopping short of putting your head in."; | |
| Taste, Eat, Drink : | |
| if (player has braved) | |
| print "Seriously? After peeing in it?!!! "; | |
| "The standing water looks much too dark, unsafe to drink."; | |
| Paddle : if (noun ~= 0) | |
| { if (noun == knee or wild or board) rfalse; | |
| if ((noun ~= hand or player) && (noun notin player)) | |
| print_ret "You aren't holding ", (the) noun, "."; | |
| if (noun == egg or rock1 or rock2) | |
| { if (noun has smeared) | |
| { DettachSmear(noun); | |
| print "You wash ", (the) noun, " in the creek. It comes out as clean as | |
| the dirty water will allow"; | |
| } | |
| else | |
| print "You wash ", (the) noun, " in the water. Since it was somewhat | |
| clean to begin with it emerges somewhat clean"; | |
| if (hand has muddy){ WashOffMud(true); rtrue; } | |
| "."; | |
| } | |
| } | |
| print "You splash around some water with your hand"; | |
| if (hand has muddy){ WashOffMud(false); rtrue; } | |
| "."; | |
| Touch : "The water is cool and, surprise, surprise, wet."; | |
| Take : "You left your Superman thermos behind (far away and long ago, what | |
| a shame. It might be worth a bundle now)."; | |
| JumpOver : if (~~(voice.depth_prompt)) | |
| "There doesn't seem to be anything on the other side worth jumping for."; | |
| if (self.first_jump == 0) | |
| self.first_jump = location; | |
| if (location ~= self.first_jump) | |
| "Surprisingly, the creek isn't any easier to jump over from this side."; | |
| if (self hasnt braved) | |
| { give self braved; | |
| "Unfortunately the creek is a bit too wide for you to jump across, especially | |
| since you would have to push off from a slippery, muddy bank."; | |
| } | |
| "The ground is too muddy to push off from and the creek too wide for you to jump over."; | |
| Enter : if (location == east_creek) <<Go w_obj>>; | |
| <<Go e_obj>>; | |
| ], | |
| found_in east_creek west_creek by_shed; | |
| Object mud "mud" | |
| has concealed | |
| with name "mud" "muddy" "clay" "dirt" "bank" "banks", | |
| number 0, | |
| description "The mud is chocolate brown and very wet looking.", | |
| before | |
| [; if ((action~=##Examine) && (player in rope)) | |
| return Std_Msgs(2, self); | |
| Receive : if (noun == hand) <<Touch self>>; | |
| if (noun in player) <<Drop noun>>; | |
| print_ret "You aren't holding ", (the) noun, "."; | |
| Touch, Take : if (hand has foundordone) | |
| { if (hand has muddy) | |
| "Your hand is muddy enough now."; | |
| if (hand has general) | |
| StopTimer(hand); | |
| give hand muddy; | |
| "Your smear some mud on your hand. Oooooh. Its slimy coolness soothes the fiery rash."; | |
| } | |
| "You squeeze some wet, gluey clay between your fingers. It is slimy and cool. | |
| But don't you think you're a little old for mud pies?"; | |
| Eat, Taste : self.number++; | |
| switch(self.number) | |
| { 1 : Achieved(10); | |
| "Grainy with a deep chalky flavor, it's full-bodied, but has a lot of sediment."; | |
| 2 : "Obviously that's enough mud for you."; | |
| 3 : "Next you'll be looking for worms."; | |
| 4 : "There isn't a worm around for miles and miles and miles and miles."; | |
| 5 : move worm to location; | |
| "Actually there is a worm in the mud at your feet. But think I'd tell YOU?"; | |
| 6 : "More mud is OUT. Clearly it went to your head."; | |
| default : "Can't hold your mud, huh?"; | |
| } | |
| ThrownAt : <<Drop noun>>; | |
| SmellThing : if (~~(voice.smell_prompt)) <<Smell>>; | |
| "Dank and earthy."; | |
| ], | |
| found_in east_creek west_creek; | |
| Object shed "rickety old shed" | |
| has static concealed | |
| with name "shed" "shack" "hut" "rickety" "old" "weathered" "boards" "slats", | |
| initial | |
| [; print "Leaning here is a weathered shed"; | |
| if ((self has smeared) && (smear in location)) | |
| ". On the boards is a gooey, yellow smear."; | |
| "."; | |
| ], | |
| description | |
| [; if (self hasnt general) | |
| { give self general; | |
| print "The shed was here before the nearest track house was built. Probably it was part of | |
| a farm that you know originally occupied this area. "; | |
| if (location == east_creek) | |
| print "You remember a door being on the other side. "; | |
| } | |
| print "The grey, weathered boards look like they should fall over at the slightest touch, but they | |
| have steadfastly withstood the passing years and children"; | |
| if ((self has smeared) && (smear in location)) | |
| print ". On the boards is a gooey, yellow smear"; | |
| if (location == by_shed) | |
| ". A wide doorway leads into its dark interior."; | |
| "."; | |
| ], | |
| number 0, | |
| before | |
| [; if (~~(voice.depth_prompt)) "You can't see any such thing."; | |
| if ((action~=##Examine or ##ThrownAt) && (location ~= by_shed or inside_shed)) | |
| return Std_Msgs(2, self); | |
| ThrownAt : if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| if ((noun == board) && (location == east_creek)) | |
| { move board to east_creek; | |
| print "The board is too heavy to fly far, it hits the even steeper slope | |
| behind the shed and "; | |
| if (voice.sound_prompt) "thuds back down."; | |
| "slides back down."; | |
| } | |
| if ((noun == egg) && (location == west_creek)) | |
| { SmashEgg(east_creek); | |
| "The egg is too light. It sails through the air and smashes down on the other side of the creek."; | |
| } | |
| if (location == inside_shed) | |
| { if (noun == egg) AttachSmear(shed, inside_shed); | |
| else move noun to location; | |
| } | |
| else | |
| { if (noun == egg) AttachSmear(shed, by_shed); | |
| else move noun to by_shed; | |
| } | |
| if (noun == rock1) | |
| { Achieved(0); | |
| "The small rock hits the shed lightly, making a slight tapping sound."; | |
| } | |
| if (noun == rock2) | |
| { Achieved(1); | |
| "The large rock hits it hard, making a satisfying thump. The boards rattle."; | |
| } | |
| if (noun == board) | |
| { print "The board is too heavy, it falls short"; | |
| if (voice.sound_prompt) " with a thud."; | |
| "."; | |
| } | |
| if (noun == egg) | |
| "The egg hits the boards, leaving a gooey yellow smear, then oozes to the ground."; | |
| Attack : if (~~(voice.sound_prompt)) "The boards shake."; | |
| "The boards rattle."; | |
| Taste : return Std_Msgs(9); | |
| Touch : "The boards are rough and splintery under your hand."; | |
| Rub : GetSplinter(self, false); rtrue; | |
| Push : if (hand hasnt hurt){ GetSplinter(self, true); rtrue; } | |
| "The shed is stronger than it looks, the boards only give a little."; | |
| Enter : if (location == by_shed) | |
| { give shed concealed; | |
| PlayerTo(inside_shed); | |
| rtrue; | |
| } | |
| "You're already inside."; | |
| Exit : if (location == inside_shed) | |
| { give shed ~concealed; | |
| PlayerTo(by_shed); | |
| rtrue; | |
| } | |
| "You're already outside."; | |
| ], | |
| found_in east_creek west_creek by_shed inside_shed; | |
| Object rope "knotted rope" | |
| class InsideOrOn | |
| has concealed static supporter | |
| with name "rope" "knotted" "knot" "swing" "hanging" "outline", | |
| description | |
| [; print "Obviously a swing, the large knot at the bottom functions as a | |
| ~platform~ to stand on. The rope "; | |
| if (self has general) print "swings"; | |
| else print "hangs"; | |
| " several feet above the ground."; | |
| ], | |
| reach_zones elm nest, | |
| number 0, | |
| state 0, | |
| before | |
| [; if (~~(voice.depth_prompt)) "You can't see any such thing."; | |
| if (location~=west_creek) | |
| { if ((self hasnt general) && (action~=##Examine or ##ThrownAt)) | |
| return Std_Msgs(2, self); | |
| if ((self has general) && (action~=##Examine or ##ThrownAt or ##Take or ##Enter)) | |
| return Std_Msgs(2, self); | |
| if (action==##Take or ##Enter) | |
| { if (self.number == 1 or 3) | |
| "You jump, grabbing for the rope, but it swings out of reach before you can even touch it."; | |
| "The rope is swinging too far away for you to reach."; | |
| } | |
| } | |
| ThrownAt, Receive : if (action==##ThrownAt) | |
| { if ((second ~= 0) && (noun == second)) return Std_Msgs(14); | |
| if (noun == wild) return Std_Msgs(11, wild); | |
| } | |
| if (noun == board) | |
| "The board is too heavy to throw that far."; | |
| if (noun == egg) | |
| { SmashEgg(west_creek); | |
| if (location == east_creek) | |
| "The egg is too light. It sails through the air and smashes down on the other side of the creek."; | |
| } else move noun to west_creek; | |
| print (The) noun, " misses the narrow rope and crashes to the ground"; | |
| if (location == east_creek) " on the other side of the creek."; | |
| "."; | |
| Tie : if (player in self) "You'll have to get off the rope first."; | |
| if (second == 0) | |
| { print "The rope is already knotted"; | |
| if (self hasnt touched) | |
| { give self touched; | |
| ". (Sneaky, aren't you? You can't tie more knots in | |
| the rope to climb it higher. You can't climb it higher, period, but good try.)"; | |
| } | |
| "."; | |
| } | |
| if (self has general) | |
| { self.number = 0; | |
| give elm ~touched; | |
| give self ~general; | |
| StopDaemon(self); | |
| print "You try, stopping the rope in its swing, "; | |
| } else print "You try, "; | |
| print_ret "but it is too thick to tie around ", (the) second, "."; | |
| Climb : if (player notin self) <<Enter self>>; | |
| "The only knot is the one you are standing on, so the rope is very hard to climb. | |
| You hitch yourself up a little, then slip back down to the knot."; | |
| Enter : if (player notin self) | |
| { Achieved(7); | |
| if (self has general) | |
| { self.state = 1; | |
| StopDaemon(self); | |
| } | |
| self.number = 0; | |
| give elm ~touched; | |
| give self general; | |
| StartDaemon(self); | |
| } | |
| Tie : "The rope already has a knot."; | |
| Touch : "Bristly."; | |
| Push, Pull, | |
| Swing : if (player notin self) | |
| { if (self has general) | |
| StopDaemon(self); | |
| self.number = 0; | |
| give elm ~touched; | |
| give self general; | |
| StartDaemon(self); | |
| "You grab the rope and pull it back as far as you can, then let go."; | |
| } | |
| if (self has general) | |
| { if (self.number == 2) | |
| { self.number--; | |
| self.number--; | |
| self.state = 2; | |
| "You lean out and push your palm against the tree."; | |
| } | |
| if (self.number == 4) | |
| { self.number--; | |
| self.number--; | |
| self.state = 2; | |
| "You lean as far out as you can and push your fingers against the tree."; | |
| } | |
| "You sway your body back and forth, but it does little to make the rope swing more."; | |
| } | |
| Untie : if ((second ~= 0) && (second ~= elm)) "The rope isn't tied to that."; | |
| "The branch it is tied to is too high."; | |
| Attack : "Utterly, completely, totally pointless. (And without any merit whatsoever.)"; | |
| Peel : "Aha! Good try, but the rope isn't made of hemp, so forget it."; | |
| ], | |
| after | |
| [; Enter : if (self.state) | |
| print "You grab the rope, stopping it in its swing. "; | |
| print "You pull back the rope and hop on it, providing impetus to start it swinging"; | |
| if (self.state) { self.state = 0; " again."; } | |
| "."; | |
| ], | |
| daemon | |
| [; self.number++; | |
| if ((self.state == 2) && (location ~= by_shed or inside_shed)) | |
| print "^The rope speeds up a little "; | |
| if ((self.number == 1) && (location ~= by_shed or inside_shed)) | |
| { if (self.state == 2) print "and "; | |
| else print "^The rope "; | |
| print "swings high out over the creek, almost to the other bank.^"; | |
| } | |
| if ((self.number == 2) && (location ~= by_shed or inside_shed)) | |
| { if (self.state == 2) print "and "; | |
| else print "^The rope "; | |
| print "swings back, close to the tree trunk.^"; | |
| } | |
| if ((self.number == 3) && (location ~= by_shed or inside_shed)) | |
| { if (self.state == 2) print "as it "; | |
| else print "^The rope slows a little as it "; | |
| print "swings out over the water.^"; | |
| } | |
| if ((self.number == 4) && (location ~= by_shed or inside_shed)) | |
| { if (self.state == 2) print "and "; | |
| else print "^The rope "; | |
| print "swings back, within touching distance of the tree trunk.^"; | |
| } | |
| if ((self.number == 5) && (location ~= by_shed or inside_shed)) | |
| { if (elm has touched) print "^The rope slows down, "; | |
| else print "^The rope slows more, "; | |
| print "swinging in approximately a 60 degree arc.^"; | |
| } | |
| if (self.number == 6) | |
| { self.number = 0; | |
| give elm ~touched; | |
| give self ~general; | |
| StopDaemon(self); | |
| if (location ~= by_shed or inside_shed) | |
| print "^The rope swings back and forth a little, then slowly comes to a stop.^"; | |
| } | |
| if (self.state == 2) | |
| { self.state = 0; | |
| if (elm hasnt touched) | |
| give elm touched; | |
| } | |
| ], | |
| found_in east_creek west_creek; | |
Xet Storage Details
- Size:
- 142 kB
- Xet hash:
- 9055a5d95a784a2e04dad69350dba5a946c520c1e987e7dbd11fac1f9ff7e556
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.