/*** TRANSITIONS ***/ Hitms = Proc(vrb, loc, func) { If (Verb == vrb) { If (loc) { $move($ME, loc); GO = TRUE; } If (func) { func(); } } } Synvb = Proc(vrb, newvrb) { If (Verb == vrb) { Verb = newvrb; } } road1(ACTION) = Proc() { Hitms(n, gard1, 0); Hitms(s, gard2, 0); Hitms(e, road2, 0); Hitms(w, road3, 0); } road2(ACTION) = Proc() { Hitms(n, gard1, 0); Hitms(s, gard2, 0); Hitms(e, road6, 0); Hitms(w, road1, 0); } DropKill = Proc() { "The drop would kill you.\n"; MyLoc = $loc($ME); GO = TRUE; } road3(ACTION) = Proc() { Hitms(n, 0, DropKill); Hitms(s, 0, DropKill); Hitms(e, road1, 0); Hitms(w, road7, Entr7); } road4(ACTION) = Proc() { Hitms(n, farm1, 0); Hitms(s, road6, 0); Hitms(e, frst1, 0); Hitms(w, gard1, 0); } road5(ACTION) = Proc() { Hitms(n, road6, 0); Hitms(s, town1, 0); Hitms(e, frst1, 0); Hitms(w, gard2, 0); } road6(ACTION) = Proc() { Hitms(n, road4, 0); Hitms(s, road5, 0); Hitms(e, frst1, 0); Hitms(w, road2, 0); } road7(ACTION) = Proc() { $miss(Tress, Tress, East7, West7, 0, 0, 0, 0, 0, 0); } East7 = Proc() { GO = TRUE; If (!HWY7) { $move($ME, road3); } Else { Dump7($cont(road7)); HWY7 = HWY7 - 1; Get7($cont(Roadx)); } } West7 = Proc() { GO = TRUE; Dump7($cont(road7)); HWY7 = HWY7 + 1; Get7($cont(Roadx)); } Dump7 = Proc(obj) { If ($link(obj)) { Dump7($link(obj)); // start at bottom } If (obj != $ME) { // Everything else leaves obj.RDLOC = HWY7; // Retain its location on HWY 7 $move(obj, Roadx); // Put it in the box } } Get7 = Proc(obj) { If (obj) { Get7($link(obj)); If (obj.RDLOC == HWY7) { $move(obj, road7); } } } Entr7 = Proc() { Dump7($cont(road7)); HWY7 = 0; Get7($cont(Roadx)); } gard1(ACTION) = Proc() { Hitms(n, gard1, 0); Hitms(s, road1, 0); Hitms(e, gard1, 0); Hitms(w, gard1, 0); } gard2(ACTION) = Proc() { Hitms(n, road1, 0); Hitms(s, gard2, 0); Hitms(e, gard2, 0); Hitms(w, gard2, 0); } FLeave = Proc() { If ($pct(20)) { $move($ME, road6); } GO = TRUE; } frst1(ACTION) = Proc() { $miss(FLeave, FLeave, FLeave, FLeave, FLeave, FLeave, FLeave, FLeave, 0, 0); } farm1 (ACTION) = Proc() { Synvb(enter, north); Hitms(n, farm2, 0); Hitms(s, road4, 0); Hitms(e, farm3, 0); Hitms(w, farm4, 0); Hitms(ne, farm3, 0); Hitms(nw, farm4, 0); } farm2 (ACTION) = Proc() { Synvb(out, s); Synvb(enter, n); Synvb(east, up); Hitms(n, farm6, 0); Hitms(s, farm1, 0); Hitms(up, farm7, 0); } farm3 (ACTION) = Proc() { Hitms(n, farm5, 0); Hitms(s, farm1, 0); Hitms(e, frst1, 0); Hitms(nw, farm5, 0); Hitms(sw, farm1, 0); } farm4 (ACTION) = Proc() { Hitms(n, farm5, 0); Hitms(s, farm1, 0); Hitms(w, gard1, 0); Hitms(ne, farm5, 0); Hitms(se, farm1, 0); } farm5 (ACTION) = Proc() { Hitms(e, farm3, 0); Hitms(w, farm4, 0); Hitms(se, farm3, 0); Hitms(sw, farm4, 0); } farm6 (ACTION) = Proc() { Hitms(out, farm2, 0); Hitms(s, farm2, 0); } farm7 (ACTION) = Proc() { Hitms(e, farm2, 0); Hitms(d, farm2, PanL); } town1 (ACTION) = Proc() { Hitms(n, road5, 0); Hitms(s, town2, 0); Hitms(e, town3, 0); Hitms(w, town4, 0); } town2 (ACTION) = Proc() { Hitms(n, town1, 0); Hitms(e, town5, 0); Hitms(w, town6, 0); } town3 (ACTION) = Proc() { Hitms(out, town1, 0); Hitms(w, town1, 0); } town4 (ACTION) = Proc() { Hitms(e, town1, 0); Hitms(out, town1, 0); } town5 (ACTION) = Proc() { Hitms(w, town2, 0); Hitms(out, town2, 0); } town6 (ACTION) = Proc() { Hitms(e, town2, 0); Hitms(out, town2, 0); } cel01 (ACTION) = Proc() { Hitms(n, cel02, 0); Hitms(w, cel04, 0); Hitms(u, farm7, 0); } cel02 (ACTION) = Proc() { Hitms(n, cel05, 0); Hitms(s, cel01, 0); Hitms(e, cel20, 0); } cel20(ACTION) = Proc() { Hitms(w, cel02, 0); } cel03 (ACTION) = Proc() { Hitms(s, cel05, 0); If (!dragon.KILLED) { Hitms(w, cel13, 0); Hitms(ne, cel09, 0); Hitms(d, cel09, 0); } } cel04 (ACTION) = Proc() { Synvb(down, north); Hitms(n, cel10, 0); Hitms(e, cel01, 0); Hitms(w, cel08, 0); } MV56= Proc() {Cel6x = 5;} MV76= Proc() {Cel6x = 7;} MV67= Proc() { If ((Cel6x != 7) & dragon.AWAKE & !dragon.KILLED) { "The ice dragon blocks your attempt to cross!\n\n"; } Else { $move($ME, cel07); } GO = TRUE; // short circuit default error message } MV65= Proc() { If ((Cel6x != 5) & dragon.AWAKE & !dragon.KILLED) { "The ice dragon blocks your attempt to leave!\n"; } Else { $move($ME, cel05); } GO = TRUE; // short circuit default error message } cel05 (ACTION) = Proc() { Hitms(n, cel03, 0); Hitms(s, cel02, 0); Hitms(ne, cel06, MV56); } cel06 (ACTION) = Proc() { Hitms(e, 0, MV67); Hitms(sw, 0, MV65); If ((!dragon.KILLED) & dragon.AWAKE & ($loc($ME) == cel06)) { //still here MyLoc = -1; } } cel07 (ACTION) = Proc() { Synvb(out, west); Hitms(w, cel06, MV76); } Thirst = Proc() { If ($loc($ME) == desert) { "The blazing sun is too much for you, I'm afraid.\n"; die(); } } Move08 = Proc() { If (RBTouch) { If (dragon.KILLED) { $move($ME, field); } Else { $move($ME, desert); $sfus($ME, Thirst, 10); } } Else { "You bump your nose against the painting.\n"; MyLoc = $loc($ME); } GO = TRUE; } cel08 (ACTION) = Proc() { Hitms(e, cel04, 0); Hitms(w, 0, Move08); } Slippery = Proc() { "The waterfall is to slick for you to climb.\n"; MyLoc = $loc($ME); GO = TRUE; } CrackEntr = Proc() { "You slip through the crack in the waterfall.\n"; } Get21 = Proc() { Var t, t1; t = $cont(riverx); While (t) { If (t.Loc21 == RiverLoc) { t1 = $link(t); $move(t, cel21); t = t1; } Else { t = $link(t); } } } Dump21 = Proc() { Var t, t1; t = $cont(cel21); While (t) { If (t != $ME) { t.Loc21 = RiverLoc; t1 = $link(t); $move(t, riverx); t = t1; } Else { t = $link(t); } } } Entr21 = Proc() { RiverLoc = 1; Get21(); } cel09 (ACTION) = Proc() { Hitms(n, cel21, Entr21); Hitms(u, 0, Slippery); Hitms(s, cel18, CrackEntr); } Move11 = Proc() { If (dragon.KILLED) { If (!wetsuit.WORN) { "The pit is full of water!!!\n"; } Else { "That water looks mighty dangerous. Are you sure? "; If ($yorn()) { "You leap into the pit and are immediately grabbed by a " "mighty current which pulls you down, down, down... Soon " "the pressure becomes too great for you to breathe, and the " "last thing you remember is feeling somewhat like an " "elephant's footstool.\n"; die(); } } MyLoc = $loc($ME); } Else { $move($ME, cel11); } GO = TRUE; } cel10 (ACTION) = Proc() { Synvb(up, s); Hitms(s, cel04, 0); Hitms(d, 0, Move11); } cel11 (ACTION) = Proc() { If (GOVERB & !<clear crystal>.LIGHT) { "You trip and fall into a pit that you were unable to see " "in the dark!\n"; die(); } Hitms(e, cel12, 0); Hitms(w, cel16, 0); } cel12 (ACTION) = Proc() { Hitms(w, cel11, 0); } WaterEntr = Proc() { If ($ME.HAS > globe.WEIGH) { If (!wetsuit.WORN) { "Whatever you're carrying drags you down into the icy waters!\n"; die(); } } } cel13 (ACTION) = Proc() { If (Verb == down) { If (cel13.HOLED) { WaterEntr(); "You plunge into the icy waters!\n"; $move($ME, cel14); GO = TRUE; $exit(1); } } Hitms(e, cel03, 0); Hitms(w, cel19, 0); } Drown = Proc() { If (($loc($ME) == cel14) | ($loc($ME) == cel17)) { If (!wetsuit.WORN) { "You can't hold your breath any longer. The last thing you " "feel is the odd sensation of water entering your lungs.\n"; die(); } } } cel14 (ACTION) = Proc() { If (Verb == up) { If (cel13.HOLED) { "You pop out through a hole in the ice!\n"; $move($ME, cel13); GO = TRUE; $exit(1); } Else { "You are blocked by an icy roof above!\n"; } } Hitms(w, cel15, 0); Hitms(e, cel17, 0); $sfus($ME, Drown, 1); } cel15(ACTION) = Proc() { Synvb(up, south); Synvb(enter, e); Hitms(e, cel14, WaterEntr); Hitms(s, cel16, 0); } cel16(ACTION) = Proc() { Synvb(down, north); Hitms(n, cel15, 0); Hitms(e, cel11, 0); } cel17(ACTION) = Proc() { Hitms(ne, cel18, 0); Hitms(w, cel14, 0); $sfus($ME, Drown, 1); } Swim = Proc() { "You dive into the icy waters.\n"; WaterEntr(); } cel18(ACTION) = Proc() { Synvb(enter, sw); Hitms(n, cel09, 0); Hitms(sw, cel17, Swim); } cel19(ACTION) = Proc() { Hitms(e, cel13, 0); } North21 = Proc() { Dump21(); RiverLoc = RiverLoc + 1; GO = TRUE; cel21.SEEN = FALSE; Get21(); } South21 = Proc() { Dump21(); GO = TRUE; RiverLoc = RiverLoc - 1; cel21.SEEN = FALSE; If (!RiverLoc) { $move($ME, cel09); } Else { Get21(); } } CantClimb = Proc() { "The sides of the river bed are too steep for you to climb.\n"; MyLoc = $loc($ME); GO = TRUE; } GrateThere = Proc() { "The grate blocks your attempt to move that way.\n"; MyLoc = $loc($ME); GO = TRUE; } cel21(ACTION) = Proc() { If (RiverLoc == GRATELOC) $miss(South21, GrateThere, CantClimb, CantClimb, 0, 0, 0, 0, 0, 0); Else If (RiverLoc == BEND1LOC) $miss(CantClimb, South21, CantClimb, North21, 0, 0, 0, 0, 0, 0); Else If ((RiverLoc > BEND1LOC) & (RiverLoc < BEND2LOC)) $miss(CantClimb, CantClimb, South21, North21, 0, 0, 0, 0, 0, 0); Else If (RiverLoc == BEND2LOC) $miss(CantClimb, North21, South21, CantClimb, 0, 0, 0, 0, 0, 0); Else If (RiverLoc == BEND2LOC) $miss(South21, North21, CantClimb, CantClimb, 0, 0, 0, 0, 0, 0); Else // RiverLoc < BEND1LOC $miss(North21, South21, CantClimb, CantClimb, 0, 0, 0, 0, 0, 0); } desert(ACTION) = Proc() { Hitms(n, desert, 0); Hitms(s, desert, 0); Hitms(e, desert, 0); Hitms(w, desert, 0); Hitms(ne, desert, 0); Hitms(nw, desert, 0); Hitms(se, desert, 0); Hitms(sw, desert, 0); } field(ACTION) = Proc() { Hitms(n, 0, ENDGAME); }