|
|
1.1 root 1: ROUTINE VisP;
2: VisP = { (Visp List Propno) => True IFF an object }
3: (($eq %1 0) : ($rtrn FALSE)) { is visible on List that has Propno }
4: (($prop %1 %2) :
5: ($rtrn TRUE)) { Found one! }
6: (($or ($prop %1 OPEN)
7: ($prop %1 TRANS)): { Look inside...}
8: ( (VisP ($cont %1) %2): ($rtrn TRUE) ))
9: ($rtrn (VisP ($link %1) %2))
10: ;
11:
12: ROUTINE Reach; { (Reach obj loc) => True IFF the obj }
13: Reach = { IS the loc or can be reached }
14: (($eq %2 0) : ($rtrn FALSE)) { by the loc }
15: (($eq %1 %2): ($rtrn TRUE))
16: { Still explore inside }
17: (($prop %2 OPEN):
18: ((Reach %1 ($cont %2)): ($rtrn TRUE))
19: )
20: ($rtrn (Reach %1 ($link %2)))
21:
22: ;
23:
24: ROUTINE See; { (See obj loc) => True IFF the obj }
25: See = { IS the loc or can be seen }
26: (@DARKG: ($rtrn FALSE)) { Can't see in a dark room! }
27: (($eq %2 0) : ($rtrn FALSE))
28: (($eq %1 %2): ($rtrn TRUE))
29: (($or ($prop %2 TRANS) { Still explore inside }
30: ($prop %2 OPEN)):
31: ((See %1 ($cont %2)): ($rtrn TRUE))
32: )
33: ($rtrn (See %1 ($link %2)))
34: ;
35:
36: Avail =
37: (($eq ($loc %1) .ME) : ($rtrn TRUE)) { shd be closure, really }
38: (($not %1):($say "The what?\n")($exit 1))
39: (($not (See %1 ($cont ($loc .ME)))):
40: ($say "I can't see that item here.\n")
41: ($exit 1)
42: )
43: (($not (Reach %1 ($cont ($loc .ME)))):
44: ($say "I can't get at that item.\n")
45: ($exit 1)
46: )
47: (($and ($prop .ME SHRNK)
48: ($not ($prop %1 SHRNK)) ):
49: (($ne ($loc %1) .ME):
50: ($say
51: "Right now, ")(($sdisc %1))($say " is too big for you to deal with.\n")
52: ($exit 1)
53: )
54: )
55: ($rtrn TRUE)
56: ;
57:
58: ROUTINE LitP;
59: LitP = { (LitP Room) => True IFF Room is lit }
60: (($prop %1 LIGHT) : ($rtrn TRUE))
61: (($or (VisP ($cont %1) LIGHT)
62: (VisP ($cont %1) FLAME)): ($rtrn TRUE))
63:
64: (($or (VisP ($cont .ME) LIGHT) { Check .ME 'cause invisibl }
65: (VisP ($cont .ME) FLAME)): ($rtrn TRUE))
66: ($rtrn FALSE)
67: ;
68:
69: ROUTINE Blank;
70: Blank = { Blank n => Type n blanks }
71: (($gt %1 0):
72: ($say " ")
73: (Blank ($minus %1 1)));
74:
75: ROUTINE Llook; ROUTINE Slook;
76: Llook = { (Llook Level Object) describes Object }
77: (($eq %2 0) : ($exit 0))
78: (($eq %1 0) : { Level 0 == This is a room. Check lighting }
79: ((LitP %2):
80: ($setg DARKG FALSE)
81: (($ldisc %2)) { Talk about the room }
82: (($not @DARKG):
83: (Llook 1 ($cont %2)) { Talk about its contents }
84: )
85: {else}:
86: ($say "It's mighty dark in here!\n")
87: ($setg DARKG TRUE)
88: )
89:
90: {else} : { Level > 0 == This is a list of objs }
91: ( ($ldisc %2) : { Talk (only) about the visible }
92: (Blank %1) { Indent }
93: (($ldisc %2)) { Blurb the object }
94:
95: ( ($cont %2): { something inside it...}
96: (($or ($prop %2 OPEN)($prop %2 TRANS)):
97: (Blank %1)
98: ($say "It contains:\n")
99: ($setp %2 CONTS TRUE)
100: (Slook ($plus %1 1) ($cont %2))
101: { Short descriptions for contents }
102: )
103: )
104: )
105: (Llook %1 ($link %2))
106: );
107:
108:
109: Slook = { (Llook Level Object) describes Object }
110: (($eq %2 0) : ($exit 0))
111: (($eq %1 0) : { Level 0 == This is a room. Check lighting }
112: ((LitP %2):
113: ($setg DARKG FALSE)
114: (($sdisc %2)) { Talk about the room }
115: (($not @DARKG):
116: ($setp %2 CONTS FALSE)
117: (Slook 1 ($cont %2)) { Talk about its contents }
118: )
119: {else}:
120: ($say "It's mighty dark in here!\n")
121: ($setg DARKG TRUE)
122: )
123:
124: {else} : { Level > 0 == This is a list of objs }
125: (($sdisc %2) : { Talk (only) about the visible }
126: (($not ($prop ($loc %2) CONTS)):
127: (Blank ($minus %1 1))
128: ($say "You can see:\n")
129: ($setp ($loc %2) CONTS TRUE)
130: )
131: (Blank %1) { Indent }
132: (($sdisc %2)) { Blurb the object }
133: (($and ($ne ($cont %2) 0) { something inside it...}
134: ($or ($prop %2 OPEN) {...and you can see it }
135: ($prop %2 TRANS)
136: )
137: ):
138:
139: ($setp %2 CONTS TRUE)
140: ($say ", containing:\n")
141: (Slook ($plus %1 1) ($cont %2))
142: { Short descriptions for contents }
143: : ($say "\n")
144:
145: )
146: )
147: ( Slook %1 ($link %2))
148:
149: );
150:
151:
152:
153:
154: LOOK =
155:
156:
157:
158: ($setg WASDK @DARKG)
159: (@LOOKP :
160: (($prop ($loc .ME) VISIT):
161: (Slook 0 ($loc .ME))
162: {else} :
163: (Llook 0 ($loc .ME))
164: ($setp ($loc .ME) VISIT TRUE)
165: )
166: (@DARKG : ($setp ($loc .ME) VISIT FALSE))
167: )
168: ($setg LOOKP FALSE)
169: ($itun)
170: ($say "\n> ")
171: ;
172:
173: ROUTINE GrowX; ROUTINE ShrnX;
174: GrowX = (($prop %1 SHRNK):
175: ($setp %1 SHRNK FALSE)
176: (($cont %1):
177: (GrowX ($cont %1)))
178: (($link %1):
179: (GrowX ($link %1)))
180: )
181: ;
182:
183: Grow = (($prop .ME SHRNK):
184: ($setp .ME SHRNK FALSE)
185: (($cont .ME):
186: (GrowX ($cont .ME)))
187: )
188: ;
189:
190: ShrnX = (($not ($prop %1 SHRNK)):
191: ($setp %1 SHRNK TRUE)
192: (($cont %1):
193: (ShrnX ($cont %1)))
194: (($link %1):
195: (ShrnX ($link %1)))
196: {else} :
197: ($say "You hear a tiny POP as ")(($sdisc %1))
198: ($say " vanishes completely!\n")
199: (($link %1):
200: (ShrnX ($link %1)))
201: ($move %1 .ALL)
202: )
203:
204: ;
205:
206: Shrink = (($not ($prop .ME SHRNK)):
207: ($setp .ME SHRNK TRUE)
208: (($cont .ME):
209: (ShrnX ($cont .ME)))
210: )
211: ;
212:
213: WzTgl = { Toggle the Wizard flag }
214: ($setg Wizrd ($not @Wizrd))
215: (@Wizrd:
216: ($say
217: "You hear a low rumble of thunder, shaking the very ground on
218: which you stand. Suddenly, there is a blazing flash of light!!
219: You are unharmed, but feal great power flowing in your body.\n")
220: {else}:
221: ($say
222: "Your wizardly powers unceremoniously fade away.\n")
223: );
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.