Skip to content

Commit e5e0b76

Browse files
authored
Merge pull request #9 from daelsepara/master-refactor
update engine
2 parents 5ede218 + f620ee0 commit e5e0b76

File tree

7 files changed

+1162
-808
lines changed

7 files changed

+1162
-808
lines changed

src/common.zil

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
<CONSTANT TEXT "This story has not been written yet.">
2+
3+
; "jump routines (skill/item/codeword)"
4+
; ---------------------------------------------------------------------------------------------
5+
<ROUTINE SKILL-JUMP (SKILL STORY)
6+
<COND (<CHECK-SKILL .SKILL> <STORY-JUMP .STORY>)>>
7+
8+
<ROUTINE ITEM-JUMP (ITEM STORY)
9+
<COND (<CHECK-ITEM .ITEM> <STORY-JUMP .STORY>)>>
10+
11+
<ROUTINE CODEWORD-JUMP (CODEWORD STORY)
12+
<COND (<CHECK-CODEWORD .CODEWORD> <STORY-JUMP .STORY>)>>
13+
14+
; "lost skills: moves 'lost' skills to LOST-SKILLS container"
15+
; ---------------------------------------------------------------------------------------------
16+
<OBJECT LOST-SKILLS
17+
(DESC "skills lost")
18+
(SYNONYM SKILLS)
19+
(ADJECTIVE LOST)
20+
(FLAGS CONTBIT OPENBIT)>
21+
22+
<ROUTINE LOSE-SKILL (SKILL)
23+
<COND (<AND .SKILL <CHECK-SKILL .SKILL>>
24+
<CRLF>
25+
<HLIGHT ,H-BOLD>
26+
<TELL "You lost " T .SKILL " skill">
27+
<TELL ,PERIOD-CR>
28+
<HLIGHT 0>
29+
<MOVE .SKILL ,LOST-SKILLS>
30+
)>>
31+
32+
<ROUTINE LOSE-SKILLS ("OPT" MAX)
33+
<COND (<NOT .MAX> <SET MAX 1>)>
34+
<LOSE-STUFF ,SKILLS ,LOST-SKILLS "skill" .MAX RESET-SKILLS>>
35+
36+
37+
; "deaths"
38+
; ---------------------------------------------------------------------------------------------
39+
<CONSTANT DIED-IN-COMBAT "You died in combat">
40+
<CONSTANT DIED-OF-HUNGER "You died of hunger">
41+
<CONSTANT DIED-GREW-WEAKER "You grew weaker and eventually died">
42+
<CONSTANT DIED-FROM-INJURIES "You died from your injuries">
43+
<CONSTANT DIED-FROM-COLD "You eventually freeze to death">
44+
<CONSTANT DIED-OF-THIRST "You go mad from thirst">
45+
<CONSTANT KILLED-AT-ONCE "You are killed at once">
46+
47+
; "miscellaneous notifications"
48+
; ---------------------------------------------------------------------------------------------
49+
<CONSTANT NATURAL-HARDINESS "Your natural hardiness made you cope better with the situation">
50+
51+
; "helper functions/constants when damage is dealt to player"
52+
; ---------------------------------------------------------------------------------------------
53+
<ROUTINE PREVENT-DEATH ("OPT" STORY)
54+
<COND (<NOT .STORY> <SET STORY ,HERE>)>
55+
<COND (<GETP .STORY ,P?DEATH> <PUTP .STORY ,P?DEATH F>)>>
56+
57+
<ROUTINE TEST-MORTALITY (DAMAGE MESSAGE "OPT" STORY)
58+
<COND (<NOT .STORY> <SET .STORY ,HERE>)>
59+
<COND (<G? .DAMAGE 0>
60+
<LOSE-LIFE .DAMAGE .MESSAGE .STORY>
61+
)(ELSE
62+
<PREVENT-DEATH .STORY>
63+
)>>
64+
65+
<ROUTINE DELETE-CODEWORD (CODEWORD)
66+
<COND (<AND .CODEWORD <CHECK-CODEWORD .CODEWORD>>
67+
<CRLF>
68+
<TELL "[You lose the codeword ">
69+
<HLIGHT ,H-BOLD>
70+
<TELL D .CODEWORD "]" CR>
71+
<HLIGHT 0>
72+
<REMOVE .CODEWORD>
73+
)>>
74+
75+
<ROUTINE KEEP-ITEM (ITEM "OPT" JUMP)
76+
<CRLF>
77+
<TELL "Keep " T .ITEM "?">
78+
<COND (<YES?>
79+
<COND (<NOT <CHECK-ITEM .ITEM>> <TAKE-ITEM .ITEM>)>
80+
<COND (.JUMP <STORY-JUMP .JUMP>)>
81+
<RTRUE>
82+
)>
83+
<COND (<CHECK-ITEM .ITEM> <LOSE-ITEM .ITEM>)>
84+
<RFALSE>>
85+
86+
<ROUTINE GET-NUMBER (MESSAGE "OPT" MINIMUM MAXIMUM "AUX" COUNT)
87+
<REPEAT ()
88+
<CRLF>
89+
<TELL .MESSAGE>
90+
<COND (<AND <OR <ASSIGNED? MINIMUM> <ASSIGNED? MAXIMUM>> <G? .MAXIMUM .MINIMUM>>
91+
<TELL " (" N .MINIMUM "-" N .MAXIMUM ")">
92+
)>
93+
<TELL "? ">
94+
<READLINE>
95+
<COND (<EQUAL? <GETB ,LEXBUF 1> 1> <SET COUNT <CONVERT-TO-NUMBER 1 10>>
96+
<COND (<OR .MINIMUM .MAXIMUM>
97+
<COND (<AND <G=? .COUNT .MINIMUM> <L=? .COUNT .MAXIMUM>> <RETURN>)>
98+
)(<G? .COUNT 0>
99+
<RETURN>
100+
)>
101+
)>
102+
>
103+
<RETURN .COUNT>>
104+
105+
<ROUTINE ADD-QUANTITY (OBJECT "OPT" AMOUNT CONTAINER "AUX" QUANTITY CURRENT)
106+
<COND (<NOT .OBJECT> <RETURN>)>
107+
<COND (<L=? .AMOUNT 0> <RETURN>)>
108+
<COND (<NOT .CONTAINER> <SET CONTAINER ,PLAYER>)>
109+
<COND (<EQUAL? .CONTAINER ,PLAYER>
110+
<DO (I 1 .AMOUNT)
111+
<TAKE-ITEM .OBJECT>
112+
>
113+
)(ELSE
114+
<SET CURRENT <GETP .OBJECT ,P?QUANTITY>>
115+
<SET QUANTITY <+ .CURRENT .AMOUNT>>
116+
<PUTP .OBJECT ,P?QUANTITY .QUANTITY>
117+
)>>
118+
119+
<ROUTINE TAKE-QUANTITIES (OBJECT PLURAL MESSAGE "OPT" AMOUNT)
120+
<CRLF>
121+
<TELL "Take the " .PLURAL "?">
122+
<COND (<YES?> <ADD-QUANTITY .OBJECT <GET-NUMBER .MESSAGE 0 .AMOUNT> ,PLAYER>)>>
123+
124+
<ROUTINE BUY-STUFF (ITEM PLURAL PRICE "OPT" LIMIT "AUX" QUANTITIES)
125+
<COND (<NOT .LIMIT> <SET LIMIT 8>)>
126+
<COND (<G=? ,MONEY .PRICE>
127+
<CRLF>
128+
<TELL "Buy " D .ITEM " for " N .PRICE " " D ,CURRENCY " each?">
129+
<COND (<YES?>
130+
<REPEAT ()
131+
<SET QUANTITIES <GET-NUMBER "How many will you buy" 0 .LIMIT>>
132+
<COND (<G? .QUANTITIES 0>
133+
<COND (<L=? <* .QUANTITIES .PRICE> ,MONEY>
134+
<CRLF>
135+
<HLIGHT ,H-BOLD>
136+
<TELL "You purchased " N .QUANTITIES " ">
137+
<COND (<G? .QUANTITIES 1> <TELL .PLURAL>)(ELSE <TELL D .ITEM>)>
138+
<TELL ,PERIOD-CR>
139+
<CHARGE-MONEY <* .QUANTITIES .PRICE>>
140+
<ADD-QUANTITY .ITEM .QUANTITIES>
141+
<COND (<L? ,MONEY .PRICE> <RETURN>)>
142+
)(ELSE
143+
<EMPHASIZE "You can't afford that!">
144+
)>
145+
)(ELSE
146+
<RETURN>
147+
)>
148+
>
149+
)>
150+
)>>
151+
152+
<ROUTINE SELL-STUFF (ITEM PLURAL PRICE "AUX" (ITEMS-SOLD 0) (QUANTITY 0))
153+
<COND (<CHECK-ITEM .ITEM>
154+
<SET QUANTITY <GETP .ITEM ,P?QUANTITY>>
155+
<CRLF>
156+
<TELL "Sell " D .ITEM " at " N .PRICE " " D ,CURRENCY " each?">
157+
<COND (<YES?>
158+
<SET ITEMS-SOLD <GET-NUMBER "How many will you sell" 0 .QUANTITY>>
159+
<COND (<G? .ITEMS-SOLD 0>
160+
<SETG ,MONEY <+ ,MONEY <* .ITEMS-SOLD .PRICE>>>
161+
<SET .QUANTITY <- .QUANTITY .ITEMS-SOLD>>
162+
<CRLF>
163+
<TELL "You sold " N .ITEMS-SOLD " ">
164+
<HLIGHT ,H-BOLD>
165+
<COND (<G? .ITEMS-SOLD 1> <TELL .PLURAL>)(ELSE <TELL D .ITEM>)>
166+
<HLIGHT 0>
167+
<TELL ,PERIOD-CR>
168+
<COND (<G? .QUANTITY 0>
169+
<PUTP .ITEM ,P?QUANTITY .QUANTITY>
170+
)(ELSE
171+
<PUTP .ITEM ,P?QUANTITY 1>
172+
<REMOVE .ITEM>
173+
)>
174+
)>
175+
)>
176+
)>>
177+
178+
<ROUTINE TAKE-STUFF (ITEM PLURAL "OPT" AMOUNT "AUX" TAKEN)
179+
<COND (<NOT .AMOUNT> <SET .AMOUNT 1>)>
180+
<CRLF>
181+
<TELL "Take the ">
182+
<COND (<G? .AMOUNT 1> <TELL .PLURAL>)(<TELL D .ITEM>)>
183+
<TELL "?">
184+
<COND (<YES?>
185+
<COND (<G? .AMOUNT 1>
186+
<SET TAKEN <GET-NUMBER "How many will you take" 0 .AMOUNT>>
187+
<ADD-QUANTITY .ITEM .AMOUNT ,PLAYER>
188+
<RETURN .TAKEN>
189+
)(ELSE
190+
<TAKE-ITEM .ITEM>
191+
<RETURN 1>
192+
)>
193+
)>
194+
<RETURN 0>>
195+
196+
<ROUTINE LOSE-STUFF (CONTAINER LOST-CONTAINER ITEM "OPT" MAX ACTION "AUX" (COUNT 0) ITEMS)
197+
<COND (<NOT .MAX> <SET MAX 1>)>
198+
<COND (<G? <COUNT-CONTAINER .CONTAINER> .MAX>
199+
<RESET-TEMP-LIST>
200+
<SET ITEMS <COUNT-CONTAINER .CONTAINER>>
201+
<DO (I 1 .ITEMS)
202+
<SET COUNT <+ .COUNT 1>>
203+
<COND (<L=? .COUNT .ITEMS>
204+
<PUT TEMP-LIST .COUNT <GET-ITEM .I .CONTAINER>>
205+
)>
206+
>
207+
<REPEAT ()
208+
<COND (.ACTION <APPLY .ACTION>)>
209+
<SELECT-FROM-LIST TEMP-LIST .COUNT .MAX .ITEM .CONTAINER "retain">
210+
<COND (<EQUAL? <COUNT-CONTAINER .CONTAINER> .MAX>
211+
<CRLF>
212+
<TELL "You have selected: ">
213+
<PRINT-CONTAINER .CONTAINER>
214+
<CRLF>
215+
<TELL "Do you agree?">
216+
<COND (<YES?> <RETURN>)>
217+
)(ELSE
218+
<CRLF>
219+
<HLIGHT ,H-BOLD>
220+
<TELL "You must select " N .MAX " " .ITEM>
221+
<COND (<G? .MAX 1> <TELL "s">)>
222+
<TELL ,PERIOD-CR>
223+
<HLIGHT 0>
224+
)>
225+
>
226+
<DO (I 1 .COUNT)
227+
<COND (<NOT <IN? <GET TEMP-LIST .I> .CONTAINER>>
228+
<MOVE <GET TEMP-LIST .I> .LOST-CONTAINER>
229+
)>
230+
>
231+
)>>

src/currency.zil

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<OBJECT CURRENCY (DESC "gold")>

src/endings.zil

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
; "story endings"
2+
; ---------------------------------------------------------------------------------------------
3+
<CONSTANT BAD-ENDING "The adventure is over. The Forest of Arden is doomed.|">
4+
5+
<CONSTANT GOOD-ENDING "The adventure is over. You saved the Forest of Arden! Congratulations!|">
6+

0 commit comments

Comments
 (0)