|
| 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 | + )>> |
0 commit comments