f1eb65f54b9a8149257c4c903d419160fbc44a16
[games.git] / games / hack / hack.h
1 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
2 /* hack.h - version 1.0.3 */
3 /* $DragonFly: src/games/hack/hack.h,v 1.2 2004/11/06 12:29:17 eirikn Exp $ */
4
5 #include "config.h"
6 #include <string.h>
7
8 #ifndef BSD
9 #define index   strchr
10 #define rindex  strrchr
11 #endif /* BSD */
12
13 #define Null(type)      ((struct type *) 0)
14
15 #include        "def.objclass.h"
16
17 typedef struct {
18         xchar x,y;
19 } coord;
20
21 #include        "def.monst.h"   /* uses coord */
22 #include        "def.gold.h"
23 #include        "def.trap.h"
24 #include        "def.obj.h"
25 #include        "def.flag.h"
26
27 #define plur(x) (((x) == 1) ? "" : "s")
28
29 #define BUFSZ   256     /* for getlin buffers */
30 #define PL_NSIZ 32      /* name of player, ghost, shopkeeper */
31
32 #include        "def.rm.h"
33 #include        "def.permonst.h"
34
35 extern long *alloc();
36
37 extern xchar xdnstair, ydnstair, xupstair, yupstair; /* stairs up and down. */
38
39 extern xchar dlevel;
40 #define newstring(x)    (char *) alloc((unsigned)(x))
41 #include "hack.onames.h"
42
43 #define ON 1
44 #define OFF 0
45
46 extern struct obj *invent, *uwep, *uarm, *uarm2, *uarmh, *uarms, *uarmg,
47         *uleft, *uright, *fcobj;
48 extern struct obj *uchain;      /* defined iff PUNISHED */
49 extern struct obj *uball;       /* defined if PUNISHED */
50 struct obj *o_at(), *getobj(), *sobj_at();
51
52 struct prop {
53 #define TIMEOUT         007777  /* mask */
54 #define LEFT_RING       W_RINGL /* 010000L */
55 #define RIGHT_RING      W_RINGR /* 020000L */
56 #define INTRINSIC       040000L
57 #define LEFT_SIDE       LEFT_RING
58 #define RIGHT_SIDE      RIGHT_RING
59 #define BOTH_SIDES      (LEFT_SIDE | RIGHT_SIDE)
60         long p_flgs;
61         int (*p_tofn)();        /* called after timeout */
62 };
63
64 struct you {
65         xchar ux, uy;
66         schar dx, dy, dz;       /* direction of move (or zap or ... ) */
67 #ifdef QUEST
68         schar di;               /* direction of FF */
69         xchar ux0, uy0;         /* initial position FF */
70 #endif /* QUEST */
71         xchar udisx, udisy;     /* last display pos */
72         char usym;              /* usually '@' */
73         schar uluck;
74 #define LUCKMAX         10      /* on moonlit nights 11 */
75 #define LUCKMIN         (-10)
76         int last_str_turn:3;    /* 0: none, 1: half turn, 2: full turn */
77                                 /* +: turn right, -: turn left */
78         unsigned udispl:1;      /* @ on display */
79         unsigned ulevel:4;      /* 1 - 14 */
80 #ifdef QUEST
81         unsigned uhorizon:7;
82 #endif /* QUEST */
83         unsigned utrap:3;       /* trap timeout */
84         unsigned utraptype:1;   /* defined if utrap nonzero */
85 #define TT_BEARTRAP     0
86 #define TT_PIT          1
87         unsigned uinshop:6;     /* used only in shk.c - (roomno+1) of shop */
88
89
90 /* perhaps these #define's should also be generated by makedefs */
91 #define TELEPAT         LAST_RING               /* not a ring */
92 #define Telepat         u.uprops[TELEPAT].p_flgs
93 #define FAST            (LAST_RING+1)           /* not a ring */
94 #define Fast            u.uprops[FAST].p_flgs
95 #define CONFUSION       (LAST_RING+2)           /* not a ring */
96 #define Confusion       u.uprops[CONFUSION].p_flgs
97 #define INVIS           (LAST_RING+3)           /* not a ring */
98 #define Invis           u.uprops[INVIS].p_flgs
99 #define Invisible       (Invis && !See_invisible)
100 #define GLIB            (LAST_RING+4)           /* not a ring */
101 #define Glib            u.uprops[GLIB].p_flgs
102 #define PUNISHED        (LAST_RING+5)           /* not a ring */
103 #define Punished        u.uprops[PUNISHED].p_flgs
104 #define SICK            (LAST_RING+6)           /* not a ring */
105 #define Sick            u.uprops[SICK].p_flgs
106 #define BLIND           (LAST_RING+7)           /* not a ring */
107 #define Blind           u.uprops[BLIND].p_flgs
108 #define WOUNDED_LEGS    (LAST_RING+8)           /* not a ring */
109 #define Wounded_legs    u.uprops[WOUNDED_LEGS].p_flgs
110 #define STONED          (LAST_RING+9)           /* not a ring */
111 #define Stoned          u.uprops[STONED].p_flgs
112 #define PROP(x) (x-RIN_ADORNMENT)       /* convert ring to index in uprops */
113         unsigned umconf:1;
114         char *usick_cause;
115         struct prop uprops[LAST_RING+10];
116
117         unsigned uswallow:1;            /* set if swallowed by a monster */
118         unsigned uswldtim:4;            /* time you have been swallowed */
119         unsigned uhs:3;                 /* hunger state - see hack.eat.c */
120         schar ustr,ustrmax;
121         schar udaminc;
122         schar uac;
123         int uhp,uhpmax;
124         long int ugold,ugold0,uexp,urexp;
125         int uhunger;                    /* refd only in eat.c and shk.c */
126         int uinvault;
127         struct monst *ustuck;
128         int nr_killed[CMNUM+2];         /* used for experience bookkeeping */
129 };
130
131 extern struct you u;
132
133 extern char *traps[];
134 extern char *monnam(), *Monnam(), *amonnam(), *Amonnam(),
135         *doname(), *aobjnam();
136 extern char readchar();
137 extern char vowels[];
138
139 extern xchar curx,cury; /* cursor location on screen */
140
141 extern coord bhitpos;   /* place where thrown weapon falls to the ground */
142
143 extern xchar seehx,seelx,seehy,seely; /* where to see*/
144 extern char *save_cm,*killer;
145
146 extern xchar dlevel, maxdlevel; /* dungeon level */
147
148 extern long moves;
149
150 extern int multi;
151
152
153 extern char lock[];
154
155
156 #define DIST(x1,y1,x2,y2)       (((x1)-(x2))*((x1)-(x2)) + ((y1)-(y2))*((y1)-(y2)))
157
158 #define PL_CSIZ         20      /* sizeof pl_character */
159 #define MAX_CARR_CAP    120     /* so that boulders can be heavier */
160 #define MAXLEVEL        40
161 #define FAR     (COLNO+2)       /* position outside screen */