Mercurial > hg > early-roguelike
comparison urogue/rogue.h @ 256:c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
author | John "Elwin" Edwards |
---|---|
date | Tue, 31 Jan 2017 19:56:04 -0500 |
parents | |
children | c4b12d2d1dcd |
comparison
equal
deleted
inserted
replaced
253:d9badb9c0179 | 256:c495a4f288c6 |
---|---|
1 /* | |
2 rogue.h - A very large header file | |
3 | |
4 UltraRogue: The Ultimate Adventure in the Dungeons of Doom | |
5 Copyright (C) 1984, 1991, 1997 Herb Chong | |
6 All rights reserved. | |
7 | |
8 Based on "Advanced Rogue" | |
9 Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka | |
10 All rights reserved. | |
11 | |
12 Based on "Rogue: Exploring the Dungeons of Doom" | |
13 Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | |
14 All rights reserved. | |
15 | |
16 See the file LICENSE.TXT for full copyright and licensing information. | |
17 */ | |
18 | |
19 #include <signal.h> | |
20 #include <stdio.h> | |
21 #include <stdarg.h> | |
22 | |
23 #ifndef LINT | |
24 #include <curses.h> | |
25 #else | |
26 #include "lint-curses.h" | |
27 #endif | |
28 | |
29 #define SHOTPENALTY 2 /* In line of sight of missile */ | |
30 #define DOORPENALTY 1 /* Moving out of current room */ | |
31 | |
32 /* Maximum number of different things */ | |
33 #define MAXROOMS 9 /* max rooms per normal level */ | |
34 #define MAXDOORS 4 /* max doors to a room */ | |
35 #define MAXOBJ 6 /* max number of items to find on a level */ | |
36 #define MAXTREAS 30 /* max number monsters/treasure in treasure room */ | |
37 #define MAXTRAPS 80 /* max traps per level */ | |
38 #define MAXTRPTRY 16 /* max attempts/level allowed for setting traps */ | |
39 #define MAXPURCH 8 /* max purchases per trading post visit */ | |
40 #define NUMMONST (sizeof(monsters) / sizeof(struct monster) - 2) | |
41 #define NUMSUMMON 48 /* number of creatures that can summon hero */ | |
42 #define NLEVMONS 8 /* number of new monsters per level */ | |
43 #define LINELEN 512 /* characters in a buffer */ | |
44 | |
45 /* The character types */ | |
46 #define C_FIGHTER 0 | |
47 #define C_PALADIN 1 | |
48 #define C_RANGER 2 | |
49 #define C_CLERIC 3 | |
50 #define C_DRUID 4 | |
51 #define C_MAGICIAN 5 | |
52 #define C_ILLUSION 6 | |
53 #define C_THIEF 7 | |
54 #define C_ASSASIN 8 | |
55 #define C_NINJA 9 | |
56 #define C_MONSTER 10 | |
57 #define C_NOTSET 11 /* Must not be a value from above */ | |
58 | |
59 /* used for ring stuff */ | |
60 #define LEFT_1 0 | |
61 #define LEFT_2 1 | |
62 #define LEFT_3 2 | |
63 #define LEFT_4 3 | |
64 #define LEFT_5 4 | |
65 #define RIGHT_1 5 | |
66 #define RIGHT_2 6 | |
67 #define RIGHT_3 7 | |
68 #define RIGHT_4 8 | |
69 #define RIGHT_5 9 | |
70 | |
71 /* All the fun defines */ | |
72 #define next(ptr) ((ptr)?(ptr->l_next):NULL) | |
73 #define prev(ptr) ((ptr)?(ptr->l_prev):NULL) | |
74 #define identifier(ptr) (ptr->o_ident) | |
75 #define winat(y,x) ( (char) \ | |
76 ((mvwinch(mw,y,x) == ' ') ? mvwinch(stdscr,y,x) : winch(mw)) ) | |
77 | |
78 #define debug if (wizard && wiz_verbose) msg | |
79 #define verify(b) if (b) verify_function(__FILE__, __LINE__); | |
80 #define DISTANCE(c1, c2) ( ((c2).x - (c1).x)*((c2).x - (c1).x) + \ | |
81 ((c2).y - (c1).y)*((c2).y - (c1).y) ) | |
82 | |
83 #define xyDISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1)) | |
84 #define OBJPTR(what) ((*what).data.obj) | |
85 #define THINGPTR(what) ((*what).data.th) | |
86 #define ce(a, b) ((a).x == (b).x && (a).y == (b).y) | |
87 #define hero player.t_pos | |
88 #define pstats player.t_stats | |
89 #define max_stats player.maxstats | |
90 #define pack player.t_pack | |
91 #define attach(a, b) _attach(&a, b) | |
92 #define detach(a, b) _detach(&a, b) | |
93 #define free_list(a) _free_list(&a) | |
94 #ifndef max | |
95 #define max(a, b) ((a) > (b) ? (a) : (b)) | |
96 #define min(a, b) ((a) < (b) ? (a) : (b)) | |
97 #endif | |
98 #define GOLDCALC (rnd(50 + 30 * level) + 2) | |
99 #define o_charges o_ac | |
100 #define mi_wght mi_worth | |
101 | |
102 /* Things that appear on the screens */ | |
103 #define WALL ' ' | |
104 #define PASSAGE '#' | |
105 #define DOOR '+' | |
106 #define FLOOR '.' | |
107 #define VPLAYER '@' | |
108 #define IPLAYER '_' | |
109 #define POST '^' | |
110 #define LAIR '(' | |
111 #define RUSTTRAP ';' | |
112 #define TRAPDOOR '>' | |
113 #define ARROWTRAP '{' | |
114 #define SLEEPTRAP '$' | |
115 #define BEARTRAP '}' | |
116 #define TELTRAP '~' | |
117 #define DARTTRAP '`' | |
118 #define POOL '"' | |
119 #define MAZETRAP '\\' | |
120 #define FIRETRAP '<' | |
121 #define POISONTRAP '[' | |
122 #define ARTIFACT ',' | |
123 #define SECRETDOOR '&' | |
124 #define STAIRS '%' | |
125 #define GOLD '*' | |
126 #define POTION '!' | |
127 #define SCROLL '?' | |
128 #define MAGIC '$' | |
129 #define BMAGIC '>' /* Blessed magic */ | |
130 #define CMAGIC '<' /* Cursed magic */ | |
131 #define FOOD ':' | |
132 #define WEAPON ')' | |
133 #define ARMOR ']' | |
134 #define RING '=' | |
135 #define STICK '/' | |
136 | |
137 /* Various constants */ | |
138 #define HOLDTIME 2 | |
139 #define BEARTIME 3 | |
140 #define SLEEPTIME 4 | |
141 #define FREEZETIME 6 | |
142 #define STINKTIME 6 | |
143 #define CHILLTIME (roll(2, 4)) | |
144 #define STONETIME 8 | |
145 #define SICKTIME 10 | |
146 #define CLRDURATION 15 | |
147 #define HUHDURATION 20 | |
148 #define SMELLTIME 20 | |
149 #define HEROTIME 20 | |
150 #define HEALTIME 30 | |
151 #define WANDERTIME 140 | |
152 #define GONETIME 200 | |
153 #define PHASEDURATION 300 | |
154 #define SEEDURATION 850 | |
155 | |
156 #define STPOS 0 | |
157 #define BEFORE 1 | |
158 #define AFTER 2 | |
159 | |
160 #define MORETIME 150 | |
161 #define HUNGERTIME 1300 | |
162 #define STOMACHSIZE 2000 | |
163 | |
164 #define BOLT_LENGTH 10 | |
165 #define MARKLEN 20 | |
166 | |
167 #define LINEFEED 10 | |
168 #define CARRIAGE_RETURN 13 | |
169 #define ESCAPE 27 | |
170 | |
171 /* Adjustments for save against things */ | |
172 #define VS_POISON 0 | |
173 #define VS_PARALYZATION 0 | |
174 #define VS_DEATH 0 | |
175 #define VS_PETRIFICATION 1 | |
176 #define VS_WAND 2 | |
177 #define VS_BREATH 3 | |
178 #define VS_MAGIC 4 | |
179 | |
180 /*attributes for treasures in dungeon */ | |
181 #define ISNORMAL 0x00000000UL /* Neither blessed nor cursed */ | |
182 #define ISCURSED 0x00000001UL /* cursed */ | |
183 #define ISKNOW 0x00000002UL /* has been identified */ | |
184 #define ISPOST 0x00000004UL /* object is in a trading post */ | |
185 #define ISMETAL 0x00000008UL /* is metallic */ | |
186 #define ISPROT 0x00000010UL /* object is protected */ | |
187 #define ISBLESSED 0x00000020UL /* blessed */ | |
188 #define ISZAPPED 0x00000040UL /* weapon has been charged by dragon */ | |
189 #define ISVORPED 0x00000080UL /* vorpalized weapon */ | |
190 #define ISSILVER 0x00000100UL /* silver weapon */ | |
191 #define ISPOISON 0x00000200UL /* poisoned weapon */ | |
192 #define CANRETURN 0x00000400UL /* weapon returns if misses */ | |
193 #define ISOWNED 0x00000800UL /* weapon returns always */ | |
194 #define ISLOST 0x00001000UL /* weapon always disappears */ | |
195 #define ISMISL 0x00002000UL /* missile weapon */ | |
196 #define ISMANY 0x00004000UL /* show up in a group */ | |
197 #define CANBURN 0x00008000UL /* burns monsters */ | |
198 #define ISSHARP 0x00010000UL /* cutting edge */ | |
199 #define ISTWOH 0x00020000UL /* needs two hands to wield */ | |
200 #define ISLITTLE 0x00040000UL /* small weapon */ | |
201 #define ISLAUNCHER 0x00080000UL /* used to throw other weapons */ | |
202 #define TYP_MAGIC_MASK 0x0f000000UL | |
203 #define POT_MAGIC 0x01000000UL | |
204 #define SCR_MAGIC 0x02000000UL | |
205 #define ZAP_MAGIC 0x04000000UL | |
206 #define SP_WIZARD 0x10000000UL /* only wizards */ | |
207 #define SP_ILLUSION 0x20000000UL /* only illusionists */ | |
208 #define SP_CLERIC 0x40000000UL /* only clerics/paladins */ | |
209 #define SP_DRUID 0x80000000UL /* only druids/rangers */ | |
210 #define SP_MAGIC 0x30000000UL /* wizard or illusionist */ | |
211 #define SP_PRAYER 0xc0000000UL /* cleric or druid */ | |
212 #define SP_ALL 0xf0000000UL /* all special classes */ | |
213 #define _TWO_ ISBLESSED /* more powerful spell */ | |
214 | |
215 /* Various flag bits */ | |
216 #define ISDARK 0x00000001UL | |
217 #define ISGONE 0x00000002UL | |
218 #define ISTREAS 0x00000004UL | |
219 #define ISFOUND 0x00000008UL | |
220 #define ISTHIEFSET 0x00000010UL | |
221 #define WASDARK 0x00000020UL | |
222 | |
223 /* struct thing t_flags (might include player) for monster attributes */ | |
224 #define ISBLIND 0x00000001UL | |
225 #define ISINWALL 0x00000002UL | |
226 #define ISRUN 0x00000004UL | |
227 #define ISFLEE 0x00000008UL | |
228 #define ISINVIS 0x00000010UL | |
229 #define ISMEAN 0x00000020UL | |
230 #define ISGREED 0x00000040UL | |
231 #define CANSHOOT 0x00000080UL | |
232 #define ISHELD 0x00000100UL | |
233 #define ISHUH 0x00000200UL | |
234 #define ISREGEN 0x00000400UL | |
235 #define CANHUH 0x00000800UL | |
236 #define CANSEE 0x00001000UL | |
237 #define HASFIRE 0x00002000UL | |
238 #define ISSLOW 0x00004000UL | |
239 #define ISHASTE 0x00008000UL | |
240 #define ISCLEAR 0x00010000UL | |
241 #define CANINWALL 0x00020000UL | |
242 #define ISDISGUISE 0x00040000UL | |
243 #define CANBLINK 0x00080000UL | |
244 #define CANSNORE 0x00100000UL | |
245 #define HALFDAMAGE 0x00200000UL | |
246 #define CANSUCK 0x00400000UL | |
247 #define CANRUST 0x00800000UL | |
248 #define CANPOISON 0x01000000UL | |
249 #define CANDRAIN 0x02000000UL | |
250 #define ISUNIQUE 0x04000000UL | |
251 #define STEALGOLD 0x08000000UL | |
252 #define STEALMAGIC 0x10000001UL | |
253 #define CANDISEASE 0x10000002UL | |
254 #define HASDISEASE 0x10000004UL | |
255 #define CANSUFFOCATE 0x10000008UL | |
256 #define DIDSUFFOCATE 0x10000010UL | |
257 #define BOLTDIVIDE 0x10000020UL | |
258 #define BLOWDIVIDE 0x10000040UL | |
259 #define NOCOLD 0x10000080UL | |
260 #define TOUCHFEAR 0x10000100UL | |
261 #define BMAGICHIT 0x10000200UL | |
262 #define NOFIRE 0x10000400UL | |
263 #define NOBOLT 0x10000800UL | |
264 #define CARRYGOLD 0x10001000UL | |
265 #define CANITCH 0x10002000UL | |
266 #define HASITCH 0x10004000UL | |
267 #define DIDDRAIN 0x10008000UL | |
268 #define WASTURNED 0x10010000UL | |
269 #define CANSELL 0x10020000UL | |
270 #define CANBLIND 0x10040000UL | |
271 #define CANBBURN 0x10080000UL | |
272 #define ISCHARMED 0x10100000UL | |
273 #define CANSPEAK 0x10200000UL | |
274 #define CANFLY 0x10400000UL | |
275 #define ISFRIENDLY 0x10800000UL | |
276 #define CANHEAR 0x11000000UL | |
277 #define ISDEAF 0x12000000UL | |
278 #define CANSCENT 0x14000000UL | |
279 #define ISUNSMELL 0x18000000UL | |
280 #define WILLRUST 0x20000001UL | |
281 #define WILLROT 0x20000002UL | |
282 #define SUPEREAT 0x20000004UL | |
283 #define PERMBLIND 0x20000008UL | |
284 #define MAGICHIT 0x20000010UL | |
285 #define CANINFEST 0x20000020UL | |
286 #define HASINFEST 0x20000040UL | |
287 #define NOMOVE 0x20000080UL | |
288 #define CANSHRIEK 0x20000100UL | |
289 #define CANDRAW 0x20000200UL | |
290 #define CANSMELL 0x20000400UL | |
291 #define CANPARALYZE 0x20000800UL | |
292 #define CANROT 0x20001000UL | |
293 #define ISSCAVENGE 0x20002000UL | |
294 #define DOROT 0x20004000UL | |
295 #define CANSTINK 0x20008000UL | |
296 #define HASSTINK 0x20010000UL | |
297 #define ISSHADOW 0x20020000UL | |
298 #define CANCHILL 0x20040000UL | |
299 #define CANHUG 0x20080000UL | |
300 #define CANSURPRISE 0x20100000UL | |
301 #define CANFRIGHTEN 0x20200000UL | |
302 #define CANSUMMON 0x20400000UL | |
303 #define TOUCHSTONE 0x20800000UL | |
304 #define LOOKSTONE 0x21000000UL | |
305 #define CANHOLD 0x22000000UL | |
306 #define DIDHOLD 0x24000000UL | |
307 #define DOUBLEDRAIN 0x28000000UL | |
308 #define ISUNDEAD 0x30000001UL | |
309 #define BLESSMAP 0x30000002UL | |
310 #define BLESSGOLD 0x30000004UL | |
311 #define BLESSMONS 0x30000008UL | |
312 #define BLESSMAGIC 0x30000010UL | |
313 #define BLESSFOOD 0x30000020UL | |
314 #define CANBRANDOM 0x30000040UL /* Types of breath */ | |
315 #define CANBACID 0x30000080UL | |
316 #define CANBFIRE 0x30000100UL | |
317 #define CANBBOLT 0x30000200UL | |
318 #define CANBGAS 0x30000400UL | |
319 #define CANBICE 0x30000800UL | |
320 #define CANBPGAS 0x30001000UL /* Paralyze gas */ | |
321 #define CANBSGAS 0x30002000UL /* Sleeping gas */ | |
322 #define CANBSLGAS 0x30004000UL /* Slow gas */ | |
323 #define CANBFGAS 0x30008000UL /* Fear gas */ | |
324 #define CANBREATHE 0x3000ffc0UL /* Can it breathe at all? */ | |
325 #define STUMBLER 0x30010000UL | |
326 #define POWEREAT 0x30020000UL | |
327 #define ISELECTRIC 0x30040000UL | |
328 #define HASOXYGEN 0x30080000UL /* Doesn't need to breath air */ | |
329 #define POWERDEXT 0x30100000UL | |
330 #define POWERSTR 0x30200000UL | |
331 #define POWERWISDOM 0x30400000UL | |
332 #define POWERINTEL 0x30800000UL | |
333 #define POWERCONST 0x31000000UL | |
334 #define SUPERHERO 0x32000000UL | |
335 #define ISUNHERO 0x34000000UL | |
336 #define CANCAST 0x38000000UL | |
337 #define CANTRAMPLE 0x40000001UL | |
338 #define CANSWIM 0x40000002UL | |
339 #define LOOKSLOW 0x40000004UL | |
340 #define CANWIELD 0x40000008UL | |
341 #define CANDARKEN 0x40000010UL | |
342 #define ISFAST 0x40000020UL | |
343 #define CANBARGAIN 0x40000040UL | |
344 #define NOMETAL 0x40000080UL | |
345 #define CANSPORE 0x40000100UL | |
346 #define NOSHARP 0x40000200UL | |
347 #define DRAINWISDOM 0x40000400UL | |
348 #define DRAINBRAIN 0x40000800UL | |
349 #define ISLARGE 0x40001000UL | |
350 #define ISSMALL 0x40002000UL | |
351 #define CANSTAB 0x40004000UL | |
352 #define ISFLOCK 0x40008000UL | |
353 #define ISSWARM 0x40010000UL | |
354 #define CANSTICK 0x40020000UL | |
355 #define CANTANGLE 0x40040000UL | |
356 #define DRAINMAGIC 0x40080000UL | |
357 #define SHOOTNEEDLE 0x40100000UL | |
358 #define CANZAP 0x40200000UL | |
359 #define HASARMOR 0x40400000UL | |
360 #define CANTELEPORT 0x40800000UL | |