Upgrade to GPLv3
[spiritwrak.git] / src / SUBWAY.INF
1
2 ! ******************************************************************
3 ! subway.inf
4 ! ----------
5 ! Add-on file for SPIRITWRAK
6 ! -- Contains Great Underground Subway system (trains and tunnels 
7 !    and various denizens)
8 ! ******************************************************************
9
10 ! First, some globals (sigh)
11 ! Two for each train line -- one indicates 'direction' of train,
12 ! the second indicates the current 'location' of train.
13 global PURPLELINE_dir = 0;  ! 0 North, 1 South
14 global PURPLELINE_loc = 1;  ! 1-10, frostham to fublio
15 global ORANGELINE_dir = 0;  ! 0 West, 1 East
16 global ORANGELINE_loc = 1;  ! 1-10, Aragain to Gurth 
17 global GREENLINE_dir = 0; ! 0 North, 1 South
18 global GREENLINE_loc = 1; ! 1-10, New Borphee to Miznia
19
20 ! (Subway stops in each city are named as part of the city in
21 !  caps, concat'd with "_GUSStation".  All are (of course)
22 ! underground.
23
24 Object FROSTHAM_GUSStation "Frostham GUS Station"
25    with description [;
26          print "You are standing ";
27          if (self hasnt general) {
28            give self general; 
29            "in a dimly lit underground \
30            chamber. There seems \
31            to be a much larger room to the southeast, which is \
32            unfortunately almost completely blocked by a long metal \
33            barricade and gate. Stairs lead up to the outside.";
34          }
35          "at the entrance to the Frostham \
36           Great Underground Subway (GUS) station. The train \
37           platform lies past the gate to the southeast, or \
38           stairs lead up into the city.";
39        ],
40        name "stairs" "platform",
41        u_to FROSTHAM_GUSStop,
42        se_to FG_Gate,
43        before [;
44           Go:
45              if (noun==se_obj) {
46                 if (FG_Gate_slot hasnt general)
47                   "A strange buzzing noise sounds as you try \ 
48                   to pass through the gate, and an invisible \
49                   force blocks your way!";
50                 else {
51                   give FG_Gate_slot ~general; 
52                   print "You saunter through the apparently open gate.^";
53                 }
54              }
55        ],
56    has light;
57
58
59 Object ARAGAIN_GUSStation "Aragain GUS Station"
60    with description "You are standing at the entrance to the Aragain \
61 Great Underground Subway (GUS) station. The train \
62 platform lies past the gate to the southeast, or \
63 stairs lead up into the city. Some lettering on the \
64 wall reads ~TRANSFER STATION~.",
65        name "stairs" "platform",
66        u_to ARAGAIN_GUSStop,
67        se_to AG_Gate,
68        before [;
69           Go:
70              if (noun==se_obj) {
71                 if (AG_Gate_slot hasnt general)
72                   "A strange buzzing noise sounds as you try \ 
73                   to pass through the gate, and an invisible \
74                   force blocks your way!";
75                 else {
76                   give AG_Gate_slot ~general; 
77                   print "You saunter through the apparently open gate.^";
78                 }
79              }
80        ],
81    has light;
82
83 Object FUBLIO_GUSStation "Fublio Valley GUS Station"
84    with description "You are standing at the entrance to the \
85 South Fublio Valley \
86 Great Underground Subway (GUS) station. The train \
87 platform lies past the gate to the southeast, or \
88 stairs lead up into the city.",
89        name "stairs" "platform",
90        u_to FUBLIO_GUSStop,
91        se_to FublioG_Gate,
92        before [;
93           Go:
94              if (noun==se_obj) {
95                 if (FublioG_Gate_slot hasnt general)
96                   "A strange buzzing noise sounds as you try \ 
97                   to pass through the gate, and an invisible \
98                   force blocks your way!";
99                 else {
100                   give FublioG_Gate_slot ~general; 
101                   print "You saunter through the apparently open gate.^";
102                 }
103              }
104        ],
105    has light;
106
107 ! (Orange stations - one)
108 Object ANTHAR_GUSStation "Greater Anthar GUS Station"
109    with description "You are standing at the entrance to the Greater Anthar \
110 Great Underground Subway (GUS) station. The train \
111 platform lies past the gate to the south, or \
112 stairs lead up into the city.",
113        name "stairs" "platform",
114        u_to ANTHAR_GUSStop,
115        s_to AntharG_Gate,
116        before [;
117           Go:
118              if (noun==s_obj) {
119                 if (AntharG_Gate_slot hasnt general)
120                   "A strange buzzing noise sounds as you try \ 
121                   to pass through the gate, and an invisible \
122                   force blocks your way!";
123                 else {
124                   give AntharG_Gate_slot ~general; 
125                   print "You saunter through the apparently open gate.^";
126                 }
127              }
128        ],
129    has light;
130    
131 ! (Green stations - three)
132 Object GURTH_GUSStation "Gurth City GUS Station"
133    with description "You are standing at the entrance to the Gurth City \
134 Great Underground Subway (GUS) station. The train \
135 platform lies past the gate to the southwest, or \
136 stairs lead up into the city. Some lettering on the \
137 wall reads ~TRANSFER STATION~.",
138        name "stairs" "platform",
139        u_to GURTH_GUSStop,
140        sw_to GurthG_Gate,
141        before [;
142           Go:
143              if (noun==u_obj)
144                 print "You are greeted by a light rain as you leave the \
145 station.^";
146              if (noun==sw_obj) {
147                 if (GurthG_Gate hasnt general) ! note diff
148                   "A strange buzzing noise sounds as you try \ 
149                   to pass through the gate, and an invisible \
150                   force blocks your way!";
151                 else {
152                   give GurthG_Gate ~general; 
153                   print "You saunter through the apparently open gate.^";
154                 }
155              }
156        ],
157    has light;
158
159 Object BORPHEE_GUSStation "New Borphee GUS Station"
160    with description "You are standing at the entrance to the New Borphee \
161 Great Underground Subway (GUS) station. The train \
162 platform lies past the gate to the southwest, or \
163 stairs lead up into the city.",
164        name "stairs" "platform",
165        u_to BORPHEE_GUSStop,
166        sw_to BorpheeG_Gate,
167        before [;
168           Go:
169              if (noun==u_obj)
170                 print "You enter the city and are nearly \
171                       flattened by crowds rushing past.^";
172              if (noun==sw_obj) {
173                 if (BorpheeG_Gate_slot hasnt general) 
174                   "A strange buzzing noise sounds as you try \ 
175                   to pass through the gate, and an invisible \
176                   force blocks your way!";
177                 else {
178                   give BorpheeG_Gate_slot ~general; 
179                   print "You saunter through the apparently open gate.^";
180                 }
181              }
182        ],
183    has light;
184
185 Object MIZNIA_GUSStation "Miznia GUS Station"
186    with description "You are standing at the entrance to the Miznia \
187 Great Underground Subway (GUS) station. The train \
188 platform lies past the gate to the southwest, or \
189 stairs lead up into the city.",
190        name "stairs" "platform",
191        u_to MIZNIA_GUSStop,
192        sw_to MizniaG_Gate,
193        before [;
194           Go:
195              if (noun==sw_obj) {
196                 if (MizniaG_Gate_slot hasnt general) 
197                   "A strange buzzing noise sounds as you try \ 
198                   to pass through the gate, and an invisible \
199                   force blocks your way!";
200                 else {
201                   give MizniaG_Gate_slot ~general; 
202                   print "You saunter through the apparently open gate.^";
203                 }
204              }
205        ],
206    has light;
207
208 Object FROSTHAM_GUSPlatform "Frostham Train Platform"
209    with description [;
210            print "You are standing in a long underground \
211            chamber. The east side of the room contains a \
212            lowered set of what appear to be train tracks. \           
213            The tracks run south into a dark tunnel. \
214            Along one wall painted lettering \
215            reads ~FROSTHAM STATION~. \
216            A short walkway leads northwest, to a metal fence";
217           if (self has general)
218            ". There is a large train car sitting on the tracks \
219            to the east.";
220           else ".";
221         ],
222         name "tunnel",
223         nw_to FG_Gate,
224         s_to "A helpful subway worker says ~Hey pal, get outa there!~",
225         e_to PURPLELINE_car,
226         in_to PURPLELINE_car,
227         before [;
228            Go:
229 !              if (noun == nw_obj)
230 !                print "You saunter through the apparently open gate.^";
231               if ((self hasnt general) &&
232                   (noun == e_obj or in_obj))
233               "You'd fall onto the tracks if you went that way.";              
234         ],     
235         each_turn [ i ;
236            if (self hasnt general) {
237               i = random(10);
238               if (i==1 or 2 or 3) {
239                  give self general;
240                  PURPLELINE_loc = 1;            
241                  PURPLELINE_dir = 1;    ! will be heading south
242                  "^Suddenly, from the south, a train emerges from \
243                  the tunnel! It pulls to a screeching halt, the \
244                  doors open, and several people rush out and exit \
245                  the station.";
246               }
247               if (i==10) 
248                  "^You hear a distant rumbling noise from the south.";
249            }
250            else {
251               if (self has general) {
252                  if (PURPLELINE_loc == 2) {
253                     give self ~general;
254                     "^The train doors close, and the train rolls off \
255                     to the south."; 
256                  }
257                  else {
258                     PURPLELINE_loc = 2;
259                     "^A few exit the train, and hurry out \
260                     of the station. You hear a voice from inside the \
261                     train say, ~Doors will be closing, please stand \
262                     clear.~";
263                  }
264               }
265            }
266         ],        
267    has light;
268
269
270 ! (Classes for gates and slots)
271 Class GUS_Gate_Class
272    with name "gate" "metal",
273    initial "A metal gate bisects the fence.",
274    door_dir nw_to,
275    door_to FROSTHAM_GUSPlatform,
276    before [; 
277       Climb, JumpOver: "A subway worker yells ~Hey pal, no fare-jumpers!";
278       Open:  "It looks like it's already open.";
279       Close:  "There doesn't seem to be anything to close.";
280       Enter: "You'll have to walk in the appropriate direction to go through it.";    
281    ],
282    description "It's an odd metal gate that only comes up to about \
283 your waist. Odder still is the fact that there's \
284 no door on the gate, just two metal sides",
285    has static door transparent open;
286 Class GUS_Gate_Slot_Class
287    with name "slot" "metal" "thin" "small",
288        description "You see a rather small, thin slot that seems to be \
289 almost cut into one of the metal sides of the gate.",
290        before [;
291           LetGo: "There's no way to get anything out of that tiny, \
292 thin slot.";
293           Receive:
294              if (noun has is_coin) {
295                 give self general;
296                 remove noun;  ! collection
297                 "The coin slides into the slot with a satisfying thunk.";
298              }
299              "It doesn't look like that's going to fit into the slot."; 
300        ],
301        size 1,
302    has scenery container open;
303    
304  
305 Object FG_Gate "platform gate"
306    class GUS_Gate_Class,
307    with initial [;
308            if (location==FROSTHAM_GUSStation)
309               "A metal gate bisects the fence to the southeast.";
310            "A metal gate bisects the fence to the northwest.";
311         ],
312         door_dir [;
313            if (location==FROSTHAM_GUSStation)
314               return se_to;
315            return nw_to;
316         ],
317         door_to [;
318            if (location==FROSTHAM_GUSStation)
319               return FROSTHAM_GUSPlatform;
320            return FROSTHAM_GUSStation;
321         ],
322         before [; 
323            Enter:
324               if (location==FROSTHAM_GUSStation) <<Go se_obj>>;
325               else <<Go nw_obj>>;
326         ],
327         description [;
328         print "It's an odd metal gate that only comes up to about \
329                your waist. Odder still is the fact that there's \
330                no door on the gate, just two metal sides";
331         if (location == FROSTHAM_GUSStation)
332            ". There's a thin slot on one of the sides.";
333         else ".";
334         ],
335         found_in FROSTHAM_GUSStation FROSTHAM_GUSPlatform,
336 ;
337    
338    
339       
340 Object FG_Gate_slot "metal slot" FG_Gate
341    class GUS_Gate_Slot_Class
342    with description [;
343           if (location == FROSTHAM_GUSPlatform)
344              "You can't see any such thing.";
345           if (location == FROSTHAM_GUSStation)
346              "You see a rather small, thin slot that seems to be \
347 almost cut into one of the metal sides of the gate.";
348      ],
349        before [;
350           if (location == FROSTHAM_GUSPlatform)
351                 "You can't see any such thing.";
352        ],
353 ;
354    
355    
356 Object AG_Gate "platform gate"
357    class GUS_Gate_Class
358    with initial [;
359            if (location==ARAGAIN_GUSStation)
360               "A metal gate bisects the fence to the southeast.";
361            "A metal gate bisects the fence to the northwest.";
362         ],
363         door_dir [;
364            if (location==ARAGAIN_GUSStation)
365               return se_to;
366            return nw_to;
367         ],
368         door_to [;
369            if (location==ARAGAIN_GUSStation)
370               return ARAGAIN_GUSPlatform;
371            return ARAGAIN_GUSStation;
372         ],
373         before [; 
374            Enter:
375               if (location==FROSTHAM_GUSStation) <<Go se_obj>>;
376               else <<Go nw_obj>>;
377         ],
378         description [;
379        print "It's an odd metal gate that only comes up to about \
380                your waist. Odder still is the fact that there's \
381                no door on the gate, just two metal sides";
382            if (location == ARAGAIN_GUSStation)
383               ". There's a thin slot on one of the sides.";
384            else ".";
385         ],
386         found_in ARAGAIN_GUSStation ARAGAIN_GUSPlatform,
387 ;
388    
389 Object AG_Gate_slot "metal slot" AG_Gate
390    class GUS_Gate_Slot_Class
391    with description [;
392           if (location == ARAGAIN_GUSPlatform)
393              "You can't see any such thing.";
394           if (location == ARAGAIN_GUSStation)
395              "You see a rather small, thin slot that seems to be \
396 almost cut into one of the metal sides of the gate.";
397      ],
398        before [;
399           if (location == ARAGAIN_GUSPlatform)
400                 "You can't see any such thing.";
401        ],
402 ;
403    
404    
405 Object FublioG_Gate "platform gate"
406    class GUS_Gate_Class
407    with initial [;
408            if (location==FUBLIO_GUSStation)
409               "A metal gate bisects the fence to the southeast.";
410            "A metal gate bisects the fence to the northwest.";
411         ],
412         door_dir [;
413            if (location==FUBLIO_GUSStation)
414               return se_to;
415            return nw_to;
416         ],
417         door_to [;
418            if (location==FUBLIO_GUSStation)
419               return FUBLIO_GUSPlatform;
420            return FUBLIO_GUSStation;
421         ],
422         before [; 
423            Enter:
424               if (location==FUBLIO_GUSStation) <<Go se_obj>>;
425               else <<Go nw_obj>>;
426         ],
427         description [;
428        print "It's an odd metal gate that only comes up to about \
429             your waist. Odder still is the fact that there's \
430             no door on the gate, just two metal sides";
431            if (location == FUBLIO_GUSStation)
432               ". There's a thin slot on one of the sides.";
433            else ".";
434         ],
435         found_in FUBLIO_GUSStation FUBLIO_GUSPlatform,
436 ;
437    
438 Object FublioG_Gate_slot "metal slot" FublioG_Gate
439    class GUS_Gate_Slot_Class
440    with description [;
441           if (location == FUBLIO_GUSStation)
442              "You see a rather small, thin slot that seems to be \
443              almost cut into one of the metal sides of the gate.";
444 !! See if this works instead...
445           "You can't see any such thing.";
446        ],
447        before [;
448           if (location == FUBLIO_GUSPlatform)
449              "You can't see any such thing.";
450        ],
451 ;
452
453 ! (Orange gates (1))
454 Object AntharG_Gate "platform gate"
455    class GUS_Gate_Class
456    with initial [;
457            if (location==ANTHAR_GUSStation)
458               "A metal gate bisects the fence to the south.";
459            "A metal gate bisects the fence to the north.";
460         ],
461         door_dir [;
462            if (location==ANTHAR_GUSStation)
463               return s_to;
464            return n_to;
465         ],
466         door_to [;
467            if (location==ANTHAR_GUSStation)
468               return ANTHAR_GUSPlatform;
469            return ANTHAR_GUSStation;
470         ],
471         before [; 
472            Enter:
473               if (location==ANTHAR_GUSStation) <<Go s_obj>>;
474               else <<Go n_obj>>;
475         ],
476         description [;
477         print "It's an odd metal gate that only comes up to about \
478             your waist. Odder still is the fact that there's \
479             no door on the gate, just two metal sides";
480            if (location == ANTHAR_GUSStation)
481                ". There's a thin slot on one of the sides.";
482            else ".";
483         ],
484         found_in ANTHAR_GUSStation ANTHAR_GUSPlatform,
485 ;
486    
487 Object AntharG_Gate_slot "metal slot" AntharG_Gate
488    class GUS_Gate_Slot_Class
489    with description [;
490           if (location == ANTHAR_GUSStation)
491              "You see a rather small, thin slot that seems to be \
492              almost cut into one of the metal sides of the gate.";
493           "You can't see any such thing.";
494        ],
495        before [;
496           if (location == ANTHAR_GUSPlatform) 
497              "You can't see any such thing.";
498        ],
499 ;   
500
501
502 ! (Green gates (3))
503 Object BorpheeG_Gate "platform gate"
504    class GUS_Gate_Class
505    with initial [;
506            if (location==BORPHEE_GUSStation)
507               "A metal gate bisects the fence to the southwest.";
508            "A metal gate bisects the fence to the northeast.";
509         ],
510         door_dir [;
511            if (location==BORPHEE_GUSStation)
512               return sw_to;
513            return ne_to;
514         ],
515         door_to [;
516            if (location==BORPHEE_GUSStation)
517               return BORPHEE_GUSPlatform;
518            return BORPHEE_GUSStation;
519         ],
520         before [; 
521            Enter:
522               if (location == BORPHEE_GUSStation) <<Go sw_obj>>;
523               else <<Go ne_obj>>;
524         ],
525         description [;
526             print "It's an odd metal gate that only comes up to about \
527                your waist. Odder still is the fact that there's \
528                no door on the gate, just two metal sides";
529            if (location == BORPHEE_GUSStation)
530               ". There's a thin slot on one of the sides.";
531            else ".";
532         ],
533         found_in BORPHEE_GUSStation BORPHEE_GUSPlatform,
534 ;
535    
536 Object BorpheeG_Gate_slot "metal slot" BorpheeG_Gate
537    class GUS_Gate_Slot_Class
538    with description [;
539           if (location == BORPHEE_GUSStation)
540              "You see a rather small, thin slot that seems to be \
541              almost cut into one of the metal sides of the gate.";
542           "You can't see any such thing.";
543        ],
544        before [;
545           if (location == BORPHEE_GUSPlatform) 
546              "You can't see any such thing.";
547        ],
548 ;
549    
550 ! (NOTE: Gurth is different, read: broken)   
551 Object GurthG_Gate "platform gate"
552    class GUS_Gate_Class
553    with initial [;
554            if (location==GURTH_GUSStation)
555               "A metal gate bisects the fence to the southwest.";
556            "A metal gate bisects the fence to the northeast.";
557         ],
558         door_dir [;
559            if (location==GURTH_GUSStation)
560               return sw_to;
561            return ne_to;
562         ],
563         door_to [;
564            if (location==GURTH_GUSStation)
565               return GURTH_GUSPlatform;
566            return GURTH_GUSStation;
567         ],
568         before [; 
569            Enter:  if (location == GURTH_GUSStation) <<Go sw_obj>>;
570                    else <<Go ne_obj>>;
571         ],
572         description [;
573            print "It's an odd metal gate that only comes up to about \
574             your waist. Odder still is the fact that there's \
575             no door on the gate, just two metal sides";
576            if (location == GURTH_GUSStation)
577               ". There's a thin slot on one of the sides that looks \
578               slightly dented.";
579            else ".";
580         ],
581         found_in GURTH_GUSStation GURTH_GUSPlatform,
582 ;
583    
584 Object GurthG_Gate_slot "metal slot" GurthG_Gate
585    class GUS_Gate_Slot_Class
586    with name "dented",
587        description [;
588           if (location == GURTH_GUSStation)
589              "You see a rather small, thin slot that seems to be \
590              almost cut into one of the metal sides of the gate. \
591              It looks slightly dented.";
592           "You can't see any such thing.";
593        ],
594        before [;
595           if (location == GURTH_GUSPlatform)
596              "You can't see any such thing.";
597           Receive:
598              if (noun has is_coin) {
599                 give self general;
600                 remove noun;
601                 "The coin slides into the slot, but you hear a strange click \
602                 almost immediately.^^\
603                 A subway nymph suddenly appears. She looks at the gate \
604                 disapprovingly. ~Broken again? I thought they \
605                 just fixed it. Well, fine.~ She seems rather annoyed. \
606                 ~We'll get someone to look at it, eventually. Bye!~ She \
607                 disappears.";
608              }
609              if (noun==wire) {
610                 if (self hasnt general)
611                    "You poke the wire in the slot for a bit, but nothing \
612                    happens.";
613                 if (self has general) {
614                    give self ~general;
615                    Achieved(20);
616                    give GurthG_Gate general;
617                    "You poke around in the slot, and manage to free something! \
618                    There is a solid thunk-like noise.";
619                 }             
620              }
621              "It doesn't look like that's going to fit into the slot."; 
622        ],
623 ;   
624
625 Object MizniaG_Gate "platform gate"
626    class GUS_Gate_Class
627    with initial [;
628            if (location==MIZNIA_GUSStation)
629               "A metal gate bisects the fence to the southwest.";
630            "A metal gate bisects the fence to the northeast.";
631         ],
632         door_dir [;
633            if (location==MIZNIA_GUSStation)
634               return sw_to;
635            return ne_to;
636         ],
637         door_to [;
638            if (location==MIZNIA_GUSStation)
639               return MIZNIA_GUSPlatform;
640            return MIZNIA_GUSStation;
641         ],
642         before [; 
643            Enter: if (location==MIZNIA_GUSStation) <<Go sw_obj>>;
644                   else <<Go ne_obj>>;
645         ],
646         description [;
647            print "It's an odd metal gate that only comes up to about \
648             your waist. Odder still is the fact that there's \
649             no door on the gate, just two metal sides";
650            if (location == MIZNIA_GUSStation)
651               ". There's a thin slot on one of the sides.";
652            else ".";
653         ],
654         found_in MIZNIA_GUSStation MIZNIA_GUSPlatform,
655 ;
656    
657 Object MizniaG_Gate_slot "metal slot" MizniaG_Gate
658    class GUS_Gate_Slot_Class
659    with description [;
660           if (location == MIZNIA_GUSStation)
661              "You see a rather small, thin slot that seems to be \
662              almost cut into one of the metal sides of the gate.";
663           "You can't see any such thing.";
664        ],
665        before [;
666           if (location==MIZNIA_GUSPlatform)
667              "You can't see any such thing.";
668        ],
669 ;
670
671
672    
673 !Object FS_Platform_sign2 "laminated paper" FROSTHAM_GUSPlatform
674 !   with name "paper" "laminated" "safety",
675 !      initial "A small stiff-looking piece of paper is attached to the west wall.",
676 !      description "The paper reads: ^^\
677 !      GREAT UNDERGROUND SUBWAY STATION RULES:^
678 !      1) No going onto tracks.^
679 !      2) No going into tunnels on foot unless authorized.",
680 !   has static;
681    
682 Object train_tracks "train tracks"
683    with name "tracks" "train",
684         description "A pair of large metal train tracks.",
685         found_in FROSTHAM_GUSPlatform ARAGAIN_GUSPlatform FUBLIO_GUSPlatform
686                  ARAGAIN_GUSPlatform2,
687    has scenery;
688    
689    
690 Object ARAGAIN_GUSPlatform "Aragain Train Platform"
691    with description [;
692            print "You are standing in a long underground \
693            chamber. The east side of the room contains a \
694            lowered set of what appear to be train tracks. \
695            The tracks run north and south into dark tunnels. \
696            Along one wall painted lettering \
697            reads ~ARAGAIN STATION~. \
698            A short walkway leads northwest, to a metal fence. \
699            There is also a stairway down here";
700           if (self has general)
701            ". In addition, there is a large train car sitting on the tracks \
702            to the east.";
703           else ".";
704         ],
705         name "tunnel" "tunnels" "stairway",
706         nw_to AG_Gate,
707         s_to "A helpful subway worker says ~Hey pal, get outa there!~",
708         n_to "A helpful subway worker says ~Hey pal, get outa there!~",
709         e_to PURPLELINE_car,
710         d_to ARAGAIN_GUSPlatform2,
711         in_to PURPLELINE_car,
712         before [;
713            Go:
714 !              if (noun == nw_obj)
715 !                print "You saunter through the apparently open gate.^";
716               if ((self hasnt general) &&
717                   (noun == e_obj or in_obj))
718               "You'd fall onto the tracks if you went that way.";              
719         ],     
720         each_turn [ i ;
721            if (self hasnt general) {
722               i = random(10);
723               if (i==1 or 3 or 5) {
724                  give self general;
725                  PURPLELINE_loc = 5;            
726                  PURPLELINE_dir = 1;    ! will be heading south
727                  "^Suddenly, from the north, a train emerges from \
728                  the tunnel! It pulls to a screeching halt, the \
729                  doors open, and several people rush out and exit \
730                  the station.";
731               }
732               if (i==2 or 4 or 6) {
733                  give self general;
734                  PURPLELINE_loc = 5;            
735                  PURPLELINE_dir = 0;    ! will be heading north
736                  "^Suddenly, from the south, a train emerges from \
737                  the tunnel! It pulls to a screeching halt, the \
738                  doors open, and several people rush out and exit \
739                  the station.";
740               }
741               if (i==9)
742                  "^You hear a distant rumbling noise from the north.";
743               if (i==10) 
744                  "^You hear a distant rumbling noise from the south.";
745            }
746            else {
747               if (self has general) {
748                  if (PURPLELINE_loc == 6) {
749                     give self ~general;
750                     "^The train doors close, and the train rolls off."; 
751                  }
752                  else {
753                     PURPLELINE_loc = 6;
754                     "^A few exit the train, and hurry out \
755                     of the station. You hear a voice from inside the \
756                     train say, ~Doors will be closing, please stand \
757                     clear.~";
758                  }
759               }
760            }
761         ],        
762    has light;
763  
764 Object ARAGAIN_GUSPlatform2 "Aragain Train Platform (lower)"
765    with description [;
766            print "You are standing in a long underground \
767            chamber. The south side of the room contains a \
768            lowered set of what appear to be train tracks. \
769            The tracks run west into a dark tunnel. \
770            Along one wall painted lettering \
771            reads ~ARAGAIN STATION~. \
772            A set of stairs leads up out of the gloom";
773           if (self has general)
774            ". There is a large train car sitting on the tracks \
775            to the south.";
776           else ".";
777         ],
778         name "tunnel" "stairs",
779         w_to "A helpful subway worker says ~Hey pal, get outa there!~",
780         s_to ORANGELINE_car,
781         in_to ORANGELINE_car,
782         u_to ARAGAIN_GUSPlatform,
783         before [;
784            Go:
785               if ((self hasnt general) &&
786                   (noun == s_obj or in_obj))
787               "You'd fall onto the tracks if you went that way.";              
788         ],     
789         each_turn [ i ;
790            if (self hasnt general) {
791               i = random(10);
792               if (i==1 or 3 or 5) {
793                  give self general;
794                  ORANGELINE_loc = 9;            
795                  ORANGELINE_dir = 0;    ! will be heading west
796                  "^Suddenly, from the west, a train emerges from \
797                  the tunnel! It pulls to a screeching halt, the \
798                  doors open, and several people rush out and up \
799                  the stairs.";
800               }
801               if (i==10) 
802                  "^You hear a distant rumbling noise from the west.";
803            }
804            else {
805               if (self has general) {
806                  if (ORANGELINE_loc == 10) {
807                     give self ~general;
808                     "^The train doors close, and the train heads off \
809                     to the west."; 
810                  }
811                  else {
812                     ORANGELINE_loc = 10;
813                     "^A few people exit the train, and hurry up the stairs. \
814                     You hear a voice from inside the \
815                     train say, ~Doors will be closing, please stand \
816                     clear.~";
817                  }
818               }
819            }
820         ],        
821    has light;      
822    
823    
824 Object FUBLIO_GUSPlatform "Fublio Valley Train Platform"
825    with description [;
826            print "You are standing in a long underground \
827            chamber. The east side of the room contains a \
828            lowered set of what appear to be train tracks. \
829            The tracks run north into a dark tunnel. \
830            Along one wall painted lettering \
831            reads ~FUBLIO VALLEY STATION~. \
832            A short walkway leads northwest, to a metal fence";
833           if (self has general)
834            ". There is a large train car sitting on the tracks \
835            to the east.";
836           else ".";
837         ],
838         name "tunnel",
839         nw_to FublioG_Gate,
840         n_to "A helpful subway worker says ~Hey pal, get outa there!~",
841         e_to PURPLELINE_car,
842         in_to PURPLELINE_car,
843         before [;
844            Go:
845 !              if (noun == nw_obj)
846 !                print "You saunter through the apparently open gate.^";
847               if ((self hasnt general) &&
848                   (noun == e_obj or in_obj))
849               "You'd fall onto the tracks if you went that way.";              
850         ],     
851         each_turn [ i ;
852            if (self hasnt general) {
853               i = random(10);
854               if (i==1 or 3 or 4) {
855                  give self general;
856                  PURPLELINE_loc = 10;            
857                  PURPLELINE_dir = 0;    ! will be heading north
858                  "^Suddenly, from the north, a train emerges from \
859                  the tunnel! It pulls to a screeching halt, the \
860                  doors open, and several people rush out and exit \
861                  the station.";
862               }
863               if (i==10) 
864                  "^You hear a distant rumbling noise from the north.";
865            }
866            else {
867               if (self has general) {
868                  if (PURPLELINE_loc == 9) {
869                     give self ~general;
870                     "^The train doors close, and the train rolls off \
871                     to the north."; 
872                  }
873                  else {
874                     PURPLELINE_loc = 9;
875                     "^A few people exit the train, and hurry out \
876                     of the station. You hear a voice from inside the \
877                     train say, ~Doors will be closing, please stand \
878                     clear.~";
879                  }
880               }
881            }
882         ],        
883    has light;      
884
885    
886 ! *** Orange line platforms
887
888
889 Object GURTH_GUSPlatform2 "Gurth City Train Platform (lower)"
890    with description [;
891            print "You are standing in a long underground \
892            chamber. The south side of the room contains a \
893            lowered set of what appear to be train tracks. \
894            The tracks run east into a dark tunnel. \
895            Along one wall painted lettering \
896            reads ~GURTH CITY STATION~. \
897            A set of stairs leads up out of the gloom";
898           if (self has general)
899            ". There is a large train car sitting on the tracks \
900            to the south.";
901           else ".";
902         ],
903         name "tunnel" "stairs", 
904         e_to "A helpful subway worker says ~Hey pal, get outa there!~",
905         s_to ORANGELINE_car,
906         in_to ORANGELINE_car,
907         u_to GURTH_GUSPlatform,
908         before [;
909            Go:
910               if ((self hasnt general) &&
911                   (noun == s_obj or in_obj))
912               "You'd fall onto the tracks if you went that way.";              
913         ],     
914         each_turn [ i ;
915            if (self hasnt general) {
916               i = random(10);
917               if (i==1 or 2 or 4) {
918                  give self general;
919                  ORANGELINE_loc = 1;            
920                  ORANGELINE_dir = 1;    ! will be heading east
921                  "^Suddenly, from the east, a train emerges from \
922                  the tunnel! It pulls to a screeching halt, the \
923                  doors open, and several people rush out and up \
924                  the stairs.";
925               }
926               if (i==10) 
927                  "^You hear a distant rumbling noise from the east.";
928            }
929            else {
930               if (self has general) {
931                  if (ORANGELINE_loc == 2) {
932                     give self ~general;
933                     "^The train doors close, and the train heads off \
934                     to the east."; 
935                  }
936                  else {
937                     ORANGELINE_loc = 2;
938                     "^A few people exit the train, and hurry up the stairs. \
939                     You hear a voice from inside the \
940                     train say, ~Doors will be closing, please stand \
941                     clear.~";
942                  }
943               }
944            }
945         ],        
946    has light;      
947    
948 Object ANTHAR_GUSPlatform "Greater Anthar Train Platform"
949    with description [;
950            print "You are standing in a long underground \
951            chamber. The south side of the room contains a \
952            lowered set of what appear to be train tracks. \
953            The tracks run east and west into dark tunnels. \
954            Along one wall painted lettering \
955            reads ~ANTHAR STATION~. \
956            A short walkway leads north, to a metal fence";
957           if (self has general)
958            ". There is a large train car sitting on the tracks \
959            to the south.";
960           else ".";
961         ],
962         name "tunnel" "tunnels" "walkway",
963         n_to AntharG_Gate,
964         e_to "A helpful subway worker says ~Hey pal, get outa there!~",
965         w_to "A helpful subway worker says ~Hey pal, get outa there!~",        
966         s_to ORANGELINE_car,
967         in_to ORANGELINE_car,
968         before [;
969            Go:
970 !              if (noun == n_obj)
971 !                print "You saunter through the apparently open gate.^";
972               if ((self hasnt general) &&
973                   (noun == s_obj or in_obj))
974               "You'd fall onto the tracks if you went that way.";              
975         ],     
976         each_turn [ i ;
977            if (self hasnt general) {
978               i = random(10);
979               if (i==1 or 4 or 5) {
980                  give self general;
981                  ORANGELINE_loc = 5;            
982                  ORANGELINE_dir = 1;    ! will be heading east
983                  "^Suddenly, from the west, a train emerges from \
984                  the tunnel! It pulls to a screeching halt, the \
985                  doors open, and several people rush out and exit \
986                  the station.";
987               }
988               if (i==2 or 3 or 6) {
989                  give self general;
990                  ORANGELINE_loc = 5;            
991                  ORANGELINE_dir = 0;    ! will be heading west
992                  "^Suddenly, from the east, a train emerges from \
993                  the tunnel! It pulls to a screeching halt, the \
994                  doors open, and several people rush out and exit \
995                  the station.";
996               }
997               if (i==9)
998                  "^You hear a distant rumbling noise from the east.";
999               if (i==10) 
1000                  "^You hear a distant rumbling noise from the west.";
1001            }
1002            else {
1003               if (self has general) {
1004                  if (ORANGELINE_loc == 6) {
1005                     give self ~general;
1006                     "^The train doors close, and the train rolls off."; 
1007                  }
1008                  else {
1009                     ORANGELINE_loc = 6;
1010                     "^A few people exit the train, and hurry out \
1011                     of the station. You hear a voice from inside the \
1012                     train say, ~Doors will be closing, please stand \
1013                     clear.~";
1014                  }
1015               }
1016            }
1017         ],        
1018    has light;
1019
1020
1021 ! *** Green line platforms
1022
1023 Object BORPHEE_GUSPlatform "New Borphee Train Platform"
1024    with description [;
1025            print "You are standing in a long underground \
1026            chamber. The west side of the room contains a \
1027            lowered set of what appear to be train tracks. \
1028            The tracks run south into a dark tunnel. \
1029            Along one wall painted lettering \
1030            reads ~NEW BORPHEE STATION~. \
1031            A short walkway leads northeast, to a metal fence";
1032           if (self has general)
1033            ". There is a large train car sitting on the tracks \
1034            to the west.";
1035           else ".";
1036         ],
1037         name "tunnel" "walkway",
1038         ne_to BorpheeG_Gate,
1039         s_to "A helpful subway worker says ~Hey pal, get outa there!~",
1040         w_to GREENLINE_car,
1041         in_to GREENLINE_car,
1042         before [;
1043            Go:
1044 !              if (noun == ne_obj)
1045 !                print "You saunter through the apparently open gate.^";
1046               if ((self hasnt general) &&
1047                   (noun == w_obj or in_obj))
1048               "You'd fall onto the tracks if you went that way.";              
1049         ],     
1050         each_turn [ i ;
1051            if (self hasnt general) {
1052               i = random(10);
1053               if (i==1 or 2 or 3) {
1054                  give self general;
1055                  GREENLINE_loc = 1;            
1056                  GREENLINE_dir = 1;    ! will be heading south
1057                  "^Suddenly, from the south, a train emerges from \
1058                  the tunnel! It pulls to a screeching halt, the \
1059                  doors open, and several people rush out and exit \
1060                  the station.";
1061               }
1062               if (i==10) 
1063                  "^You hear a distant rumbling noise from the south.";
1064            }
1065            else {
1066               if (self has general) {
1067                  if (GREENLINE_loc == 2) {
1068                     give self ~general;
1069                     "^The train doors close, and the train rolls off \
1070                     to the south."; 
1071                  }
1072                  else {
1073                     GREENLINE_loc = 2;
1074                     "^A few people exit the train, and hurry out \
1075                     of the station. You hear a voice from inside the \
1076                     train say, ~Doors will be closing, please stand \
1077                     clear.~";
1078                  }
1079               }
1080            }
1081         ],        
1082    has light;      
1083
1084 Object MIZNIA_GUSPlatform "Miznia Train Platform"
1085    with description [;
1086            print "You are standing in a long underground \
1087            chamber. The west side of the room contains a \
1088            lowered set of what appear to be train tracks. \
1089            The tracks run north into a dark tunnel. \
1090            Along one wall painted lettering \
1091            reads ~MIZNIA STATION~. \
1092            A short walkway leads northeast, to a metal fence";
1093           if (self has general)
1094            ". There is a large train car sitting on the tracks \
1095            to the west.";
1096           else ".";
1097         ],
1098         name "tunnel" "walkway",
1099         ne_to MizniaG_Gate,
1100         n_to "A helpful subway worker says ~Hey pal, get outa there!~",
1101         w_to GREENLINE_car,
1102         in_to GREENLINE_car,
1103         before [;
1104            Go:
1105 !              if (noun == ne_obj)
1106 !                print "You saunter through the apparently open gate.^";
1107               if ((self hasnt general) &&
1108                   (noun == w_obj or in_obj))
1109               "You'd fall onto the tracks if you went that way.";              
1110         ],     
1111         each_turn [ i ;
1112            if (self hasnt general) {
1113               i = random(10);
1114               if (i==1 or 2 or 3) {
1115                  give self general;
1116                  GREENLINE_loc = 9;            
1117                  GREENLINE_dir = 0;    ! will be heading south
1118                  "^Suddenly, from the north, a train emerges from \
1119                  the tunnel! It pulls to a screeching halt, the \
1120                  doors open, and several people rush out and exit \
1121                  the station.";
1122               }
1123               if (i==10) 
1124                  "^You hear a distant rumbling noise from the north.";
1125            }
1126            else {
1127               if (self has general) {
1128                  if (GREENLINE_loc == 10) {
1129                     give self ~general;
1130                     "^The train doors close, and the train rolls off \
1131                     to the north."; 
1132                  }
1133                  else {
1134                     GREENLINE_loc = 10;
1135                     "^A few people exit the train, and hurry out \
1136                     of the station. You hear a voice from inside the \
1137                     train say, ~Doors will be closing, please stand \
1138                     clear.~";
1139                  }
1140               }
1141            }
1142         ],        
1143    has light;      
1144
1145 Object GURTH_GUSPlatform "Gurth City Train Platform"
1146    with description [;
1147            print "You are standing in a long underground \
1148            chamber. The west side of the room contains a \
1149            lowered set of what appear to be train tracks. \
1150            The tracks run north and south into dark tunnels. \
1151            Along one wall painted lettering \
1152            reads ~GURTH CITY STATION~. \
1153            A short walkway leads northeast, to a metal fence. \
1154            There is also a stairway down here";
1155           if (self has general)
1156            ". There is a large train car sitting on the tracks \
1157            to the west.";
1158           else ".";
1159         ],
1160         name "tunnel" "tunnels" "walkway" "stairway",
1161         ne_to GurthG_Gate,
1162         s_to "A helpful subway worker says ~Hey pal, get outa there!~",
1163         n_to "A helpful subway worker says ~Hey pal, get outa there!~",
1164         w_to GREENLINE_car,
1165         d_to GURTH_GUSPlatform2,
1166         in_to GREENLINE_car,
1167         before [;
1168            Go:
1169 !              if (noun == ne_obj)
1170 !                print "You saunter through the apparently open gate.^";
1171               if ((self hasnt general) &&
1172                   (noun == w_obj or in_obj))
1173               "You'd fall onto the tracks if you went that way.";              
1174         ],     
1175         each_turn [ i ;
1176            if (self hasnt general) {
1177               i = random(10);
1178               if (i==1 or 3) {
1179                  give self general;
1180                  GREENLINE_loc = 5;            
1181                  GREENLINE_dir = 1;    ! will be heading south
1182                  "^Suddenly, from the north, a train emerges from \
1183                  the tunnel! It pulls to a screeching halt, the \
1184                  doors open, and several people rush out and exit \
1185                  the station.";
1186               }
1187               if (i==2 or 4) {
1188                  give self general;
1189                  GREENLINE_loc = 5;            
1190                  GREENLINE_dir = 0;    ! will be heading north
1191                  "^Suddenly, from the south, a train emerges from \
1192                  the tunnel! It pulls to a screeching halt, the \
1193                  doors open, and several people rush out and exit \
1194                  the station.";
1195               }
1196               if (i==9)
1197                  "^You hear a distant rumbling noise from the north.";
1198               if (i==10) 
1199                  "^You hear a distant rumbling noise from the south.";
1200            }
1201            else {
1202               if (self has general) {
1203                  if (GREENLINE_loc == 6) {
1204                     give self ~general;
1205                     "^The train doors close, and the train rolls off."; 
1206                  }
1207                  else {
1208                     GREENLINE_loc = 6;
1209                     "^A few people exit the train, and hurry out \
1210                     of the station. You hear a voice from inside the \
1211                     train say, ~Doors will be closing, please stand \
1212                     clear.~";
1213                  }
1214               }
1215            }
1216         ],        
1217    has light;    
1218
1219 ! **************************
1220 ! TRAINS
1221 ! Some notes:
1222 !     While it may seem more logical to implement the trains with
1223 !     an 'enterable' property, I decided to implement them as 
1224 !     'rooms' instead.  Mainly, I did this because:
1225 !     1) I wanted total control of the "movement" of the train.
1226 !     2) I wanted to fill the cars with various people/things.
1227 !     3) I wanted seats on the train :)
1228 !     Again, this is all probably possible with 'vehicles', I
1229 !     just saw things slightly differently.
1230 !     Be warned, the logic in moving the train is probably one
1231 !     of the more unfathomable things I've ever coded.
1232 ! **************************
1233
1234 ! *** The purple line (Eastlands)
1235
1236 Object PURPLELINE_car "Subway car"
1237    with description "You are in an underground train car. Various \
1238            people fill the train, some in uncomfortable-looking seats.",
1239         name "car" "people",
1240         w_to FROSTHAM_GUSPlatform,  ! we adjust this, see below
1241         out_to FROSTHAM_GUSPlatform,
1242         after [;
1243          Go:
1244           if (noun == e_obj or in_obj) {
1245            ! determine boarding location, direction train was
1246            ! traveling 
1247            give self general; ! we're off and moving...
1248            print "^You enter the train car. The doors slam shut behind you.^";
1249            if (PURPLELINE_loc == 1 or 2) {
1250               ! Frostham, south
1251               give FROSTHAM_GUSPlatform ~general;
1252               PURPLELINE_loc = 3; ! leaving
1253            }
1254            if (PURPLELINE_loc == 5 or 6) {
1255               ! Aragain
1256               ! give ARAGAIN_GUSPlatform ~general;
1257               if (PURPLELINE_dir == 1) {
1258                  ! South
1259                  PURPLELINE_loc = 7;
1260               }
1261               else {
1262                  ! North
1263                  PURPLELINE_loc = 4;
1264               }
1265            }
1266            if (PURPLELINE_loc == 9 or 10) {
1267               ! Fublio, north
1268               ! give FUBLIO_GUSPlatform ~general;
1269               PURPLELINE_loc = 8;
1270            }
1271           }
1272         ],
1273         before [;
1274           Go:
1275             if (noun == w_obj or out_obj) {
1276                if (self has general)
1277                   "The train is moving right now. Better wait til \
1278                   it stops to get off.";               
1279                if (thug in self)
1280                   "As you try to get off, the thug gets in your way. \
1281                   ~Going somewhere, Padre?~.";
1282             }
1283         ],
1284         each_turn [;
1285           ! check location of train, print appropriate msg, 
1286           ! and increment location of train, given direction
1287           if (PURPLELINE_loc == 1) {
1288             ! reached Frostham, dir = S, not moving
1289             give self ~general;
1290             give FROSTHAM_GUSPlatform general;
1291             PURPLELINE_dir = 1;
1292             PURPLELINE_loc = 2;
1293             PURPLELINE_car.w_to = FROSTHAM_GUSPlatform;
1294             PURPLELINE_car.out_to = FROSTHAM_GUSPlatform;
1295             "^The train suddenly lurches to a stop! A voice from \
1296             somewhere overhead says ~Frostham station, watch your \
1297             step please.~";
1298           }
1299           if (PURPLELINE_loc == 2) {
1300             ! still in Frostham, not moving
1301             PURPLELINE_loc = 3;
1302             "^A voice overhead says ~Doors will be closing, please \
1303              stand clear.~";
1304           }
1305           if (PURPLELINE_loc == 3) {
1306             if (PURPLELINE_dir == 1) {
1307                ! moving away from Frostham
1308                give self general;
1309                give FROSTHAM_GUSPlatform ~general;
1310                PURPLELINE_loc = 4;
1311                "^The train starts to move, quickly exiting the station \
1312                going south.";
1313             }
1314             if (PURPLELINE_dir == 0) {
1315                ! moving towards Frostham
1316                PURPLELINE_loc = 1;  ! We will 'arrive' in Frostham next
1317                "^The train rumbles as it moves.";
1318             }
1319           }
1320           if (PURPLELINE_loc == 4) {
1321             if (PURPLELINE_dir == 0) {
1322                ! We're leaving Aragain
1323                PURPLELINE_loc = 3;
1324                give self general;
1325                give ARAGAIN_GUSPlatform ~general;
1326                "^The train starts to move, quickly exiting the station \
1327                going north.";
1328             }
1329             if (PURPLELINE_dir == 1) {
1330                PURPLELINE_loc = 5; 
1331                "^The train rumbles as it moves.";
1332             }
1333           }
1334           if (PURPLELINE_loc == 5) {
1335             ! reached Aragain, stop the train
1336             give self ~general;
1337             give ARAGAIN_GUSPlatform general;
1338             PURPLELINE_loc = 6;  ! we'll be stopping for 1 turn
1339             PURPLELINE_car.w_to = ARAGAIN_GUSPlatform;
1340             PURPLELINE_car.out_to = ARAGAIN_GUSPlatform;
1341             "^The train suddenly lurches to a stop! A voice from \
1342             somewhere overhead says ~Aragain station, watch your \
1343             step please.~";
1344           }
1345           if (PURPLELINE_loc == 6) {
1346             ! about to leave Aragain station
1347             if (PURPLELINE_dir == 0) 
1348                PURPLELINE_loc = 4;
1349             else
1350                PURPLELINE_loc = 7;
1351             "^A voice overhead says ~Doors will be closing, please \
1352              stand clear.~";
1353           }
1354           if (PURPLELINE_loc == 7) {
1355              if (PURPLELINE_dir == 1) {
1356                ! We're leaving Aragain
1357                PURPLELINE_loc = 8;
1358                give self general;
1359                give ARAGAIN_GUSPlatform ~general;
1360                "^The train starts to move, quickly exiting the station \
1361                going south.";
1362             }
1363             if (PURPLELINE_dir == 0) {
1364                PURPLELINE_loc = 5;   ! we will arrive in Aragain shortly...
1365                "^The train rumbles as it moves.";
1366             }
1367           }
1368           if (PURPLELINE_loc == 8) {
1369             if (PURPLELINE_dir == 0) {
1370                ! we're leaving Fublio
1371                PURPLELINE_loc = 7;
1372                give self general;
1373                give FUBLIO_GUSPlatform ~general;
1374                "^The train starts to move, quickly exiting the station \
1375                going north.";
1376             }
1377             if (PURPLELINE_dir == 1) {
1378                PURPLELINE_loc = 10;  ! will arrive in Fublio (BACKWARDS!!)
1379                "^The train rumbles as it moves.";
1380             }
1381           }
1382           if (PURPLELINE_loc == 9) {
1383             ! still waiting in Fublio
1384             PURPLELINE_loc = 8;
1385             "^A voice overhead says ~Doors will be closing, please \
1386              stand clear.~";
1387           }
1388           if (PURPLELINE_loc == 10) {
1389             ! arriving in Fublio
1390             PURPLELINE_loc = 9;   
1391             PURPLELINE_dir = 0; ! north
1392             give self ~general;
1393             give FUBLIO_GUSPlatform general;
1394             PURPLELINE_car.w_to = FUBLIO_GUSPlatform;
1395             PURPLELINE_car.out_to = FUBLIO_GUSPlatform;
1396             "^The train suddenly lurches to a stop! A voice from \
1397             somewhere overhead says ~Fublio station, watch your \
1398             step please.~";
1399           }
1400         ],
1401    has light;
1402
1403 Class Train_Car_Seat_Class
1404    with name "seat" "seats",
1405    description "There seem to be a few seats that haven't been taken.",
1406    before [;
1407       Enter:
1408          if (random(10) < 3)
1409             "As you attempt to grab an open seat, someone rudely \
1410             beats you to it.";
1411    ],
1412 has scenery enterable;
1413
1414
1415 Object PURPLELINE_car_seats "subway seat" PURPLELINE_car
1416    class Train_Car_Seat_Class
1417    with before [;
1418            Search:
1419               if (self hasnt general) {
1420                  give self general;
1421                  move c9 to player;
1422                  "Good fortune is your friend! You notice a \
1423 forgotten coin stuck in a seat crack, and fend off two \
1424 passengers to grab it.";
1425               }
1426         ],
1427 ;
1428
1429
1430 ! *** ORANGE LINE CAR (Gurth to Aragain)
1431
1432
1433 Object ORANGELINE_car "Subway car"
1434    with description "You are in an underground train car. Various \
1435            people fill the train, some in uncomfortable-looking seats.",
1436         name "car" "people",
1437         n_to ANTHAR_GUSPlatform,  ! we adjust this, see below
1438         out_to ANTHAR_GUSPlatform,
1439         after [;
1440          Go:
1441           if (noun == s_obj or in_obj) {
1442            ! determine boarding location, direction train was
1443            ! traveling 
1444            give self general;  ! we're off and moving...
1445            print "^You squeeze onto the train car. The doors close behind you.^";
1446            if (ORANGELINE_loc == 1 or 2) {
1447               ! Gurth, east
1448               give GURTH_GUSPlatform2 ~general;
1449               ORANGELINE_loc = 3; ! leaving
1450            }
1451            if (ORANGELINE_loc == 5 or 6) {
1452               ! Anthar
1453               give ANTHAR_GUSPlatform ~general;
1454               if (ORANGELINE_dir == 1) {
1455                  ! east
1456                  ORANGELINE_loc = 7;
1457               }
1458               else {
1459                  ! west
1460                  ORANGELINE_loc = 4;
1461               }
1462            }
1463            if (ORANGELINE_loc == 9 or 10) {
1464               ! Aragain, west
1465               give ARAGAIN_GUSPlatform2 ~general;
1466               ORANGELINE_loc = 8;
1467            }
1468           }
1469         ],
1470         before [;
1471           Go:
1472             if (noun == n_obj or out_obj) {
1473                if (self has general)
1474                   "The train is moving right now. Better wait til \
1475                   it stops to get off.";               
1476             }
1477         ],
1478         each_turn [;
1479           ! check location of train, print appropriate msg, 
1480           ! and increment location of train, given direction
1481           if (ORANGELINE_loc == 1) {
1482             ! reached Gurth, dir = S, not moving
1483             give self ~general;
1484             give GURTH_GUSPlatform2 general;
1485             ORANGELINE_dir = 1;
1486             ORANGELINE_loc = 2;
1487             ORANGELINE_car.n_to = GURTH_GUSPlatform2;
1488             ORANGELINE_car.out_to = GURTH_GUSPlatform2;
1489             "^The train suddenly lurches to a stop! A voice from \
1490             somewhere overhead says ~Gurth City station, watch your \
1491             step please.~";
1492           }
1493           if (ORANGELINE_loc == 2) {
1494             ! still in Gurth, not moving
1495             ORANGELINE_loc = 3;
1496             "^A voice overhead says ~Doors will be closing, please \
1497              stand clear.~";
1498           }
1499           if (ORANGELINE_loc == 3) {
1500             if (ORANGELINE_dir == 1) {
1501                ! moving away from Gurth
1502                give self general;
1503                give GURTH_GUSPlatform2 ~general;
1504                ORANGELINE_loc = 4;
1505                "^The train starts to move, quickly exiting the station \
1506                going east.";
1507             }
1508             if (ORANGELINE_dir == 0) {
1509                ! moving towards Gurth
1510                ORANGELINE_loc = 1;  ! We will 'arrive' in Gurth next
1511                "^The train rumbles as it moves.";
1512             }
1513           }
1514           if (ORANGELINE_loc == 4) {
1515             if (ORANGELINE_dir == 0) {
1516                ! We're leaving Anthar
1517                ORANGELINE_loc = 3;
1518                give self general;
1519                give ANTHAR_GUSPlatform ~general;
1520                "^The train starts to move, quickly exiting the station \
1521                going west.";
1522             }
1523             if (ORANGELINE_dir == 1) {
1524                ORANGELINE_loc = 5; 
1525                "^The train rumbles as it moves.";
1526             }
1527           }
1528           if (ORANGELINE_loc == 5) {
1529             ! reached Anthar, stop the train
1530             give self ~general;
1531             give ANTHAR_GUSPlatform general;
1532             ORANGELINE_loc = 6;  ! we'll be stopping for 1 turn
1533             ORANGELINE_car.n_to = ANTHAR_GUSPlatform;
1534             ORANGELINE_car.out_to = ANTHAR_GUSPlatform;
1535             "^The train suddenly lurches to a stop! A voice from \
1536             somewhere overhead says ~Greater Anthar station, watch your \
1537             step please.~";
1538           }
1539           if (ORANGELINE_loc == 6) {
1540             ! about to leave Anthar station
1541             if (ORANGELINE_dir == 0) 
1542                ORANGELINE_loc = 4;
1543             else
1544                ORANGELINE_loc = 7;
1545             "^A voice overhead says ~Doors will be closing, please \
1546              stand clear.~";
1547           }
1548           if (ORANGELINE_loc == 7) {
1549              if (ORANGELINE_dir == 1) {
1550                ! We're leaving Anthar
1551                ORANGELINE_loc = 8;
1552                give self general;
1553                give ANTHAR_GUSPlatform ~general;
1554                "^The train starts to move, quickly exiting the station \
1555                going east.";
1556             }
1557             if (ORANGELINE_dir == 0) {
1558                ORANGELINE_loc = 5;   ! we will arrive in anthar shortly...
1559                "^The train rumbles as it moves.";
1560             }
1561           }
1562           if (ORANGELINE_loc == 8) {
1563             if (ORANGELINE_dir == 0) {
1564                ! we're leaving Aragain
1565                ORANGELINE_loc = 7;
1566                give self general;
1567                give ARAGAIN_GUSPlatform2 ~general;
1568                "^The train starts to move, quickly exiting the station \
1569                going west.";
1570             }
1571             if (ORANGELINE_dir == 1) {
1572                ORANGELINE_loc = 9;  ! will arrive in Aragain
1573                "^The train rumbles as it moves.";
1574             }
1575           }
1576           if (ORANGELINE_loc == 10) {
1577             ! still waiting in Aragain
1578             ORANGELINE_loc = 8;
1579             "^A voice overhead says ~Doors will be closing, please \
1580              stand clear.~";
1581           }
1582           if (ORANGELINE_loc == 9) {
1583             ! arriving in Aragain
1584             ORANGELINE_loc = 10;   
1585             ORANGELINE_dir = 0; ! west
1586             give self ~general;
1587             give ARAGAIN_GUSPlatform2 general;
1588             ORANGELINE_car.n_to = ARAGAIN_GUSPlatform2;
1589             ORANGELINE_car.out_to = ARAGAIN_GUSPlatform2;
1590             "^The train suddenly lurches to a stop! A voice from \
1591             somewhere overhead says ~Aragain station, watch your \
1592             step please.~";
1593           }
1594         ],
1595    has light;
1596
1597 Object ORANGELINE_car_seats "subway seat" ORANGELINE_car
1598    class Train_Car_Seat_Class
1599    with before [;
1600            Search:
1601               if (self hasnt general) {
1602                  give self general;
1603                  move c10 to player;
1604                  "Good fortune is your friend! You notice a \
1605 forgotten coin stuck in a seat crack, and fend off two \
1606 passengers to grab it.";
1607               }
1608         ],
1609 ;
1610
1611
1612 ! *** GREEN LINE (Borphee to Miznia)
1613
1614 Object GREENLINE_car "Subway car"
1615    with description "You are in an underground train car. Various \
1616            people fill the train, some in uncomfortable-looking seats.",
1617         name "car" "people",
1618         e_to BORPHEE_GUSPlatform,  ! we adjust this, see below
1619         out_to BORPHEE_GUSPlatform,
1620         after [;
1621          Go:
1622           if (noun == w_obj or in_obj) {
1623            ! determine boarding location, direction train was
1624            ! traveling 
1625            give self general;  ! we're off and moving
1626            print "^You shove your way onto train car. The doors close behind you.^";
1627            if (GREENLINE_loc == 1 or 2) {
1628               ! Borphee, south
1629               give BORPHEE_GUSPlatform ~general;
1630               GREENLINE_loc = 3; ! leaving
1631            }
1632            if (GREENLINE_loc == 5 or 6) {
1633               ! Gurth
1634               give GURTH_GUSPlatform ~general;
1635               if (GREENLINE_dir == 1) {
1636                  ! South
1637                  GREENLINE_loc = 7;
1638               }
1639               else {
1640                  ! North
1641                  GREENLINE_loc = 4;
1642               }
1643            }
1644            if (GREENLINE_loc == 9 or 10) {
1645               ! Miznia, north
1646               give MIZNIA_GUSPlatform ~general;
1647               GREENLINE_loc = 8;
1648            }
1649           }
1650         ],
1651         before [;
1652           Go:
1653             if (noun == e_obj or out_obj) {
1654                if (self has general)
1655                   "The train is moving right now. Better wait til \
1656                   it stops to get off.";               
1657                if (yupple in self)
1658                   "As you try to get off, the yupple jumps up and gets in your \
1659                   way. ~Wait, wait, we have so much to talk about!~.";
1660             }
1661         ],
1662         each_turn [;
1663           ! check location of train, print appropriate msg, 
1664           ! and increment location of train, given direction
1665           if (GREENLINE_loc == 1) {
1666             ! reached Borphee, dir = S, not moving
1667             give self ~general;
1668             give BORPHEE_GUSPlatform general;
1669             GREENLINE_dir = 1;
1670             GREENLINE_loc = 2;
1671             GREENLINE_car.e_to = BORPHEE_GUSPlatform;
1672             GREENLINE_car.out_to = BORPHEE_GUSPlatform;
1673             "^The train suddenly lurches to a stop! A voice from \
1674             somewhere overhead says ~New Borphee station, watch your \
1675             step please.~";
1676           }
1677           if (GREENLINE_loc == 2) {
1678             ! still in Borphee, not moving
1679             GREENLINE_loc = 3;
1680             "^A voice overhead says ~Doors will be closing, please \
1681              stand clear.~";
1682           }
1683           if (GREENLINE_loc == 3) {
1684             if (GREENLINE_dir == 1) {
1685                ! moving away from Borphee
1686                give self general;
1687                give BORPHEE_GUSPlatform ~general;
1688                GREENLINE_loc = 4;
1689                "^The train starts to move, quickly exiting the station \
1690                going south.";
1691             }
1692             if (GREENLINE_dir == 0) {
1693                ! moving towards BORPHEE
1694                GREENLINE_loc = 1;  
1695                "^The train rumbles as it moves.";
1696             }
1697           }
1698           if (GREENLINE_loc == 4) {
1699             if (GREENLINE_dir == 0) {
1700                ! We're leaving gurth
1701                GREENLINE_loc = 3;
1702                give self general;
1703                give GURTH_GUSPlatform ~general;
1704                "^The train starts to move, quickly exiting the station \
1705                going north.";
1706             }
1707             if (GREENLINE_dir == 1) {
1708                GREENLINE_loc = 5; 
1709                "^The train rumbles as it moves.";
1710             }
1711           }
1712           if (GREENLINE_loc == 5) {
1713             ! reached Gurth, stop the train
1714             give self ~general;
1715             give GURTH_GUSPlatform general;
1716             GREENLINE_loc = 6;  ! we'll be stopping for 1 turn
1717             GREENLINE_car.e_to = GURTH_GUSPlatform;
1718             GREENLINE_car.out_to = GURTH_GUSPlatform;
1719             "^The train suddenly lurches to a stop! A voice from \
1720             somewhere overhead says ~Gurth City station, watch your \
1721             step please.~";
1722           }
1723           if (GREENLINE_loc == 6) {
1724             ! about to leave gurth station
1725             if (GREENLINE_dir == 0) 
1726                GREENLINE_loc = 4;
1727             else
1728                GREENLINE_loc = 7;
1729             "^A voice overhead says ~Doors will be closing, please \
1730              stand clear.~";
1731           }
1732           if (GREENLINE_loc == 7) {
1733              if (GREENLINE_dir == 1) {
1734                ! We're leaving gurth
1735                GREENLINE_loc = 8;
1736                give self general;
1737                give GURTH_GUSPlatform ~general;
1738                "^The train starts to move, quickly exiting the station \
1739                going south.";
1740             }
1741             if (GREENLINE_dir == 0) {
1742                GREENLINE_loc = 5;   ! we will arrive in gurth shortly...
1743                "^The train rumbles as it moves.";
1744             }
1745           }
1746           if (GREENLINE_loc == 8) {
1747             if (GREENLINE_dir == 0) {
1748                ! we're leaving Miznia
1749                GREENLINE_loc = 7;
1750                give self general;
1751                give MIZNIA_GUSPlatform ~general;
1752                "^The train starts to move, quickly exiting the station \
1753                going north.";
1754             }
1755             if (GREENLINE_dir == 1) {
1756                GREENLINE_loc = 9;  
1757                "^The train rumbles as it moves.";
1758             }
1759           }
1760           if (GREENLINE_loc == 10) {
1761             ! still waiting in Miznia
1762             GREENLINE_loc = 8;
1763             "^A voice overhead says ~Doors will be closing, please \
1764              stand clear.~";
1765           }
1766           if (GREENLINE_loc == 9) {
1767             ! arriving in Miznia
1768             GREENLINE_loc = 10;   
1769             GREENLINE_dir = 0; ! north
1770             give self ~general;
1771             give MIZNIA_GUSPlatform general;
1772             GREENLINE_car.e_to = MIZNIA_GUSPlatform;
1773             GREENLINE_car.out_to = MIZNIA_GUSPlatform;
1774             "^The train suddenly lurches to a stop! A voice from \
1775             somewhere overhead says ~Miznia station, watch your \
1776             step please.~";
1777           }
1778         ],
1779    has light;
1780
1781 Object GREENLINE_car_seats "subway seat" GREENLINE_car
1782    class Train_Car_Seat_Class
1783    with before [;
1784            Search:
1785               if (self hasnt general) {
1786                  give self general;
1787                  move c11 to player;
1788                  "Good fortune is your friend! You notice a \
1789 forgotten coin stuck in a seat crack, and fend off two \
1790 passengers to grab it.";
1791               }
1792         ],
1793 ;
1794
1795
1796 ! *** A fake scenery item, to describe the subway cars from outside ***
1797 Object subway_car_fake "subway car"
1798    with name "car" "train",
1799        description [;
1800           print "It's a rather large, sleek-looking train car, oddly colored ";
1801           if (((location==FROSTHAM_GUSPlatform) && (FROSTHAM_GUSPlatform has general)) ||
1802               ((location==ARAGAIN_GUSPlatform) && (ARAGAIN_GUSPlatform has general)) ||
1803               ((location==FUBLIO_GUSPlatform) && (FUBLIO_GUSPlatform has general))) 
1804              "purple.";
1805           if (((location==ANTHAR_GUSPlatform) && (ANTHAR_GUSPlatform has general)) ||
1806               ((location==ARAGAIN_GUSPlatform2) && (ARAGAIN_GUSPlatform2 has general)) ||
1807               ((location==GURTH_GUSPlatform2) && (GURTH_GUSPlatform2 has general))) 
1808              "orange.";
1809           if (((location==BORPHEE_GUSPlatform) && (BORPHEE_GUSPlatform has general)) ||
1810               ((location==GURTH_GUSPlatform) && (GURTH_GUSPlatform has general)) ||
1811               ((location==MIZNIA_GUSPlatform) && (MIZNIA_GUSPlatform has general))) 
1812              "green.";
1813            "You can't see any such thing.";
1814        ],
1815    found_in FROSTHAM_GUSPlatform ARAGAIN_GUSPlatform FUBLIO_GUSPlatform
1816    ANTHAR_GUSPlatform ARAGAIN_GUSPlatform2 GURTH_GUSPlatform2
1817    BORPHEE_GUSPlatform GURTH_GUSPlatform MIZNIA_GUSPlatform,   
1818    before [;
1819       Enter:
1820          "A subway nymph suddenly appears. ~Remember passengers, to \
1821          board the subway cars, you just have to go 'in', or in the \
1822          appropriate direction of the car. Bye!~";
1823    ],
1824    has scenery;
1825                             
1826 Object metal_fence "metal fence"
1827    with name "fence" "barricade",
1828         description "It looks like a smooth metal fence.",
1829         before [;
1830            Climb, JumpOver: 
1831               "A subway worker yells ~Hey pal, no fare-jumpers!";
1832         ],
1833    found_in FROSTHAM_GUSPlatform ARAGAIN_GUSPlatform FUBLIO_GUSPlatform
1834             FROSTHAM_GUSStation ARAGAIN_GUSStation FUBLIO_GUSStation
1835    ANTHAR_GUSPlatform BORPHEE_GUSPlatform GURTH_GUSPlatform MIZNIA_GUSPlatform
1836    ANTHAR_GUSStation BORPHEE_GUSStation GURTH_GUSStation MIZNIA_GUSStation,   
1837    has scenery;            
1838    
1839
1840 ! **************************
1841 ! People/denizens/creatures
1842 ! **************************
1843       
1844 ! Thug, on PURPLE LINE
1845 Object thug "sinister-looking thug" PURPLELINE_car
1846    with name "thug" "hoodlum" "Davey",
1847         description "A thug, clearly. Some scrapper with an attitude, \
1848           and the desire to use it.",
1849         each_turn [ i ;
1850            if (self hasnt general) {
1851               give self general;
1852               "^The sinister-looking thug notices you from the back \
1853               of the car, and approaches. ~Well, well, well,~ he \
1854               says, ~what do we have here?~.";
1855            }
1856            i = random(4);
1857            if (i==1)
1858               "^The thug pokes you in the ribs.";
1859            if (i==2)
1860               "^The thug snarls at you. ~Hey, I'm talking to you, \
1861               Preacher-man.~";
1862            if (i==3)
1863               "^The thug tries to act friendly, and fails.";
1864            if (i==4)
1865               "^The thug scowls. ~You gonna tell me the error of \
1866               my ways, Padre?~";
1867         ],
1868         life [;
1869            Attack:
1870               "As you move to show the rake a lesson, you notice \
1871               several more thugs in the background, eyeing your every \
1872               move. The thug smiles as you back-off, cautiously.";      
1873            default:  "The thug is too busy being sinister.";
1874         ],
1875         before [;
1876            Cast:
1877               if (the_spell_was == espnis_spell) {
1878                  remove thug;
1879                  "You begin to extol the virtues of bedtime prayers, \
1880                  and the thug starts to yawn. Soon, his eyes blink \
1881                  slowly, and before long, he nods off to sleep! Two \
1882                  subway police officers, hiding until now, get up the \
1883                  nerve to capture the snoring thug, and drag him \
1884                  off, disappearing into the throng of people.";
1885               }
1886               if (the_spell_was == foblub_spell) {
1887                  "You give the thug a timely sermon on the \
1888 folly of crime in a moral society. He seems momentarily \
1889 fascinated. Too bad he wasn't actually sitting in anything."; 
1890               }
1891         ],        
1892    has animate;
1893         
1894 ! Annoying Yupple, on GREEN LINE (kinda a cross between a yuppie and a yipple)
1895 Object yupple "annoying yupple" GREENLINE_car
1896    with name "yupple" "annoying",
1897         description "A young yupple, immaculately dressed in a pinstripe \
1898           three-piece suit and tie.",
1899         article "an", 
1900         each_turn [ i ;
1901            if (self hasnt general) {
1902               give self general;
1903               "^The annoying-looking yupple notices you from the back \
1904               of the car, and approaches. ~A priest,~ he \
1905               says, ~Just the person I was looking for.~ He \
1906               squeezes into a seat near you.";
1907            }
1908            i = random(4);
1909            if (i==1)
1910               "^The yupple talks unceasingly about rainfall in some \
1911               place called ~the Amazon basin~.";
1912            if (i==2)
1913               "^The yupple smiles brightly. ~There's so much I have to \
1914               talk about!~";
1915            if (i==3)
1916               "^The yupple drones on about the science behind large \
1917               corporate takeovers.";
1918            if (i==4)
1919               "^The yupple laughs -- a sound somewhat like a snoring \
1920               bloodworm. ~So the guy says, 'I thought you meant my _wife_.' \
1921               Get it? Wife?~";
1922         ],
1923         life [;
1924            Attack:
1925               "Much as you'd like to, that's just something the \
1926               Order would probably frown upon.";              
1927         ],
1928         before [;
1929            Cast:
1930               if (the_spell_was == espnis_spell) {
1931                  "You give a sermon on the dangers of \
1932 improper bathtub caulking, but the yupple seems quite \
1933 fascinated. ~That reminds me of...~ You cringe.";
1934               }
1935               if (the_spell_was == foblub_spell) {
1936                  remove self;
1937                  "You draw a stunning parallel between corporate \
1938 morality and monarchy ruling. The yupple's jaw drops. ~I've got \
1939 to tell my boss that,~ he says, and tries to leave his seat, \
1940 but finds himself stuck fast. Several passengers nearby \
1941 take the opportunity to remove the yupple (seat included) to \
1942 a different part of the train.";
1943               }
1944         ],        
1945    has animate;
1946
1947
1948 ! **************************
1949 ! misc objects
1950 ! **************************
1951
1952 Object c9 "coin" class coin_class;
1953 Object c10 "coin" class coin_class;
1954 Object c11 "coin" class coin_class;
1955
1956 ! (Some common objects associated with GUS)
1957 Object GUS_sign "Sign" 
1958    with name "sign" "circular" "pole" "GUS",
1959         initial "Standing on a tall pole next to the stairs is \
1960                  a circular sign.",
1961         description "The sign reads ~GUS~, and has an arrow \
1962                      pointing down.",
1963         found_in FROSTHAM_GUSStop ARAGAIN_GUSStop ANTHAR_GUSStop
1964                  FUBLIO_GUSStop BORPHEE_GUSStop MIZNIA_GUSStop
1965                  GURTH_GUSStop,
1966    has static;
1967
1968
1969 Object GUS_brochure "subway brochure" FROSTHAM_Governer1
1970    with name "brochure" "subway" "GUS",
1971         description "\
1972            ~The Great Underground Subway~^^
1973            Adventurers who really need to get where they're going \
1974            in a hurry are going to love GUS! The new underground \
1975            high-speed rail system can be your personal ride to the \
1976            major travel points in Quendor, for just one mere zorkmid! \
1977            For Eastland travel to Frostham, Aragain and Fublio Valley, \
1978            the Purple line is at your service! For Westland travel \
1979            to New Borphee, Gurth City and Miznia, just jump on board \
1980            the Green line! And for you folks who need to get across \
1981            the Great Sea in a hurry, don't forget the Orange line, \
1982            stopping off at Aragain, Anthar and Gurth City! Remember, \
1983            there's no costs for transferring between lines either. \
1984            So don't delay, take the GUS today!",
1985     ! weight 5, 
1986     size 10,
1987 ;
1988         
1989 Object newspaper "newspaper" PURPLELINE_car
1990    with name "newspaper" "paper",
1991         initial "There's a discarded newspaper in a seat nearby.",
1992         description "A copy of ~The Fublio Tribune~, with \
1993         news, sports and feature sections to read about.",
1994         before
1995             [ w1; Consult:
1996             if (consult_words > 1)
1997                "Try reading about 'news', 'sports' or 'features'.";
1998             wn = consult_from; w1 = NextWord();
1999             switch (w1) {
2000                'news', 'headline', 'headlines':
2001                   "The news section has three major stories. \
2002 The headliner is the continued failure to resolve peace in the \
2003 Kobold war in southern Egreth. Recently, various troops have \
2004 been cut-off from the main camps by clever kobold raiding groups. \
2005 ^^A second story details the shocking death of a GUE Tech student \
2006 found in the subway tunnels in Gurth City Station, the apparent \
2007 victim of a GUS train. ~Don't know how he got in there.~ a \
2008 subway worker is quoted as saying.^^\
2009 Finally, a sad local news story about a nice couple in Fublio \
2010 valley who recently were victims of the kidnaping of their son. No \
2011 leads as of yet.";
2012                'sports':
2013                "Apparently, the golem brothers at Flathead \
2014 Stadium have amassed an amazing 322-0 win streak.";
2015                'features', 'feature':
2016                "The paper points out that culture seekers \
2017 should check out the newly discovered Leonardo Flathead \
2018 painting on exhibit at the Royal Museum.";     
2019                'ads', 'classified':
2020                "~FOR SALE: A new IF game -- 'SPIRITWRAK'. \
2021                Price: $0.00~";
2022                'comics', 'funnies':
2023                "No comics section. Bummer.";
2024                default: "You can't find anything in the paper about that.";             
2025             }
2026             ],
2027         ! weight 15, 
2028         size 15,
2029 ;
2030
2031 ! **************************
2032 ! spells & scrolls
2033 ! **************************