Mercurial > hg > early-roguelike
comparison srogue/rogue.h @ 36:2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
author | elwin |
---|---|
date | Thu, 25 Nov 2010 12:21:41 +0000 |
parents | |
children | 15f8229f38c1 |
comparison
equal
deleted
inserted
replaced
35:05018c63a721 | 36:2128c7dc8a40 |
---|---|
1 /* | |
2 * Rogue definitions and variable declarations | |
3 * | |
4 * @(#)rogue.h 9.0 (rdk) 7/17/84 | |
5 * | |
6 * Super-Rogue | |
7 * Copyright (C) 1984 Robert D. Kindelberger | |
8 * All rights reserved. | |
9 * | |
10 * Based on "Rogue: Exploring the Dungeons of Doom" | |
11 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | |
12 * All rights reserved. | |
13 * | |
14 * See the file LICENSE.TXT for full copyright and licensing information. | |
15 */ | |
16 | |
17 #ifdef BSD | |
18 #include "cx.h" | |
19 #endif | |
20 | |
21 | |
22 #include <ctype.h> | |
23 #include <curses.h> | |
24 | |
25 #ifdef ATT | |
26 #define CBREAK FALSE | |
27 #define _IOSTRG 01 | |
28 #endif | |
29 | |
30 #define reg register /* register abbr. */ | |
31 | |
32 /* | |
33 * Maximum number of different things | |
34 */ | |
35 | |
36 #define NCOLORS 32 | |
37 #define NSYLS 159 | |
38 #define NSTONES 35 | |
39 #define NWOOD 24 | |
40 #define NMETAL 15 | |
41 | |
42 #define MAXDAEMONS 20 | |
43 | |
44 #define TYPETRAPS 9 /* max types of traps */ | |
45 #define MAXROOMS 9 /* max rooms per level */ | |
46 #define MAXTHINGS 9 /* max things on each level */ | |
47 #define MAXOBJ 9 /* max goodies on each level */ | |
48 #define MAXPACK 23 /* max things this hero can carry */ | |
49 #define MAXTRAPS 10 /* max traps per level */ | |
50 #define MAXMONS 52 /* max available monsters */ | |
51 #define MONRANGE 20 /* max # of monsters avail each level */ | |
52 #define AMLEVEL 35 /* earliest level that amulet can appear */ | |
53 #define MAXPURCH 4 /* max purchases in trading post */ | |
54 #define MINABIL 3 /* minimum for any ability */ | |
55 #define MAXSTR 24 /* maximum strength */ | |
56 #define MAXOTHER 18 /* maximum wis, dex, con */ | |
57 #define NORMAC 10 /* normal hero armor class (no armor) */ | |
58 #define MONWIS 10 /* monsters standard wisdom */ | |
59 | |
60 #define NORMLEV 0 /* normal level */ | |
61 #define POSTLEV 1 /* trading post level */ | |
62 #define MAZELEV 2 /* maze level */ | |
63 | |
64 #define NORMFOOD 0 /* normal food's group no. */ | |
65 #define FRUITFOOD 1 /* fruit's group no. */ | |
66 #define NEWGROUP 2 /* start of group no. other than food */ | |
67 | |
68 #define NUMTHINGS 8 /* types of goodies for hero */ | |
69 #define TYP_POTION 0 | |
70 #define TYP_SCROLL 1 | |
71 #define TYP_FOOD 2 | |
72 #define TYP_WEAPON 3 | |
73 #define TYP_ARMOR 4 | |
74 #define TYP_RING 5 | |
75 #define TYP_STICK 6 | |
76 #define TYP_AMULET 7 | |
77 | |
78 #define V_PACK 3600 /* max volume in pack */ | |
79 #define V_POTION 50 /* volume of potion */ | |
80 #define V_SCROLL 80 /* volume of scroll */ | |
81 #define V_FOOD 35 /* volume of food */ | |
82 #define V_WEAPON 0 /* volume of weapon (depends on wep) */ | |
83 #define V_ARMOR 0 /* volume of armor (depends on armor) */ | |
84 #define V_RING 20 /* volume of ring */ | |
85 #define V_STICK 0 /* volume of stick (depends on staff/wand) */ | |
86 #define V_AMULET 30 /* volume of amulet */ | |
87 | |
88 #define V_WS_STAFF 200 /* volume of a staff */ | |
89 #define V_WS_WAND 110 /* volume of a wand */ | |
90 #define W_WS_STAFF 100 /* weight of a staff */ | |
91 #define W_WS_WAND 60 /* weight of a wand */ | |
92 | |
93 #define FROMRING 2 | |
94 #define DONTCARE -1 | |
95 #define ANYTHING -1,-1 /* DONTCARE, DONTCARE */ | |
96 | |
97 #define K_ARROW 240 /* killed by an arrow */ | |
98 #define K_DART 241 /* killed by a dart */ | |
99 #define K_BOLT 242 /* killed by a bolt */ | |
100 #define K_POOL 243 /* killed by drowning */ | |
101 #define K_ROD 244 /* killed by an exploding rod */ | |
102 #define K_SCROLL 245 /* killed by a burning scroll */ | |
103 #define K_STONE 246 /* killed by materializing in rock */ | |
104 #define K_STARVE 247 /* killed by starvation */ | |
105 /* | |
106 * return values for get functions | |
107 */ | |
108 | |
109 #define NORM 0 /* normal exit */ | |
110 #define QUIT 1 /* quit option setting */ | |
111 #define MINUS 2 /* back up one option */ | |
112 | |
113 /* | |
114 * Return values for games end | |
115 */ | |
116 #define KILLED 0 /* hero was killed */ | |
117 #define CHICKEN 1 /* hero chickened out (quit) */ | |
118 #define WINNER 2 /* hero was a total winner */ | |
119 | |
120 /* | |
121 * return values for chase routines | |
122 */ | |
123 #define CHASE 0 /* continue chasing hero */ | |
124 #define FIGHT 1 /* fight the hero */ | |
125 #define GONER 2 /* chaser fell into a trap */ | |
126 | |
127 /* | |
128 * All the fun defines | |
129 */ | |
130 #define next(ptr) (*ptr).l_next | |
131 #define prev(ptr) (*ptr).l_prev | |
132 #define ldata(ptr) (*ptr).l_data | |
133 #define OBJPTR(what) (struct object *)((*what).l_data) | |
134 #define THINGPTR(what) (struct thing *)((*what).l_data) | |
135 | |
136 #define inroom(rp, cp) (\ | |
137 (cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && \ | |
138 (rp)->r_pos.x <= (cp)->x && (cp)->y <= (rp)->r_pos.y + \ | |
139 ((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y) | |
140 | |
141 #define unc(cp) (cp).y, (cp).x | |
142 #define cmov(xy) move((xy).y, (xy).x) | |
143 #define DISTANCE(y1,x1,y2,x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1)) | |
144 #define when break;case | |
145 #define otherwise break;default | |
146 #define until(expr) while(!(expr)) | |
147 | |
148 #define ce(a, b) ((a).x == (b).x && (a).y == (b).y) | |
149 #define draw(window) wrefresh(window) | |
150 | |
151 #define hero player.t_pos | |
152 #define pstats player.t_stats | |
153 #define pack player.t_pack | |
154 | |
155 #define herowis() (getpwis(him)) | |
156 #define herodex() (getpdex(him,FALSE)) | |
157 #define herostr() (pstats.s_ef.a_str) | |
158 #define herocon() (pstats.s_ef.a_con) | |
159 | |
160 #define attach(a,b) _attach(&a,b) | |
161 #define detach(a,b) _detach(&a,b) | |
162 #define free_list(a) _free_list(&a) | |
163 #ifndef max | |
164 #define max(a, b) ((a) > (b) ? (a) : (b)) | |
165 #endif | |
166 #define goingup() (level < max_level) | |
167 | |
168 #define on(thing, flag) (((thing).t_flags & flag) != 0) | |
169 #define off(thing, flag) (((thing).t_flags & flag) == 0) | |
170 #undef CTRL | |
171 #define CTRL(ch) (ch & 0x1F) | |
172 | |
173 #define ALLOC(x) malloc((unsigned int) x) | |
174 #define FREE(x) free((char *) x) | |
175 #define EQSTR(a, b, c) (strncmp(a, b, c) == 0) | |
176 #define GOLDCALC (rnd(50 + 10 * level) + 2) | |
177 #define ISMULT(type) (type == POTION || type == SCROLL || type == FOOD) | |
178 | |
179 #define newgrp() ++group | |
180 #define o_charges o_ac | |
181 | |
182 | |
183 /* | |
184 * Things that appear on the screens | |
185 */ | |
186 #define PASSAGE '#' | |
187 #define DOOR '+' | |
188 #define FLOOR '.' | |
189 #define PLAYER '@' | |
190 #define POST '^' | |
191 #define MAZETRAP '\\' | |
192 #define TRAPDOOR '>' | |
193 #define ARROWTRAP '{' | |
194 #define SLEEPTRAP '$' | |
195 #define BEARTRAP '}' | |
196 #define TELTRAP '~' | |
197 #define DARTTRAP '`' | |
198 #define POOL '"' | |
199 #define SECRETDOOR '&' | |
200 #define STAIRS '%' | |
201 #define GOLD '*' | |
202 #define POTION '!' | |
203 #define SCROLL '?' | |
204 #define MAGIC '$' | |
205 #define FOOD ':' | |
206 #define WEAPON ')' | |
207 #define ARMOR ']' | |
208 #define AMULET ',' | |
209 #define RING '=' | |
210 #define STICK '/' | |
211 #define CALLABLE -1 | |
212 | |
213 | |
214 /* | |
215 * stuff to do with encumberence | |
216 */ | |
217 #define NORMENCB 1500 /* normal encumberence */ | |
218 #define SOMTHERE 5 /* something is in the way for dropping */ | |
219 #define CANTDROP 6 /* cant drop it cause its cursed */ | |
220 #define F_OKAY 0 /* have plenty of food in stomach */ | |
221 #define F_HUNGRY 1 /* player is hungry */ | |
222 #define F_WEAK 2 /* weak from lack of food */ | |
223 #define F_FAINT 3 /* fainting from lack of food */ | |
224 | |
225 | |
226 /* | |
227 * Various constants | |
228 */ | |
229 #define PASSWD "mTuZ7WUV9RWkQ" | |
230 #define BEARTIME 3 | |
231 #define SLEEPTIME 5 | |
232 #define HEALTIME 30 | |
233 #define HOLDTIME 2 | |
234 #define STPOS 0 | |
235 #define WANDERTIME 70 | |
236 #define BEFORE 1 | |
237 #define AFTER 2 | |
238 #define HUHDURATION 20 | |
239 #define SEEDURATION 850 | |
240 #define HUNGERTIME 1300 | |
241 #define WEAKTIME 150 | |
242 #define HUNGTIME 300 /* 2 * WEAKTIME */ | |
243 #define STOMACHSIZE 2000 | |
244 #define ESCAPE 27 | |
245 #define LEFT 0 | |
246 #define RIGHT 1 | |
247 #define BOLT_LENGTH 6 | |
248 | |
249 #define STR 1 | |
250 #define DEX 2 | |
251 #define CON 3 | |
252 #define WIS 4 | |
253 | |
254 /* | |
255 * Save against things | |
256 */ | |
257 #define VS_POISON 00 | |
258 #define VS_PARALYZATION 00 | |
259 #define VS_DEATH 00 | |
260 #define VS_PETRIFICATION 01 | |
261 #define VS_BREATH 02 | |
262 #define VS_MAGIC 03 | |
263 | |
264 | |
265 /* | |
266 * Various flag bits | |
267 */ | |
268 #define ISSTUCK 0000001 /* monster can't run (violet fungi) */ | |
269 #define ISDARK 0000001 /* room is dark */ | |
270 #define ISCURSED 000001 /* object is cursed */ | |
271 #define ISBLIND 0000001 /* hero is blind */ | |
272 #define ISPARA 0000002 /* monster is paralyzed */ | |
273 #define ISGONE 0000002 /* room is gone */ | |
274 #define ISKNOW 0000002 /* object is known */ | |
275 #define ISRUN 0000004 /* Hero & monsters are running */ | |
276 #define ISTREAS 0000004 /* room is a treasure room */ | |
277 #define ISPOST 0000004 /* object is in a trading post */ | |
278 #define ISFOUND 0000010 /* trap is found */ | |
279 #define ISINVINC 000010 /* player is invincible */ | |
280 #define ISINVIS 0000020 /* monster is invisible */ | |
281 #define ISPROT 0000020 /* object is protected somehow */ | |
282 #define ISMEAN 0000040 /* monster is mean */ | |
283 #define ISBLESS 0000040 /* object is blessed */ | |
284 #define ISGREED 0000100 /* monster is greedy */ | |
285 #define ISWOUND 0000200 /* monster is wounded */ | |
286 #define ISHELD 0000400 /* hero is held fast */ | |
287 #define ISHUH 0001000 /* hero | monster is confused */ | |
288 #define ISREGEN 0002000 /* monster is regenerative */ | |
289 #define CANHUH 0004000 /* hero can confuse monsters */ | |
290 #define CANSEE 0010000 /* hero can see invisible monsters */ | |
291 #define WASHIT 0010000 /* hero has hit monster at least once */ | |
292 #define ISMISL 0020000 /* object is normally thrown in attacks */ | |
293 #define ISCANC 0020000 /* monsters special attacks are canceled */ | |
294 #define ISMANY 0040000 /* objects are found in a group (> 1) */ | |
295 #define ISSLOW 0040000 /* hero | monster is slow */ | |
296 #define ISHASTE 0100000 /* hero | monster is fast */ | |
297 #define ISETHER 0200000 /* hero is thin as air */ | |
298 #define NONE 100 /* equal to 'd' (used for weaps) */ | |
299 | |
300 | |
301 /* | |
302 * Potion types | |
303 */ | |
304 #define P_CONFUSE 0 /* confusion */ | |
305 #define P_PARALYZE 1 /* paralysis */ | |
306 #define P_POISON 2 /* poison */ | |
307 #define P_STRENGTH 3 /* gain strength */ | |
308 #define P_SEEINVIS 4 /* see invisible */ | |
309 #define P_HEALING 5 /* healing */ | |
310 #define P_MFIND 6 /* monster detection */ | |
311 #define P_TFIND 7 /* magic detection */ | |
312 #define P_RAISE 8 /* raise level */ | |
313 #define P_XHEAL 9 /* extra healing */ | |
314 #define P_HASTE 10 /* haste self */ | |
315 #define P_RESTORE 11 /* restore strength */ | |
316 #define P_BLIND 12 /* blindness */ | |
317 #define P_NOP 13 /* thirst quenching */ | |
318 #define P_DEX 14 /* increase dexterity */ | |
319 #define P_ETH 15 /* etherealness */ | |
320 #define P_SMART 16 /* wisdom */ | |
321 #define P_REGEN 17 /* regeneration */ | |
322 #define P_SUPHERO 18 /* super ability */ | |
323 #define P_DECREP 19 /* decrepedness */ | |
324 #define P_INVINC 20 /* invicibility */ | |
325 #define MAXPOTIONS 21 /* types of potions */ | |
326 | |
327 | |
328 /* | |
329 * Scroll types | |
330 */ | |
331 #define S_CONFUSE 0 /* monster confusion */ | |
332 #define S_MAP 1 /* magic mapping */ | |
333 #define S_LIGHT 2 /* light */ | |
334 #define S_HOLD 3 /* hold monster */ | |
335 #define S_SLEEP 4 /* sleep */ | |
336 #define S_ARMOR 5 /* enchant armor */ | |
337 #define S_IDENT 6 /* identify */ | |
338 #define S_SCARE 7 /* scare monster */ | |
339 #define S_GFIND 8 /* gold detection */ | |
340 #define S_TELEP 9 /* teleportation */ | |
341 #define S_ENCH 10 /* enchant weapon */ | |
342 #define S_CREATE 11 /* create monster */ | |
343 #define S_REMOVE 12 /* remove curse */ | |
344 #define S_AGGR 13 /* aggravate monster */ | |
345 #define S_NOP 14 /* blank paper */ | |
346 #define S_GENOCIDE 15 /* genocide */ | |
347 #define S_KNOWALL 16 /* item knowledge */ | |
348 #define S_PROTECT 17 /* item protection */ | |
349 #define S_DCURSE 18 /* demons curse */ | |
350 #define S_DLEVEL 19 /* transport */ | |
351 #define S_ALLENCH 20 /* enchantment */ | |
352 #define S_BLESS 21 /* gods blessing */ | |
353 #define S_MAKEIT 22 /* aquirement */ | |
354 #define S_BAN 23 /* banishment */ | |
355 #define S_CWAND 24 /* charge wands */ | |
356 #define S_LOCTRAP 25 /* locate traps */ | |
357 #define MAXSCROLLS 26 /* types of scrolls */ | |
358 | |
359 | |
360 /* | |
361 * Weapon types | |
362 */ | |
363 #define MACE 0 /* mace */ | |
364 #define SWORD 1 /* long sword */ | |
365 #define BOW 2 /* short bow */ | |
366 #define ARROW 3 /* arrow */ | |
367 #define DAGGER 4 /* dagger */ | |