--- /dev/null
+
+! ******************************************************************
+! subway.inf
+! ----------
+! Add-on file for SPIRITWRAK
+! -- Contains Great Underground Subway system (trains and tunnels
+! and various denizens)
+! ******************************************************************
+
+! First, some globals (sigh)
+! Two for each train line -- one indicates 'direction' of train,
+! the second indicates the current 'location' of train.
+global PURPLELINE_dir = 0; ! 0 North, 1 South
+global PURPLELINE_loc = 1; ! 1-10, frostham to fublio
+global ORANGELINE_dir = 0; ! 0 West, 1 East
+global ORANGELINE_loc = 1; ! 1-10, Aragain to Gurth
+global GREENLINE_dir = 0; ! 0 North, 1 South
+global GREENLINE_loc = 1; ! 1-10, New Borphee to Miznia
+
+! (Subway stops in each city are named as part of the city in
+! caps, concat'd with "_GUSStation". All are (of course)
+! underground.
+
+Object FROSTHAM_GUSStation "Frostham GUS Station"
+ with description [;
+ print "You are standing ";
+ if (self hasnt general) {
+ give self general;
+ "in a dimly lit underground \
+ chamber. There seems \
+ to be a much larger room to the southeast, which is \
+ unfortunately almost completely blocked by a long metal \
+ barricade and gate. Stairs lead up to the outside.";
+ }
+ "at the entrance to the Frostham \
+ Great Underground Subway (GUS) station. The train \
+ platform lies past the gate to the southeast, or \
+ stairs lead up into the city.";
+ ],
+ name "stairs" "platform",
+ u_to FROSTHAM_GUSStop,
+ se_to FG_Gate,
+ before [;
+ Go:
+ if (noun==se_obj) {
+ if (FG_Gate_slot hasnt general)
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give FG_Gate_slot ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+
+Object ARAGAIN_GUSStation "Aragain GUS Station"
+ with description "You are standing at the entrance to the Aragain \
+Great Underground Subway (GUS) station. The train \
+platform lies past the gate to the southeast, or \
+stairs lead up into the city. Some lettering on the \
+wall reads ~TRANSFER STATION~.",
+ name "stairs" "platform",
+ u_to ARAGAIN_GUSStop,
+ se_to AG_Gate,
+ before [;
+ Go:
+ if (noun==se_obj) {
+ if (AG_Gate_slot hasnt general)
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give AG_Gate_slot ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+Object FUBLIO_GUSStation "Fublio Valley GUS Station"
+ with description "You are standing at the entrance to the \
+South Fublio Valley \
+Great Underground Subway (GUS) station. The train \
+platform lies past the gate to the southeast, or \
+stairs lead up into the city.",
+ name "stairs" "platform",
+ u_to FUBLIO_GUSStop,
+ se_to FublioG_Gate,
+ before [;
+ Go:
+ if (noun==se_obj) {
+ if (FublioG_Gate_slot hasnt general)
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give FublioG_Gate_slot ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+! (Orange stations - one)
+Object ANTHAR_GUSStation "Greater Anthar GUS Station"
+ with description "You are standing at the entrance to the Greater Anthar \
+Great Underground Subway (GUS) station. The train \
+platform lies past the gate to the south, or \
+stairs lead up into the city.",
+ name "stairs" "platform",
+ u_to ANTHAR_GUSStop,
+ s_to AntharG_Gate,
+ before [;
+ Go:
+ if (noun==s_obj) {
+ if (AntharG_Gate_slot hasnt general)
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give AntharG_Gate_slot ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+! (Green stations - three)
+Object GURTH_GUSStation "Gurth City GUS Station"
+ with description "You are standing at the entrance to the Gurth City \
+Great Underground Subway (GUS) station. The train \
+platform lies past the gate to the southwest, or \
+stairs lead up into the city. Some lettering on the \
+wall reads ~TRANSFER STATION~.",
+ name "stairs" "platform",
+ u_to GURTH_GUSStop,
+ sw_to GurthG_Gate,
+ before [;
+ Go:
+ if (noun==u_obj)
+ print "You are greeted by a light rain as you leave the \
+station.^";
+ if (noun==sw_obj) {
+ if (GurthG_Gate hasnt general) ! note diff
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give GurthG_Gate ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+Object BORPHEE_GUSStation "New Borphee GUS Station"
+ with description "You are standing at the entrance to the New Borphee \
+Great Underground Subway (GUS) station. The train \
+platform lies past the gate to the southwest, or \
+stairs lead up into the city.",
+ name "stairs" "platform",
+ u_to BORPHEE_GUSStop,
+ sw_to BorpheeG_Gate,
+ before [;
+ Go:
+ if (noun==u_obj)
+ print "You enter the city and are nearly \
+ flattened by crowds rushing past.^";
+ if (noun==sw_obj) {
+ if (BorpheeG_Gate_slot hasnt general)
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give BorpheeG_Gate_slot ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+Object MIZNIA_GUSStation "Miznia GUS Station"
+ with description "You are standing at the entrance to the Miznia \
+Great Underground Subway (GUS) station. The train \
+platform lies past the gate to the southwest, or \
+stairs lead up into the city.",
+ name "stairs" "platform",
+ u_to MIZNIA_GUSStop,
+ sw_to MizniaG_Gate,
+ before [;
+ Go:
+ if (noun==sw_obj) {
+ if (MizniaG_Gate_slot hasnt general)
+ "A strange buzzing noise sounds as you try \
+ to pass through the gate, and an invisible \
+ force blocks your way!";
+ else {
+ give MizniaG_Gate_slot ~general;
+ print "You saunter through the apparently open gate.^";
+ }
+ }
+ ],
+ has light;
+
+Object FROSTHAM_GUSPlatform "Frostham Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The east side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run south into a dark tunnel. \
+ Along one wall painted lettering \
+ reads ~FROSTHAM STATION~. \
+ A short walkway leads northwest, to a metal fence";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the east.";
+ else ".";
+ ],
+ name "tunnel",
+ nw_to FG_Gate,
+ s_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ e_to PURPLELINE_car,
+ in_to PURPLELINE_car,
+ before [;
+ Go:
+! if (noun == nw_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == e_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 2 or 3) {
+ give self general;
+ PURPLELINE_loc = 1;
+ PURPLELINE_dir = 1; ! will be heading south
+ "^Suddenly, from the south, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==10)
+ "^You hear a distant rumbling noise from the south.";
+ }
+ else {
+ if (self has general) {
+ if (PURPLELINE_loc == 2) {
+ give self ~general;
+ "^The train doors close, and the train rolls off \
+ to the south.";
+ }
+ else {
+ PURPLELINE_loc = 2;
+ "^A few exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+
+! (Classes for gates and slots)
+Class GUS_Gate_Class
+ with name "gate" "metal",
+ initial "A metal gate bisects the fence.",
+ door_dir nw_to,
+ door_to FROSTHAM_GUSPlatform,
+ before [;
+ Climb, JumpOver: "A subway worker yells ~Hey pal, no fare-jumpers!";
+ Open: "It looks like it's already open.";
+ Close: "There doesn't seem to be anything to close.";
+ Enter: "You'll have to walk in the appropriate direction to go through it.";
+ ],
+ description "It's an odd metal gate that only comes up to about \
+your waist. Odder still is the fact that there's \
+no door on the gate, just two metal sides",
+ has static door transparent open;
+Class GUS_Gate_Slot_Class
+ with name "slot" "metal" "thin" "small",
+ description "You see a rather small, thin slot that seems to be \
+almost cut into one of the metal sides of the gate.",
+ before [;
+ LetGo: "There's no way to get anything out of that tiny, \
+thin slot.";
+ Receive:
+ if (noun has is_coin) {
+ give self general;
+ remove noun; ! collection
+ "The coin slides into the slot with a satisfying thunk.";
+ }
+ "It doesn't look like that's going to fit into the slot.";
+ ],
+ size 1,
+ has scenery container open;
+
+
+Object FG_Gate "platform gate"
+ class GUS_Gate_Class,
+ with initial [;
+ if (location==FROSTHAM_GUSStation)
+ "A metal gate bisects the fence to the southeast.";
+ "A metal gate bisects the fence to the northwest.";
+ ],
+ door_dir [;
+ if (location==FROSTHAM_GUSStation)
+ return se_to;
+ return nw_to;
+ ],
+ door_to [;
+ if (location==FROSTHAM_GUSStation)
+ return FROSTHAM_GUSPlatform;
+ return FROSTHAM_GUSStation;
+ ],
+ before [;
+ Enter:
+ if (location==FROSTHAM_GUSStation) <<Go se_obj>>;
+ else <<Go nw_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == FROSTHAM_GUSStation)
+ ". There's a thin slot on one of the sides.";
+ else ".";
+ ],
+ found_in FROSTHAM_GUSStation FROSTHAM_GUSPlatform,
+;
+
+
+
+Object FG_Gate_slot "metal slot" FG_Gate
+ class GUS_Gate_Slot_Class
+ with description [;
+ if (location == FROSTHAM_GUSPlatform)
+ "You can't see any such thing.";
+ if (location == FROSTHAM_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+almost cut into one of the metal sides of the gate.";
+ ],
+ before [;
+ if (location == FROSTHAM_GUSPlatform)
+ "You can't see any such thing.";
+ ],
+;
+
+
+Object AG_Gate "platform gate"
+ class GUS_Gate_Class
+ with initial [;
+ if (location==ARAGAIN_GUSStation)
+ "A metal gate bisects the fence to the southeast.";
+ "A metal gate bisects the fence to the northwest.";
+ ],
+ door_dir [;
+ if (location==ARAGAIN_GUSStation)
+ return se_to;
+ return nw_to;
+ ],
+ door_to [;
+ if (location==ARAGAIN_GUSStation)
+ return ARAGAIN_GUSPlatform;
+ return ARAGAIN_GUSStation;
+ ],
+ before [;
+ Enter:
+ if (location==FROSTHAM_GUSStation) <<Go se_obj>>;
+ else <<Go nw_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == ARAGAIN_GUSStation)
+ ". There's a thin slot on one of the sides.";
+ else ".";
+ ],
+ found_in ARAGAIN_GUSStation ARAGAIN_GUSPlatform,
+;
+
+Object AG_Gate_slot "metal slot" AG_Gate
+ class GUS_Gate_Slot_Class
+ with description [;
+ if (location == ARAGAIN_GUSPlatform)
+ "You can't see any such thing.";
+ if (location == ARAGAIN_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+almost cut into one of the metal sides of the gate.";
+ ],
+ before [;
+ if (location == ARAGAIN_GUSPlatform)
+ "You can't see any such thing.";
+ ],
+;
+
+
+Object FublioG_Gate "platform gate"
+ class GUS_Gate_Class
+ with initial [;
+ if (location==FUBLIO_GUSStation)
+ "A metal gate bisects the fence to the southeast.";
+ "A metal gate bisects the fence to the northwest.";
+ ],
+ door_dir [;
+ if (location==FUBLIO_GUSStation)
+ return se_to;
+ return nw_to;
+ ],
+ door_to [;
+ if (location==FUBLIO_GUSStation)
+ return FUBLIO_GUSPlatform;
+ return FUBLIO_GUSStation;
+ ],
+ before [;
+ Enter:
+ if (location==FUBLIO_GUSStation) <<Go se_obj>>;
+ else <<Go nw_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == FUBLIO_GUSStation)
+ ". There's a thin slot on one of the sides.";
+ else ".";
+ ],
+ found_in FUBLIO_GUSStation FUBLIO_GUSPlatform,
+;
+
+Object FublioG_Gate_slot "metal slot" FublioG_Gate
+ class GUS_Gate_Slot_Class
+ with description [;
+ if (location == FUBLIO_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+ almost cut into one of the metal sides of the gate.";
+!! See if this works instead...
+ "You can't see any such thing.";
+ ],
+ before [;
+ if (location == FUBLIO_GUSPlatform)
+ "You can't see any such thing.";
+ ],
+;
+
+! (Orange gates (1))
+Object AntharG_Gate "platform gate"
+ class GUS_Gate_Class
+ with initial [;
+ if (location==ANTHAR_GUSStation)
+ "A metal gate bisects the fence to the south.";
+ "A metal gate bisects the fence to the north.";
+ ],
+ door_dir [;
+ if (location==ANTHAR_GUSStation)
+ return s_to;
+ return n_to;
+ ],
+ door_to [;
+ if (location==ANTHAR_GUSStation)
+ return ANTHAR_GUSPlatform;
+ return ANTHAR_GUSStation;
+ ],
+ before [;
+ Enter:
+ if (location==ANTHAR_GUSStation) <<Go s_obj>>;
+ else <<Go n_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == ANTHAR_GUSStation)
+ ". There's a thin slot on one of the sides.";
+ else ".";
+ ],
+ found_in ANTHAR_GUSStation ANTHAR_GUSPlatform,
+;
+
+Object AntharG_Gate_slot "metal slot" AntharG_Gate
+ class GUS_Gate_Slot_Class
+ with description [;
+ if (location == ANTHAR_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+ almost cut into one of the metal sides of the gate.";
+ "You can't see any such thing.";
+ ],
+ before [;
+ if (location == ANTHAR_GUSPlatform)
+ "You can't see any such thing.";
+ ],
+;
+
+
+! (Green gates (3))
+Object BorpheeG_Gate "platform gate"
+ class GUS_Gate_Class
+ with initial [;
+ if (location==BORPHEE_GUSStation)
+ "A metal gate bisects the fence to the southwest.";
+ "A metal gate bisects the fence to the northeast.";
+ ],
+ door_dir [;
+ if (location==BORPHEE_GUSStation)
+ return sw_to;
+ return ne_to;
+ ],
+ door_to [;
+ if (location==BORPHEE_GUSStation)
+ return BORPHEE_GUSPlatform;
+ return BORPHEE_GUSStation;
+ ],
+ before [;
+ Enter:
+ if (location == BORPHEE_GUSStation) <<Go sw_obj>>;
+ else <<Go ne_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == BORPHEE_GUSStation)
+ ". There's a thin slot on one of the sides.";
+ else ".";
+ ],
+ found_in BORPHEE_GUSStation BORPHEE_GUSPlatform,
+;
+
+Object BorpheeG_Gate_slot "metal slot" BorpheeG_Gate
+ class GUS_Gate_Slot_Class
+ with description [;
+ if (location == BORPHEE_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+ almost cut into one of the metal sides of the gate.";
+ "You can't see any such thing.";
+ ],
+ before [;
+ if (location == BORPHEE_GUSPlatform)
+ "You can't see any such thing.";
+ ],
+;
+
+! (NOTE: Gurth is different, read: broken)
+Object GurthG_Gate "platform gate"
+ class GUS_Gate_Class
+ with initial [;
+ if (location==GURTH_GUSStation)
+ "A metal gate bisects the fence to the southwest.";
+ "A metal gate bisects the fence to the northeast.";
+ ],
+ door_dir [;
+ if (location==GURTH_GUSStation)
+ return sw_to;
+ return ne_to;
+ ],
+ door_to [;
+ if (location==GURTH_GUSStation)
+ return GURTH_GUSPlatform;
+ return GURTH_GUSStation;
+ ],
+ before [;
+ Enter: if (location == GURTH_GUSStation) <<Go sw_obj>>;
+ else <<Go ne_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == GURTH_GUSStation)
+ ". There's a thin slot on one of the sides that looks \
+ slightly dented.";
+ else ".";
+ ],
+ found_in GURTH_GUSStation GURTH_GUSPlatform,
+;
+
+Object GurthG_Gate_slot "metal slot" GurthG_Gate
+ class GUS_Gate_Slot_Class
+ with name "dented",
+ description [;
+ if (location == GURTH_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+ almost cut into one of the metal sides of the gate. \
+ It looks slightly dented.";
+ "You can't see any such thing.";
+ ],
+ before [;
+ if (location == GURTH_GUSPlatform)
+ "You can't see any such thing.";
+ Receive:
+ if (noun has is_coin) {
+ give self general;
+ remove noun;
+ "The coin slides into the slot, but you hear a strange click \
+ almost immediately.^^\
+ A subway nymph suddenly appears. She looks at the gate \
+ disapprovingly. ~Broken again? I thought they \
+ just fixed it. Well, fine.~ She seems rather annoyed. \
+ ~We'll get someone to look at it, eventually. Bye!~ She \
+ disappears.";
+ }
+ if (noun==wire) {
+ if (self hasnt general)
+ "You poke the wire in the slot for a bit, but nothing \
+ happens.";
+ if (self has general) {
+ give self ~general;
+ Achieved(20);
+ give GurthG_Gate general;
+ "You poke around in the slot, and manage to free something! \
+ There is a solid thunk-like noise.";
+ }
+ }
+ "It doesn't look like that's going to fit into the slot.";
+ ],
+;
+
+Object MizniaG_Gate "platform gate"
+ class GUS_Gate_Class
+ with initial [;
+ if (location==MIZNIA_GUSStation)
+ "A metal gate bisects the fence to the southwest.";
+ "A metal gate bisects the fence to the northeast.";
+ ],
+ door_dir [;
+ if (location==MIZNIA_GUSStation)
+ return sw_to;
+ return ne_to;
+ ],
+ door_to [;
+ if (location==MIZNIA_GUSStation)
+ return MIZNIA_GUSPlatform;
+ return MIZNIA_GUSStation;
+ ],
+ before [;
+ Enter: if (location==MIZNIA_GUSStation) <<Go sw_obj>>;
+ else <<Go ne_obj>>;
+ ],
+ description [;
+ print "It's an odd metal gate that only comes up to about \
+ your waist. Odder still is the fact that there's \
+ no door on the gate, just two metal sides";
+ if (location == MIZNIA_GUSStation)
+ ". There's a thin slot on one of the sides.";
+ else ".";
+ ],
+ found_in MIZNIA_GUSStation MIZNIA_GUSPlatform,
+;
+
+Object MizniaG_Gate_slot "metal slot" MizniaG_Gate
+ class GUS_Gate_Slot_Class
+ with description [;
+ if (location == MIZNIA_GUSStation)
+ "You see a rather small, thin slot that seems to be \
+ almost cut into one of the metal sides of the gate.";
+ "You can't see any such thing.";
+ ],
+ before [;
+ if (location==MIZNIA_GUSPlatform)
+ "You can't see any such thing.";
+ ],
+;
+
+
+
+!Object FS_Platform_sign2 "laminated paper" FROSTHAM_GUSPlatform
+! with name "paper" "laminated" "safety",
+! initial "A small stiff-looking piece of paper is attached to the west wall.",
+! description "The paper reads: ^^\
+! GREAT UNDERGROUND SUBWAY STATION RULES:^
+! 1) No going onto tracks.^
+! 2) No going into tunnels on foot unless authorized.",
+! has static;
+
+Object train_tracks "train tracks"
+ with name "tracks" "train",
+ description "A pair of large metal train tracks.",
+ found_in FROSTHAM_GUSPlatform ARAGAIN_GUSPlatform FUBLIO_GUSPlatform
+ ARAGAIN_GUSPlatform2,
+ has scenery;
+
+
+Object ARAGAIN_GUSPlatform "Aragain Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The east side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run north and south into dark tunnels. \
+ Along one wall painted lettering \
+ reads ~ARAGAIN STATION~. \
+ A short walkway leads northwest, to a metal fence. \
+ There is also a stairway down here";
+ if (self has general)
+ ". In addition, there is a large train car sitting on the tracks \
+ to the east.";
+ else ".";
+ ],
+ name "tunnel" "tunnels" "stairway",
+ nw_to AG_Gate,
+ s_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ n_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ e_to PURPLELINE_car,
+ d_to ARAGAIN_GUSPlatform2,
+ in_to PURPLELINE_car,
+ before [;
+ Go:
+! if (noun == nw_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == e_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 3 or 5) {
+ give self general;
+ PURPLELINE_loc = 5;
+ PURPLELINE_dir = 1; ! will be heading south
+ "^Suddenly, from the north, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==2 or 4 or 6) {
+ give self general;
+ PURPLELINE_loc = 5;
+ PURPLELINE_dir = 0; ! will be heading north
+ "^Suddenly, from the south, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==9)
+ "^You hear a distant rumbling noise from the north.";
+ if (i==10)
+ "^You hear a distant rumbling noise from the south.";
+ }
+ else {
+ if (self has general) {
+ if (PURPLELINE_loc == 6) {
+ give self ~general;
+ "^The train doors close, and the train rolls off.";
+ }
+ else {
+ PURPLELINE_loc = 6;
+ "^A few exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+Object ARAGAIN_GUSPlatform2 "Aragain Train Platform (lower)"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The south side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run west into a dark tunnel. \
+ Along one wall painted lettering \
+ reads ~ARAGAIN STATION~. \
+ A set of stairs leads up out of the gloom";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the south.";
+ else ".";
+ ],
+ name "tunnel" "stairs",
+ w_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ s_to ORANGELINE_car,
+ in_to ORANGELINE_car,
+ u_to ARAGAIN_GUSPlatform,
+ before [;
+ Go:
+ if ((self hasnt general) &&
+ (noun == s_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 3 or 5) {
+ give self general;
+ ORANGELINE_loc = 9;
+ ORANGELINE_dir = 0; ! will be heading west
+ "^Suddenly, from the west, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and up \
+ the stairs.";
+ }
+ if (i==10)
+ "^You hear a distant rumbling noise from the west.";
+ }
+ else {
+ if (self has general) {
+ if (ORANGELINE_loc == 10) {
+ give self ~general;
+ "^The train doors close, and the train heads off \
+ to the west.";
+ }
+ else {
+ ORANGELINE_loc = 10;
+ "^A few people exit the train, and hurry up the stairs. \
+ You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+
+Object FUBLIO_GUSPlatform "Fublio Valley Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The east side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run north into a dark tunnel. \
+ Along one wall painted lettering \
+ reads ~FUBLIO VALLEY STATION~. \
+ A short walkway leads northwest, to a metal fence";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the east.";
+ else ".";
+ ],
+ name "tunnel",
+ nw_to FublioG_Gate,
+ n_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ e_to PURPLELINE_car,
+ in_to PURPLELINE_car,
+ before [;
+ Go:
+! if (noun == nw_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == e_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 3 or 4) {
+ give self general;
+ PURPLELINE_loc = 10;
+ PURPLELINE_dir = 0; ! will be heading north
+ "^Suddenly, from the north, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==10)
+ "^You hear a distant rumbling noise from the north.";
+ }
+ else {
+ if (self has general) {
+ if (PURPLELINE_loc == 9) {
+ give self ~general;
+ "^The train doors close, and the train rolls off \
+ to the north.";
+ }
+ else {
+ PURPLELINE_loc = 9;
+ "^A few people exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+
+! *** Orange line platforms
+
+
+Object GURTH_GUSPlatform2 "Gurth City Train Platform (lower)"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The south side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run east into a dark tunnel. \
+ Along one wall painted lettering \
+ reads ~GURTH CITY STATION~. \
+ A set of stairs leads up out of the gloom";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the south.";
+ else ".";
+ ],
+ name "tunnel" "stairs",
+ e_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ s_to ORANGELINE_car,
+ in_to ORANGELINE_car,
+ u_to GURTH_GUSPlatform,
+ before [;
+ Go:
+ if ((self hasnt general) &&
+ (noun == s_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 2 or 4) {
+ give self general;
+ ORANGELINE_loc = 1;
+ ORANGELINE_dir = 1; ! will be heading east
+ "^Suddenly, from the east, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and up \
+ the stairs.";
+ }
+ if (i==10)
+ "^You hear a distant rumbling noise from the east.";
+ }
+ else {
+ if (self has general) {
+ if (ORANGELINE_loc == 2) {
+ give self ~general;
+ "^The train doors close, and the train heads off \
+ to the east.";
+ }
+ else {
+ ORANGELINE_loc = 2;
+ "^A few people exit the train, and hurry up the stairs. \
+ You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+Object ANTHAR_GUSPlatform "Greater Anthar Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The south side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run east and west into dark tunnels. \
+ Along one wall painted lettering \
+ reads ~ANTHAR STATION~. \
+ A short walkway leads north, to a metal fence";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the south.";
+ else ".";
+ ],
+ name "tunnel" "tunnels" "walkway",
+ n_to AntharG_Gate,
+ e_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ w_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ s_to ORANGELINE_car,
+ in_to ORANGELINE_car,
+ before [;
+ Go:
+! if (noun == n_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == s_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 4 or 5) {
+ give self general;
+ ORANGELINE_loc = 5;
+ ORANGELINE_dir = 1; ! will be heading east
+ "^Suddenly, from the west, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==2 or 3 or 6) {
+ give self general;
+ ORANGELINE_loc = 5;
+ ORANGELINE_dir = 0; ! will be heading west
+ "^Suddenly, from the east, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==9)
+ "^You hear a distant rumbling noise from the east.";
+ if (i==10)
+ "^You hear a distant rumbling noise from the west.";
+ }
+ else {
+ if (self has general) {
+ if (ORANGELINE_loc == 6) {
+ give self ~general;
+ "^The train doors close, and the train rolls off.";
+ }
+ else {
+ ORANGELINE_loc = 6;
+ "^A few people exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+
+! *** Green line platforms
+
+Object BORPHEE_GUSPlatform "New Borphee Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The west side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run south into a dark tunnel. \
+ Along one wall painted lettering \
+ reads ~NEW BORPHEE STATION~. \
+ A short walkway leads northeast, to a metal fence";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the west.";
+ else ".";
+ ],
+ name "tunnel" "walkway",
+ ne_to BorpheeG_Gate,
+ s_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ w_to GREENLINE_car,
+ in_to GREENLINE_car,
+ before [;
+ Go:
+! if (noun == ne_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == w_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 2 or 3) {
+ give self general;
+ GREENLINE_loc = 1;
+ GREENLINE_dir = 1; ! will be heading south
+ "^Suddenly, from the south, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==10)
+ "^You hear a distant rumbling noise from the south.";
+ }
+ else {
+ if (self has general) {
+ if (GREENLINE_loc == 2) {
+ give self ~general;
+ "^The train doors close, and the train rolls off \
+ to the south.";
+ }
+ else {
+ GREENLINE_loc = 2;
+ "^A few people exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+Object MIZNIA_GUSPlatform "Miznia Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The west side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run north into a dark tunnel. \
+ Along one wall painted lettering \
+ reads ~MIZNIA STATION~. \
+ A short walkway leads northeast, to a metal fence";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the west.";
+ else ".";
+ ],
+ name "tunnel" "walkway",
+ ne_to MizniaG_Gate,
+ n_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ w_to GREENLINE_car,
+ in_to GREENLINE_car,
+ before [;
+ Go:
+! if (noun == ne_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == w_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 2 or 3) {
+ give self general;
+ GREENLINE_loc = 9;
+ GREENLINE_dir = 0; ! will be heading south
+ "^Suddenly, from the north, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==10)
+ "^You hear a distant rumbling noise from the north.";
+ }
+ else {
+ if (self has general) {
+ if (GREENLINE_loc == 10) {
+ give self ~general;
+ "^The train doors close, and the train rolls off \
+ to the north.";
+ }
+ else {
+ GREENLINE_loc = 10;
+ "^A few people exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+Object GURTH_GUSPlatform "Gurth City Train Platform"
+ with description [;
+ print "You are standing in a long underground \
+ chamber. The west side of the room contains a \
+ lowered set of what appear to be train tracks. \
+ The tracks run north and south into dark tunnels. \
+ Along one wall painted lettering \
+ reads ~GURTH CITY STATION~. \
+ A short walkway leads northeast, to a metal fence. \
+ There is also a stairway down here";
+ if (self has general)
+ ". There is a large train car sitting on the tracks \
+ to the west.";
+ else ".";
+ ],
+ name "tunnel" "tunnels" "walkway" "stairway",
+ ne_to GurthG_Gate,
+ s_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ n_to "A helpful subway worker says ~Hey pal, get outa there!~",
+ w_to GREENLINE_car,
+ d_to GURTH_GUSPlatform2,
+ in_to GREENLINE_car,
+ before [;
+ Go:
+! if (noun == ne_obj)
+! print "You saunter through the apparently open gate.^";
+ if ((self hasnt general) &&
+ (noun == w_obj or in_obj))
+ "You'd fall onto the tracks if you went that way.";
+ ],
+ each_turn [ i ;
+ if (self hasnt general) {
+ i = random(10);
+ if (i==1 or 3) {
+ give self general;
+ GREENLINE_loc = 5;
+ GREENLINE_dir = 1; ! will be heading south
+ "^Suddenly, from the north, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==2 or 4) {
+ give self general;
+ GREENLINE_loc = 5;
+ GREENLINE_dir = 0; ! will be heading north
+ "^Suddenly, from the south, a train emerges from \
+ the tunnel! It pulls to a screeching halt, the \
+ doors open, and several people rush out and exit \
+ the station.";
+ }
+ if (i==9)
+ "^You hear a distant rumbling noise from the north.";
+ if (i==10)
+ "^You hear a distant rumbling noise from the south.";
+ }
+ else {
+ if (self has general) {
+ if (GREENLINE_loc == 6) {
+ give self ~general;
+ "^The train doors close, and the train rolls off.";
+ }
+ else {
+ GREENLINE_loc = 6;
+ "^A few people exit the train, and hurry out \
+ of the station. You hear a voice from inside the \
+ train say, ~Doors will be closing, please stand \
+ clear.~";
+ }
+ }
+ }
+ ],
+ has light;
+
+! **************************
+! TRAINS
+! Some notes:
+! While it may seem more logical to implement the trains with
+! an 'enterable' property, I decided to implement them as
+! 'rooms' instead. Mainly, I did this because:
+! 1) I wanted total control of the "movement" of the train.
+! 2) I wanted to fill the cars with various people/things.
+! 3) I wanted seats on the train :)
+! Again, this is all probably possible with 'vehicles', I
+! just saw things slightly differently.
+! Be warned, the logic in moving the train is probably one
+! of the more unfathomable things I've ever coded.
+! **************************
+
+! *** The purple line (Eastlands)
+
+Object PURPLELINE_car "Subway car"
+ with description "You are in an underground train car. Various \
+ people fill the train, some in uncomfortable-looking seats.",
+ name "car" "people",
+ w_to FROSTHAM_GUSPlatform, ! we adjust this, see below
+ out_to FROSTHAM_GUSPlatform,
+ after [;
+ Go:
+ if (noun == e_obj or in_obj) {
+ ! determine boarding location, direction train was
+ ! traveling
+ give self general; ! we're off and moving...
+ print "^You enter the train car. The doors slam shut behind you.^";
+ if (PURPLELINE_loc == 1 or 2) {
+ ! Frostham, south
+ give FROSTHAM_GUSPlatform ~general;
+ PURPLELINE_loc = 3; ! leaving
+ }
+ if (PURPLELINE_loc == 5 or 6) {
+ ! Aragain
+ ! give ARAGAIN_GUSPlatform ~general;
+ if (PURPLELINE_dir == 1) {
+ ! South
+ PURPLELINE_loc = 7;
+ }
+ else {
+ ! North
+ PURPLELINE_loc = 4;
+ }
+ }
+ if (PURPLELINE_loc == 9 or 10) {
+ ! Fublio, north
+ ! give FUBLIO_GUSPlatform ~general;
+ PURPLELINE_loc = 8;
+ }
+ }
+ ],
+ before [;
+ Go:
+ if (noun == w_obj or out_obj) {
+ if (self has general)
+ "The train is moving right now. Better wait til \
+ it stops to get off.";
+ if (thug in self)
+ "As you try to get off, the thug gets in your way. \
+ ~Going somewhere, Padre?~.";
+ }
+ ],
+ each_turn [;
+ ! check location of train, print appropriate msg,
+ ! and increment location of train, given direction
+ if (PURPLELINE_loc == 1) {
+ ! reached Frostham, dir = S, not moving
+ give self ~general;
+ give FROSTHAM_GUSPlatform general;
+ PURPLELINE_dir = 1;
+ PURPLELINE_loc = 2;
+ PURPLELINE_car.w_to = FROSTHAM_GUSPlatform;
+ PURPLELINE_car.out_to = FROSTHAM_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Frostham station, watch your \
+ step please.~";
+ }
+ if (PURPLELINE_loc == 2) {
+ ! still in Frostham, not moving
+ PURPLELINE_loc = 3;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (PURPLELINE_loc == 3) {
+ if (PURPLELINE_dir == 1) {
+ ! moving away from Frostham
+ give self general;
+ give FROSTHAM_GUSPlatform ~general;
+ PURPLELINE_loc = 4;
+ "^The train starts to move, quickly exiting the station \
+ going south.";
+ }
+ if (PURPLELINE_dir == 0) {
+ ! moving towards Frostham
+ PURPLELINE_loc = 1; ! We will 'arrive' in Frostham next
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (PURPLELINE_loc == 4) {
+ if (PURPLELINE_dir == 0) {
+ ! We're leaving Aragain
+ PURPLELINE_loc = 3;
+ give self general;
+ give ARAGAIN_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going north.";
+ }
+ if (PURPLELINE_dir == 1) {
+ PURPLELINE_loc = 5;
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (PURPLELINE_loc == 5) {
+ ! reached Aragain, stop the train
+ give self ~general;
+ give ARAGAIN_GUSPlatform general;
+ PURPLELINE_loc = 6; ! we'll be stopping for 1 turn
+ PURPLELINE_car.w_to = ARAGAIN_GUSPlatform;
+ PURPLELINE_car.out_to = ARAGAIN_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Aragain station, watch your \
+ step please.~";
+ }
+ if (PURPLELINE_loc == 6) {
+ ! about to leave Aragain station
+ if (PURPLELINE_dir == 0)
+ PURPLELINE_loc = 4;
+ else
+ PURPLELINE_loc = 7;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (PURPLELINE_loc == 7) {
+ if (PURPLELINE_dir == 1) {
+ ! We're leaving Aragain
+ PURPLELINE_loc = 8;
+ give self general;
+ give ARAGAIN_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going south.";
+ }
+ if (PURPLELINE_dir == 0) {
+ PURPLELINE_loc = 5; ! we will arrive in Aragain shortly...
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (PURPLELINE_loc == 8) {
+ if (PURPLELINE_dir == 0) {
+ ! we're leaving Fublio
+ PURPLELINE_loc = 7;
+ give self general;
+ give FUBLIO_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going north.";
+ }
+ if (PURPLELINE_dir == 1) {
+ PURPLELINE_loc = 10; ! will arrive in Fublio (BACKWARDS!!)
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (PURPLELINE_loc == 9) {
+ ! still waiting in Fublio
+ PURPLELINE_loc = 8;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (PURPLELINE_loc == 10) {
+ ! arriving in Fublio
+ PURPLELINE_loc = 9;
+ PURPLELINE_dir = 0; ! north
+ give self ~general;
+ give FUBLIO_GUSPlatform general;
+ PURPLELINE_car.w_to = FUBLIO_GUSPlatform;
+ PURPLELINE_car.out_to = FUBLIO_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Fublio station, watch your \
+ step please.~";
+ }
+ ],
+ has light;
+
+Class Train_Car_Seat_Class
+ with name "seat" "seats",
+ description "There seem to be a few seats that haven't been taken.",
+ before [;
+ Enter:
+ if (random(10) < 3)
+ "As you attempt to grab an open seat, someone rudely \
+ beats you to it.";
+ ],
+has scenery enterable;
+
+
+Object PURPLELINE_car_seats "subway seat" PURPLELINE_car
+ class Train_Car_Seat_Class
+ with before [;
+ Search:
+ if (self hasnt general) {
+ give self general;
+ move c9 to player;
+ "Good fortune is your friend! You notice a \
+forgotten coin stuck in a seat crack, and fend off two \
+passengers to grab it.";
+ }
+ ],
+;
+
+
+! *** ORANGE LINE CAR (Gurth to Aragain)
+
+
+Object ORANGELINE_car "Subway car"
+ with description "You are in an underground train car. Various \
+ people fill the train, some in uncomfortable-looking seats.",
+ name "car" "people",
+ n_to ANTHAR_GUSPlatform, ! we adjust this, see below
+ out_to ANTHAR_GUSPlatform,
+ after [;
+ Go:
+ if (noun == s_obj or in_obj) {
+ ! determine boarding location, direction train was
+ ! traveling
+ give self general; ! we're off and moving...
+ print "^You squeeze onto the train car. The doors close behind you.^";
+ if (ORANGELINE_loc == 1 or 2) {
+ ! Gurth, east
+ give GURTH_GUSPlatform2 ~general;
+ ORANGELINE_loc = 3; ! leaving
+ }
+ if (ORANGELINE_loc == 5 or 6) {
+ ! Anthar
+ give ANTHAR_GUSPlatform ~general;
+ if (ORANGELINE_dir == 1) {
+ ! east
+ ORANGELINE_loc = 7;
+ }
+ else {
+ ! west
+ ORANGELINE_loc = 4;
+ }
+ }
+ if (ORANGELINE_loc == 9 or 10) {
+ ! Aragain, west
+ give ARAGAIN_GUSPlatform2 ~general;
+ ORANGELINE_loc = 8;
+ }
+ }
+ ],
+ before [;
+ Go:
+ if (noun == n_obj or out_obj) {
+ if (self has general)
+ "The train is moving right now. Better wait til \
+ it stops to get off.";
+ }
+ ],
+ each_turn [;
+ ! check location of train, print appropriate msg,
+ ! and increment location of train, given direction
+ if (ORANGELINE_loc == 1) {
+ ! reached Gurth, dir = S, not moving
+ give self ~general;
+ give GURTH_GUSPlatform2 general;
+ ORANGELINE_dir = 1;
+ ORANGELINE_loc = 2;
+ ORANGELINE_car.n_to = GURTH_GUSPlatform2;
+ ORANGELINE_car.out_to = GURTH_GUSPlatform2;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Gurth City station, watch your \
+ step please.~";
+ }
+ if (ORANGELINE_loc == 2) {
+ ! still in Gurth, not moving
+ ORANGELINE_loc = 3;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (ORANGELINE_loc == 3) {
+ if (ORANGELINE_dir == 1) {
+ ! moving away from Gurth
+ give self general;
+ give GURTH_GUSPlatform2 ~general;
+ ORANGELINE_loc = 4;
+ "^The train starts to move, quickly exiting the station \
+ going east.";
+ }
+ if (ORANGELINE_dir == 0) {
+ ! moving towards Gurth
+ ORANGELINE_loc = 1; ! We will 'arrive' in Gurth next
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (ORANGELINE_loc == 4) {
+ if (ORANGELINE_dir == 0) {
+ ! We're leaving Anthar
+ ORANGELINE_loc = 3;
+ give self general;
+ give ANTHAR_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going west.";
+ }
+ if (ORANGELINE_dir == 1) {
+ ORANGELINE_loc = 5;
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (ORANGELINE_loc == 5) {
+ ! reached Anthar, stop the train
+ give self ~general;
+ give ANTHAR_GUSPlatform general;
+ ORANGELINE_loc = 6; ! we'll be stopping for 1 turn
+ ORANGELINE_car.n_to = ANTHAR_GUSPlatform;
+ ORANGELINE_car.out_to = ANTHAR_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Greater Anthar station, watch your \
+ step please.~";
+ }
+ if (ORANGELINE_loc == 6) {
+ ! about to leave Anthar station
+ if (ORANGELINE_dir == 0)
+ ORANGELINE_loc = 4;
+ else
+ ORANGELINE_loc = 7;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (ORANGELINE_loc == 7) {
+ if (ORANGELINE_dir == 1) {
+ ! We're leaving Anthar
+ ORANGELINE_loc = 8;
+ give self general;
+ give ANTHAR_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going east.";
+ }
+ if (ORANGELINE_dir == 0) {
+ ORANGELINE_loc = 5; ! we will arrive in anthar shortly...
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (ORANGELINE_loc == 8) {
+ if (ORANGELINE_dir == 0) {
+ ! we're leaving Aragain
+ ORANGELINE_loc = 7;
+ give self general;
+ give ARAGAIN_GUSPlatform2 ~general;
+ "^The train starts to move, quickly exiting the station \
+ going west.";
+ }
+ if (ORANGELINE_dir == 1) {
+ ORANGELINE_loc = 9; ! will arrive in Aragain
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (ORANGELINE_loc == 10) {
+ ! still waiting in Aragain
+ ORANGELINE_loc = 8;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (ORANGELINE_loc == 9) {
+ ! arriving in Aragain
+ ORANGELINE_loc = 10;
+ ORANGELINE_dir = 0; ! west
+ give self ~general;
+ give ARAGAIN_GUSPlatform2 general;
+ ORANGELINE_car.n_to = ARAGAIN_GUSPlatform2;
+ ORANGELINE_car.out_to = ARAGAIN_GUSPlatform2;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Aragain station, watch your \
+ step please.~";
+ }
+ ],
+ has light;
+
+Object ORANGELINE_car_seats "subway seat" ORANGELINE_car
+ class Train_Car_Seat_Class
+ with before [;
+ Search:
+ if (self hasnt general) {
+ give self general;
+ move c10 to player;
+ "Good fortune is your friend! You notice a \
+forgotten coin stuck in a seat crack, and fend off two \
+passengers to grab it.";
+ }
+ ],
+;
+
+
+! *** GREEN LINE (Borphee to Miznia)
+
+Object GREENLINE_car "Subway car"
+ with description "You are in an underground train car. Various \
+ people fill the train, some in uncomfortable-looking seats.",
+ name "car" "people",
+ e_to BORPHEE_GUSPlatform, ! we adjust this, see below
+ out_to BORPHEE_GUSPlatform,
+ after [;
+ Go:
+ if (noun == w_obj or in_obj) {
+ ! determine boarding location, direction train was
+ ! traveling
+ give self general; ! we're off and moving
+ print "^You shove your way onto train car. The doors close behind you.^";
+ if (GREENLINE_loc == 1 or 2) {
+ ! Borphee, south
+ give BORPHEE_GUSPlatform ~general;
+ GREENLINE_loc = 3; ! leaving
+ }
+ if (GREENLINE_loc == 5 or 6) {
+ ! Gurth
+ give GURTH_GUSPlatform ~general;
+ if (GREENLINE_dir == 1) {
+ ! South
+ GREENLINE_loc = 7;
+ }
+ else {
+ ! North
+ GREENLINE_loc = 4;
+ }
+ }
+ if (GREENLINE_loc == 9 or 10) {
+ ! Miznia, north
+ give MIZNIA_GUSPlatform ~general;
+ GREENLINE_loc = 8;
+ }
+ }
+ ],
+ before [;
+ Go:
+ if (noun == e_obj or out_obj) {
+ if (self has general)
+ "The train is moving right now. Better wait til \
+ it stops to get off.";
+ if (yupple in self)
+ "As you try to get off, the yupple jumps up and gets in your \
+ way. ~Wait, wait, we have so much to talk about!~.";
+ }
+ ],
+ each_turn [;
+ ! check location of train, print appropriate msg,
+ ! and increment location of train, given direction
+ if (GREENLINE_loc == 1) {
+ ! reached Borphee, dir = S, not moving
+ give self ~general;
+ give BORPHEE_GUSPlatform general;
+ GREENLINE_dir = 1;
+ GREENLINE_loc = 2;
+ GREENLINE_car.e_to = BORPHEE_GUSPlatform;
+ GREENLINE_car.out_to = BORPHEE_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~New Borphee station, watch your \
+ step please.~";
+ }
+ if (GREENLINE_loc == 2) {
+ ! still in Borphee, not moving
+ GREENLINE_loc = 3;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (GREENLINE_loc == 3) {
+ if (GREENLINE_dir == 1) {
+ ! moving away from Borphee
+ give self general;
+ give BORPHEE_GUSPlatform ~general;
+ GREENLINE_loc = 4;
+ "^The train starts to move, quickly exiting the station \
+ going south.";
+ }
+ if (GREENLINE_dir == 0) {
+ ! moving towards BORPHEE
+ GREENLINE_loc = 1;
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (GREENLINE_loc == 4) {
+ if (GREENLINE_dir == 0) {
+ ! We're leaving gurth
+ GREENLINE_loc = 3;
+ give self general;
+ give GURTH_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going north.";
+ }
+ if (GREENLINE_dir == 1) {
+ GREENLINE_loc = 5;
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (GREENLINE_loc == 5) {
+ ! reached Gurth, stop the train
+ give self ~general;
+ give GURTH_GUSPlatform general;
+ GREENLINE_loc = 6; ! we'll be stopping for 1 turn
+ GREENLINE_car.e_to = GURTH_GUSPlatform;
+ GREENLINE_car.out_to = GURTH_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Gurth City station, watch your \
+ step please.~";
+ }
+ if (GREENLINE_loc == 6) {
+ ! about to leave gurth station
+ if (GREENLINE_dir == 0)
+ GREENLINE_loc = 4;
+ else
+ GREENLINE_loc = 7;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (GREENLINE_loc == 7) {
+ if (GREENLINE_dir == 1) {
+ ! We're leaving gurth
+ GREENLINE_loc = 8;
+ give self general;
+ give GURTH_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going south.";
+ }
+ if (GREENLINE_dir == 0) {
+ GREENLINE_loc = 5; ! we will arrive in gurth shortly...
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (GREENLINE_loc == 8) {
+ if (GREENLINE_dir == 0) {
+ ! we're leaving Miznia
+ GREENLINE_loc = 7;
+ give self general;
+ give MIZNIA_GUSPlatform ~general;
+ "^The train starts to move, quickly exiting the station \
+ going north.";
+ }
+ if (GREENLINE_dir == 1) {
+ GREENLINE_loc = 9;
+ "^The train rumbles as it moves.";
+ }
+ }
+ if (GREENLINE_loc == 10) {
+ ! still waiting in Miznia
+ GREENLINE_loc = 8;
+ "^A voice overhead says ~Doors will be closing, please \
+ stand clear.~";
+ }
+ if (GREENLINE_loc == 9) {
+ ! arriving in Miznia
+ GREENLINE_loc = 10;
+ GREENLINE_dir = 0; ! north
+ give self ~general;
+ give MIZNIA_GUSPlatform general;
+ GREENLINE_car.e_to = MIZNIA_GUSPlatform;
+ GREENLINE_car.out_to = MIZNIA_GUSPlatform;
+ "^The train suddenly lurches to a stop! A voice from \
+ somewhere overhead says ~Miznia station, watch your \
+ step please.~";
+ }
+ ],
+ has light;
+
+Object GREENLINE_car_seats "subway seat" GREENLINE_car
+ class Train_Car_Seat_Class
+ with before [;
+ Search:
+ if (self hasnt general) {
+ give self general;
+ move c11 to player;
+ "Good fortune is your friend! You notice a \
+forgotten coin stuck in a seat crack, and fend off two \
+passengers to grab it.";
+ }
+ ],
+;
+
+
+! *** A fake scenery item, to describe the subway cars from outside ***
+Object subway_car_fake "subway car"
+ with name "car" "train",
+ description [;
+ print "It's a rather large, sleek-looking train car, oddly colored ";
+ if (((location==FROSTHAM_GUSPlatform) && (FROSTHAM_GUSPlatform has general)) ||
+ ((location==ARAGAIN_GUSPlatform) && (ARAGAIN_GUSPlatform has general)) ||
+ ((location==FUBLIO_GUSPlatform) && (FUBLIO_GUSPlatform has general)))
+ "purple.";
+ if (((location==ANTHAR_GUSPlatform) && (ANTHAR_GUSPlatform has general)) ||
+ ((location==ARAGAIN_GUSPlatform2) && (ARAGAIN_GUSPlatform2 has general)) ||
+ ((location==GURTH_GUSPlatform2) && (GURTH_GUSPlatform2 has general)))
+ "orange.";
+ if (((location==BORPHEE_GUSPlatform) && (BORPHEE_GUSPlatform has general)) ||
+ ((location==GURTH_GUSPlatform) && (GURTH_GUSPlatform has general)) ||
+ ((location==MIZNIA_GUSPlatform) && (MIZNIA_GUSPlatform has general)))
+ "green.";
+ "You can't see any such thing.";
+ ],
+ found_in FROSTHAM_GUSPlatform ARAGAIN_GUSPlatform FUBLIO_GUSPlatform
+ ANTHAR_GUSPlatform ARAGAIN_GUSPlatform2 GURTH_GUSPlatform2
+ BORPHEE_GUSPlatform GURTH_GUSPlatform MIZNIA_GUSPlatform,
+ before [;
+ Enter:
+ "A subway nymph suddenly appears. ~Remember passengers, to \
+ board the subway cars, you just have to go 'in', or in the \
+ appropriate direction of the car. Bye!~";
+ ],
+ has scenery;
+
+Object metal_fence "metal fence"
+ with name "fence" "barricade",
+ description "It looks like a smooth metal fence.",
+ before [;
+ Climb, JumpOver:
+ "A subway worker yells ~Hey pal, no fare-jumpers!";
+ ],
+ found_in FROSTHAM_GUSPlatform ARAGAIN_GUSPlatform FUBLIO_GUSPlatform
+ FROSTHAM_GUSStation ARAGAIN_GUSStation FUBLIO_GUSStation
+ ANTHAR_GUSPlatform BORPHEE_GUSPlatform GURTH_GUSPlatform MIZNIA_GUSPlatform
+ ANTHAR_GUSStation BORPHEE_GUSStation GURTH_GUSStation MIZNIA_GUSStation,
+ has scenery;
+
+
+! **************************
+! People/denizens/creatures
+! **************************
+
+! Thug, on PURPLE LINE
+Object thug "sinister-looking thug" PURPLELINE_car
+ with name "thug" "hoodlum" "Davey",
+ description "A thug, clearly. Some scrapper with an attitude, \
+ and the desire to use it.",
+ each_turn [ i ;
+ if (self hasnt general) {
+ give self general;
+ "^The sinister-looking thug notices you from the back \
+ of the car, and approaches. ~Well, well, well,~ he \
+ says, ~what do we have here?~.";
+ }
+ i = random(4);
+ if (i==1)
+ "^The thug pokes you in the ribs.";
+ if (i==2)
+ "^The thug snarls at you. ~Hey, I'm talking to you, \
+ Preacher-man.~";
+ if (i==3)
+ "^The thug tries to act friendly, and fails.";
+ if (i==4)
+ "^The thug scowls. ~You gonna tell me the error of \
+ my ways, Padre?~";
+ ],
+ life [;
+ Attack:
+ "As you move to show the rake a lesson, you notice \
+ several more thugs in the background, eyeing your every \
+ move. The thug smiles as you back-off, cautiously.";
+ default: "The thug is too busy being sinister.";
+ ],
+ before [;
+ Cast:
+ if (the_spell_was == espnis_spell) {
+ remove thug;
+ "You begin to extol the virtues of bedtime prayers, \
+ and the thug starts to yawn. Soon, his eyes blink \
+ slowly, and before long, he nods off to sleep! Two \
+ subway police officers, hiding until now, get up the \
+ nerve to capture the snoring thug, and drag him \
+ off, disappearing into the throng of people.";
+ }
+ if (the_spell_was == foblub_spell) {
+ "You give the thug a timely sermon on the \
+folly of crime in a moral society. He seems momentarily \
+fascinated. Too bad he wasn't actually sitting in anything.";
+ }
+ ],
+ has animate;
+
+! Annoying Yupple, on GREEN LINE (kinda a cross between a yuppie and a yipple)
+Object yupple "annoying yupple" GREENLINE_car
+ with name "yupple" "annoying",
+ description "A young yupple, immaculately dressed in a pinstripe \
+ three-piece suit and tie.",
+ article "an",
+ each_turn [ i ;
+ if (self hasnt general) {
+ give self general;
+ "^The annoying-looking yupple notices you from the back \
+ of the car, and approaches. ~A priest,~ he \
+ says, ~Just the person I was looking for.~ He \
+ squeezes into a seat near you.";
+ }
+ i = random(4);
+ if (i==1)
+ "^The yupple talks unceasingly about rainfall in some \
+ place called ~the Amazon basin~.";
+ if (i==2)
+ "^The yupple smiles brightly. ~There's so much I have to \
+ talk about!~";
+ if (i==3)
+ "^The yupple drones on about the science behind large \
+ corporate takeovers.";
+ if (i==4)
+ "^The yupple laughs -- a sound somewhat like a snoring \
+ bloodworm. ~So the guy says, 'I thought you meant my _wife_.' \
+ Get it? Wife?~";
+ ],
+ life [;
+ Attack:
+ "Much as you'd like to, that's just something the \
+ Order would probably frown upon.";
+ ],
+ before [;
+ Cast:
+ if (the_spell_was == espnis_spell) {
+ "You give a sermon on the dangers of \
+improper bathtub caulking, but the yupple seems quite \
+fascinated. ~That reminds me of...~ You cringe.";
+ }
+ if (the_spell_was == foblub_spell) {
+ remove self;
+ "You draw a stunning parallel between corporate \
+morality and monarchy ruling. The yupple's jaw drops. ~I've got \
+to tell my boss that,~ he says, and tries to leave his seat, \
+but finds himself stuck fast. Several passengers nearby \
+take the opportunity to remove the yupple (seat included) to \
+a different part of the train.";
+ }
+ ],
+ has animate;
+
+
+! **************************
+! misc objects
+! **************************
+
+Object c9 "coin" class coin_class;
+Object c10 "coin" class coin_class;
+Object c11 "coin" class coin_class;
+
+! (Some common objects associated with GUS)
+Object GUS_sign "Sign"
+ with name "sign" "circular" "pole" "GUS",
+ initial "Standing on a tall pole next to the stairs is \
+ a circular sign.",
+ description "The sign reads ~GUS~, and has an arrow \
+ pointing down.",
+ found_in FROSTHAM_GUSStop ARAGAIN_GUSStop ANTHAR_GUSStop
+ FUBLIO_GUSStop BORPHEE_GUSStop MIZNIA_GUSStop
+ GURTH_GUSStop,
+ has static;
+
+
+Object GUS_brochure "subway brochure" FROSTHAM_Governer1
+ with name "brochure" "subway" "GUS",
+ description "\
+ ~The Great Underground Subway~^^
+ Adventurers who really need to get where they're going \
+ in a hurry are going to love GUS! The new underground \
+ high-speed rail system can be your personal ride to the \
+ major travel points in Quendor, for just one mere zorkmid! \
+ For Eastland travel to Frostham, Aragain and Fublio Valley, \
+ the Purple line is at your service! For Westland travel \
+ to New Borphee, Gurth City and Miznia, just jump on board \
+ the Green line! And for you folks who need to get across \
+ the Great Sea in a hurry, don't forget the Orange line, \
+ stopping off at Aragain, Anthar and Gurth City! Remember, \
+ there's no costs for transferring between lines either. \
+ So don't delay, take the GUS today!",
+ ! weight 5,
+ size 10,
+;
+
+Object newspaper "newspaper" PURPLELINE_car
+ with name "newspaper" "paper",
+ initial "There's a discarded newspaper in a seat nearby.",
+ description "A copy of ~The Fublio Tribune~, with \
+ news, sports and feature sections to read about.",
+ before
+ [ w1; Consult:
+ if (consult_words > 1)
+ "Try reading about 'news', 'sports' or 'features'.";
+ wn = consult_from; w1 = NextWord();
+ switch (w1) {
+ 'news', 'headline', 'headlines':
+ "The news section has three major stories. \
+The headliner is the continued failure to resolve peace in the \
+Kobold war in southern Egreth. Recently, various troops have \
+been cut-off from the main camps by clever kobold raiding groups. \
+^^A second story details the shocking death of a GUE Tech student \
+found in the subway tunnels in Gurth City Station, the apparent \
+victim of a GUS train. ~Don't know how he got in there.~ a \
+subway worker is quoted as saying.^^\
+Finally, a sad local news story about a nice couple in Fublio \
+valley who recently were victims of the kidnaping of their son. No \
+leads as of yet.";
+ 'sports':
+ "Apparently, the golem brothers at Flathead \
+Stadium have amassed an amazing 322-0 win streak.";
+ 'features', 'feature':
+ "The paper points out that culture seekers \
+should check out the newly discovered Leonardo Flathead \
+painting on exhibit at the Royal Museum.";
+ 'ads', 'classified':
+ "~FOR SALE: A new IF game -- 'SPIRITWRAK'. \
+ Price: $0.00~";
+ 'comics', 'funnies':
+ "No comics section. Bummer.";
+ default: "You can't find anything in the paper about that.";
+ }
+ ],
+ ! weight 15,
+ size 15,
+;
+
+! **************************
+! spells & scrolls
+! **************************