1: /*
2: * rogue.h
3: *
4: * This source herein may be modified and/or distributed by anybody who
5: * so desires, with the following restrictions:
6: * 1.) This notice shall not be removed.
7: * 2.) Credit shall not be taken for the creation of this source.
8: * 3.) This code is not to be traded, sold, or used for personal
9: * gain or profit.
10: *
11: * @(#)rogue.h 5.2 (Berkeley) 11/25/87
12: */
13:
14: #define boolean char
15:
16: #define NOTHING ((unsigned short) 0)
17: #define OBJECT ((unsigned short) 01)
18: #define MONSTER ((unsigned short) 02)
19: #define STAIRS ((unsigned short) 04)
20: #define HORWALL ((unsigned short) 010)
21: #define VERTWALL ((unsigned short) 020)
22: #define DOOR ((unsigned short) 040)
23: #define FLOOR ((unsigned short) 0100)
24: #define TUNNEL ((unsigned short) 0200)
25: #define TRAP ((unsigned short) 0400)
26: #define HIDDEN ((unsigned short) 01000)
27:
28: #define ARMOR ((unsigned short) 01)
29: #define WEAPON ((unsigned short) 02)
30: #define SCROL ((unsigned short) 04)
31: #define POTION ((unsigned short) 010)
32: #define GOLD ((unsigned short) 020)
33: #define FOOD ((unsigned short) 040)
34: #define WAND ((unsigned short) 0100)
35: #define RING ((unsigned short) 0200)
36: #define AMULET ((unsigned short) 0400)
37: #define ALL_OBJECTS ((unsigned short) 0777)
38:
39: #define LEATHER 0
40: #define RINGMAIL 1
41: #define SCALE 2
42: #define CHAIN 3
43: #define BANDED 4
44: #define SPLINT 5
45: #define PLATE 6
46: #define ARMORS 7
47:
48: #define BOW 0
49: #define DART 1
50: #define ARROW 2
51: #define DAGGER 3
52: #define SHURIKEN 4
53: #define MACE 5
54: #define LONG_SWORD 6
55: #define TWO_HANDED_SWORD 7
56: #define WEAPONS 8
57:
58: #define MAX_PACK_COUNT 24
59:
60: #define PROTECT_ARMOR 0
61: #define HOLD_MONSTER 1
62: #define ENCH_WEAPON 2
63: #define ENCH_ARMOR 3
64: #define IDENTIFY 4
65: #define TELEPORT 5
66: #define SLEEP 6
67: #define SCARE_MONSTER 7
68: #define REMOVE_CURSE 8
69: #define CREATE_MONSTER 9
70: #define AGGRAVATE_MONSTER 10
71: #define MAGIC_MAPPING 11
72: #define CON_MON 12
73: #define SCROLS 13
74:
75: #define INCREASE_STRENGTH 0
76: #define RESTORE_STRENGTH 1
77: #define HEALING 2
78: #define 3
79: #define POISON 4
80: #define RAISE_LEVEL 5
81: #define BLINDNESS 6
82: #define HALLUCINATION 7
83: #define DETECT_MONSTER 8
84: #define DETECT_OBJECTS 9
85: #define CONFUSION 10
86: #define LEVITATION 11
87: #define HASTE_SELF 12
88: #define SEE_INVISIBLE 13
89: #define POTIONS 14
90:
91: #define TELE_AWAY 0
92: #define SLOW_MONSTER 1
93: #define INVISIBILITY 2
94: #define POLYMORPH 3
95: #define HASTE_MONSTER 4
96: #define MAGIC_MISSILE 5
97: #define CANCELLATION 6
98: #define DO_NOTHING 7
99: #define DRAIN_LIFE 8
100: #define COLD 9
101: #define FIRE 10
102: #define WANDS 11
103:
104: #define STEALTH 0
105: #define R_TELEPORT 1
106: #define REGENERATION 2
107: #define SLOW_DIGEST 3
108: #define ADD_STRENGTH 4
109: #define SUSTAIN_STRENGTH 5
110: #define DEXTERITY 6
111: #define ADORNMENT 7
112: #define R_SEE_INVISIBLE 8
113: #define MAINTAIN_ARMOR 9
114: #define SEARCHING 10
115: #define RINGS 11
116:
117: #define RATION 0
118: #define FRUIT 1
119:
120: #define NOT_USED ((unsigned short) 0)
121: #define BEING_WIELDED ((unsigned short) 01)
122: #define BEING_WORN ((unsigned short) 02)
123: #define ON_LEFT_HAND ((unsigned short) 04)
124: #define ON_RIGHT_HAND ((unsigned short) 010)
125: #define ON_EITHER_HAND ((unsigned short) 014)
126: #define BEING_USED ((unsigned short) 017)
127:
128: #define NO_TRAP -1
129: #define TRAP_DOOR 0
130: #define BEAR_TRAP 1
131: #define TELE_TRAP 2
132: #define DART_TRAP 3
133: #define SLEEPING_GAS_TRAP 4
134: #define RUST_TRAP 5
135: #define TRAPS 6
136:
137: #define STEALTH_FACTOR 3
138: #define R_TELE_PERCENT 8
139:
140: #define UNIDENTIFIED ((unsigned short) 00) /* MUST BE ZERO! */
141: #define IDENTIFIED ((unsigned short) 01)
142: #define CALLED ((unsigned short) 02)
143:
144: #define DROWS 24
145: #define DCOLS 80
146: #define NMESSAGES 5
147: #define MAX_TITLE_LENGTH 30
148: #define MAXSYLLABLES 40
149: #define MAX_METAL 14
150: #define WAND_MATERIALS 30
151: #define GEMS 14
152:
153: #define GOLD_PERCENT 46
154:
155: #define SCORE_FILE "/usr/games/lib/rogue.scores"
156: #define LOCK_FILE "/usr/games/lib/rogue.lock"
157:
158: #define MAX_OPT_LEN 40
159:
160: struct id {
161: short value;
162: char *title;
163: char *real;
164: unsigned short id_status;
165: };
166:
167: /* The following #defines provide more meaningful names for some of the
168: * struct object fields that are used for monsters. This, since each monster
169: * and object (scrolls, potions, etc) are represented by a struct object.
170: * Ideally, this should be handled by some kind of union structure.
171: */
172:
173: #define m_damage damage
174: #define hp_to_kill quantity
175: #define m_char ichar
176: #define first_level is_protected
177: #define last_level is_cursed
178: #define m_hit_chance class
179: #define stationary_damage identified
180: #define drop_percent which_kind
181: #define trail_char d_enchant
182: #define slowed_toggle quiver
183: #define moves_confused hit_enchant
184: #define nap_length picked_up
185: #define disguise what_is
186: #define next_monster next_object
187:
188: struct obj { /* comment is monster meaning */
189: long m_flags; /* monster flags */
190: char *damage; /* damage it does */
191: short quantity; /* hit points to kill */
192: short ichar; /* 'A' is for aquatar */
193: short kill_exp; /* exp for killing it */
194: short is_protected; /* level starts */
195: short is_cursed; /* level ends */
196: short class; /* chance of hitting you */
197: short identified; /* 'F' damage, 1,2,3... */
198: unsigned short which_kind; /* item carry/drop % */
199: short o_row, o_col, o; /* o is how many times stuck at o_row, o_col */
200: short row, col; /* current row, col */
201: short d_enchant; /* room char when detect_monster */
202: short quiver; /* monster slowed toggle */
203: short trow, tcol; /* target row, col */
204: short hit_enchant; /* how many moves is confused */
205: unsigned short what_is; /* imitator's charactor (?!%: */
206: short picked_up; /* sleep from wand of sleep */
207: unsigned short in_use_flags;
208: struct obj *next_object; /* next monster */
209: };
210:
211: typedef struct obj object;
212:
213: #define INIT_AW (object*)0,(object*)0
214: #define INIT_RINGS (object*)0,(object*)0
215: #define INIT_HP 12,12
216: #define INIT_STR 16,16
217: #define INIT_EXP 1,0
218: #define INIT_PACK {0}
219: #define INIT_GOLD 0
220: #define INIT_CHAR '@'
221: #define INIT_MOVES 1250
222:
223: struct fightr {
224: object *armor;
225: object *weapon;
226: object *left_ring, *right_ring;
227: short hp_current;
228: short hp_max;
229: short str_current;
230: short str_max;
231: object pack;
232: long gold;
233: short exp;
234: long exp_points;
235: short row, col;
236: short fchar;
237: short moves_left;
238: };
239:
240: typedef struct fightr fighter;
241:
242: struct dr {
243: short oth_room;
244: short oth_row,
245: oth_col;
246: short door_row,
247: door_col;
248: };
249:
250: typedef struct dr door;
251:
252: struct rm {
253: short bottom_row, right_col, left_col, top_row;
254: door doors[4];
255: unsigned short is_room;
256: };
257:
258: typedef struct rm room;
259:
260: #define MAXROOMS 9
261: #define BIG_ROOM 10
262:
263: #define NO_ROOM -1
264:
265: #define PASSAGE -3 /* cur_room value */
266:
267: #define AMULET_LEVEL 26
268:
269: #define R_NOTHING ((unsigned short) 01)
270: #define R_ROOM ((unsigned short) 02)
271: #define R_MAZE ((unsigned short) 04)
272: #define R_DEADEND ((unsigned short) 010)
273: #define R_CROSS ((unsigned short) 020)
274:
275: #define MAX_EXP_LEVEL 21
276: #define MAX_EXP 10000001L
277: #define MAX_GOLD 999999
278: #define MAX_ARMOR 99
279: #define MAX_HP 999
280: #define MAX_STRENGTH 99
281: #define LAST_DUNGEON 99
282:
283: #define STAT_LEVEL 01
284: #define STAT_GOLD 02
285: #define STAT_HP 04
286: #define STAT_STRENGTH 010
287: #define STAT_ARMOR 020
288: #define STAT_EXP 040
289: #define STAT_HUNGER 0100
290: #define STAT_LABEL 0200
291: #define STAT_ALL 0377
292:
293: #define PARTY_TIME 10 /* one party somewhere in each 10 level span */
294:
295: #define MAX_TRAPS 10 /* maximum traps per level */
296:
297: #define HIDE_PERCENT 12
298:
299: struct tr {
300: short trap_type;
301: short trap_row, trap_col;
302: };
303:
304: typedef struct tr trap;
305:
306: extern fighter rogue;
307: extern room rooms[];
308: extern trap traps[];
309: extern unsigned short dungeon[DROWS][DCOLS];
310: extern object level_objects;
311:
312: extern struct id id_scrolls[];
313: extern struct id id_potions[];
314: extern struct id id_wands[];
315: extern struct id id_rings[];
316: extern struct id id_weapons[];
317: extern struct id id_armors[];
318:
319: extern object mon_tab[];
320: extern object level_monsters;
321:
322: #define MONSTERS 26
323:
324: #define HASTED 01L
325: #define SLOWED 02L
326: #define INVISIBLE 04L
327: #define ASLEEP 010L
328: #define WAKENS 020L
329: #define WANDERS 040L
330: #define FLIES 0100L
331: #define FLITS 0200L
332: #define CAN_FLIT 0400L /* can, but usually doesn't, flit */
333: #define CONFUSED 01000L
334: #define RUSTS 02000L
335: #define HOLDS 04000L
336: #define FREEZES 010000L
337: #define STEALS_GOLD 020000L
338: #define STEALS_ITEM 040000L
339: #define STINGS 0100000L
340: #define DRAINS_LIFE 0200000L
341: #define DROPS_LEVEL 0400000L
342: #define SEEKS_GOLD 01000000L
343: #define FREEZING_ROGUE 02000000L
344: #define RUST_VANISHED 04000000L
345: #define CONFUSES 010000000L
346: #define IMITATES 020000000L
347: #define FLAMES 040000000L
348: #define STATIONARY 0100000000L /* damage will be 1,2,3,... */
349: #define NAPPING 0200000000L /* can't wake up for a while */
350: #define ALREADY_MOVED 0400000000L
351:
352: #define SPECIAL_HIT (RUSTS|HOLDS|FREEZES|STEALS_GOLD|STEALS_ITEM|STINGS|DRAINS_LIFE|DROPS_LEVEL)
353:
354: #define WAKE_PERCENT 45
355: #define FLIT_PERCENT 40
356: #define PARTY_WAKE_PERCENT 75
357:
358: #define HYPOTHERMIA 1
359: #define STARVATION 2
360: #define POISON_DART 3
361: #define QUIT 4
362: #define WIN 5
363: #define KFIRE 6
364:
365: #define UPWARD 0
366: #define UPRIGHT 1
367: #define RIGHT 2
368: #define DOWNRIGHT 3
369: #define DOWN 4
370: #define DOWNLEFT 5
371: #define LEFT 6
372: #define UPLEFT 7
373: #define DIRS 8
374:
375: #define ROW1 7
376: #define ROW2 15
377:
378: #define COL1 26
379: #define COL2 52
380:
381: #define MOVED 0
382: #define MOVE_FAILED -1
383: #define STOPPED_ON_SOMETHING -2
384: #define CANCEL '\033'
385: #define LIST '*'
386:
387: #define HUNGRY 300
388: #define WEAK 150
389: #define FAINT 20
390: #define STARVE 0
391:
392: #define MIN_ROW 1
393:
394: /* external routine declarations.
395: */
396: char *strcpy();
397: char *strncpy();
398: char *strcat();
399:
400: char *mon_name();
401: char *get_ench_color();
402: char *name_of();
403: char *md_gln();
404: char *md_getenv();
405: char *md_malloc();
406: boolean is_direction();
407: boolean mon_sees();
408: boolean mask_pack();
409: boolean mask_room();
410: boolean is_digit();
411: boolean check_hunger();
412: boolean reg_move();
413: boolean md_df();
414: boolean has_been_touched();
415: object *add_to_pack();
416: object *alloc_object();
417: object *get_letter_object();
418: object *gr_monster();
419: object *get_thrown_at_monster();
420: object *get_zapped_monster();
421: object *check_duplicate();
422: object *gr_object();
423: object *object_at();
424: object *pick_up();
425: struct id *get_id_table();
426: unsigned short gr_what_is();
427: long rrandom();
428: long lget_number();
429: long xxx();
430: int byebye(), onintr(), error_save();
431:
432: struct rogue_time {
433: short year; /* >= 1987 */
434: short month; /* 1 - 12 */
435: short day; /* 1 - 31 */
436: short hour; /* 0 - 23 */
437: short minute; /* 0 - 59 */
438: short second; /* 0 - 59 */
439: };
440:
441: #ifdef CURSES
442: struct _win_st {
443: short _cury, _curx;
444: short _maxy, _maxx;
445: };
446:
447: typedef struct _win_st WINDOW;
448:
449: extern int LINES, COLS;
450: extern WINDOW *curscr;
451: extern char *CL;
452:
453: char *md_gdtcf();
454:
455: #else
456: #include <curses.h>
457: #endif