xref: /openbsd/games/hack/hack.h (revision ce7279d8)
1*ce7279d8Sjsg /*	$OpenBSD: hack.h,v 1.15 2024/05/21 05:00:47 jsg Exp $*/
2d25013f2Scamield /*	$NetBSD: hack.h,v 1.3 1995/03/23 08:30:21 cgd Exp $*/
3d0b779f3Sniklas 
4df930be7Sderaadt /*
5d25013f2Scamield  * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
6d25013f2Scamield  * Amsterdam
7d25013f2Scamield  * All rights reserved.
8df930be7Sderaadt  *
9d25013f2Scamield  * Redistribution and use in source and binary forms, with or without
10d25013f2Scamield  * modification, are permitted provided that the following conditions are
11d25013f2Scamield  * met:
12d25013f2Scamield  *
13d25013f2Scamield  * - Redistributions of source code must retain the above copyright notice,
14d25013f2Scamield  * this list of conditions and the following disclaimer.
15d25013f2Scamield  *
16d25013f2Scamield  * - Redistributions in binary form must reproduce the above copyright
17d25013f2Scamield  * notice, this list of conditions and the following disclaimer in the
18d25013f2Scamield  * documentation and/or other materials provided with the distribution.
19d25013f2Scamield  *
20d25013f2Scamield  * - Neither the name of the Stichting Centrum voor Wiskunde en
21d25013f2Scamield  * Informatica, nor the names of its contributors may be used to endorse or
22d25013f2Scamield  * promote products derived from this software without specific prior
23d25013f2Scamield  * written permission.
24d25013f2Scamield  *
25d25013f2Scamield  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
26d25013f2Scamield  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27d25013f2Scamield  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
28d25013f2Scamield  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
29d25013f2Scamield  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30d25013f2Scamield  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31d25013f2Scamield  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32d25013f2Scamield  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33d25013f2Scamield  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34d25013f2Scamield  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35d25013f2Scamield  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36d25013f2Scamield  */
37d25013f2Scamield 
38d25013f2Scamield /*
39d25013f2Scamield  * Copyright (c) 1982 Jay Fenlason <hack@gnu.org>
40d25013f2Scamield  * All rights reserved.
41d25013f2Scamield  *
42d25013f2Scamield  * Redistribution and use in source and binary forms, with or without
43d25013f2Scamield  * modification, are permitted provided that the following conditions
44d25013f2Scamield  * are met:
45d25013f2Scamield  * 1. Redistributions of source code must retain the above copyright
46d25013f2Scamield  *    notice, this list of conditions and the following disclaimer.
47d25013f2Scamield  * 2. Redistributions in binary form must reproduce the above copyright
48d25013f2Scamield  *    notice, this list of conditions and the following disclaimer in the
49d25013f2Scamield  *    documentation and/or other materials provided with the distribution.
50d25013f2Scamield  * 3. The name of the author may not be used to endorse or promote products
51d25013f2Scamield  *    derived from this software without specific prior written permission.
52d25013f2Scamield  *
53d25013f2Scamield  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
54d25013f2Scamield  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
55d25013f2Scamield  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
56d25013f2Scamield  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
57d25013f2Scamield  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
58d25013f2Scamield  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
59d25013f2Scamield  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
60d25013f2Scamield  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
61d25013f2Scamield  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
62d25013f2Scamield  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
63df930be7Sderaadt  */
64df930be7Sderaadt 
656cd28e42Smillert #include <fcntl.h>
66911134d2Sguenther #include <stdarg.h>
67aed906e4Smestre #include <string.h>
68df930be7Sderaadt 
69df930be7Sderaadt #define	Null(type)	((struct type *) 0)
70df930be7Sderaadt 
71aed906e4Smestre #include "config.h"
72df930be7Sderaadt #include "def.objclass.h"
73df930be7Sderaadt 
74df930be7Sderaadt typedef struct {
75df930be7Sderaadt 	xchar x,y;
76df930be7Sderaadt } coord;
77df930be7Sderaadt 
784a5fbbc4Spjanzen #include "def.mkroom.h"
79df930be7Sderaadt #include "def.monst.h"	/* uses coord */
80df930be7Sderaadt #include "def.gold.h"
81df930be7Sderaadt #include "def.trap.h"
82df930be7Sderaadt #include "def.obj.h"
83df930be7Sderaadt #include "def.flag.h"
844a5fbbc4Spjanzen #include "def.wseg.h"
85df930be7Sderaadt 
86df930be7Sderaadt #define	plur(x)	(((x) == 1) ? "" : "s")
87df930be7Sderaadt 
88df930be7Sderaadt #define	BUFSZ	256	/* for getlin buffers */
89df930be7Sderaadt #define	PL_NSIZ	32	/* name of player, ghost, shopkeeper */
90df930be7Sderaadt 
91df930be7Sderaadt #include "def.rm.h"
92df930be7Sderaadt #include "def.permonst.h"
93df930be7Sderaadt 
94df930be7Sderaadt extern xchar xdnstair, ydnstair, xupstair, yupstair; /* stairs up and down. */
95df930be7Sderaadt 
96df930be7Sderaadt extern xchar dlevel;
97df930be7Sderaadt #define	newstring(x)	(char *) alloc((unsigned)(x))
98aed906e4Smestre 
99df930be7Sderaadt #include "hack.onames.h"
100df930be7Sderaadt 
101df930be7Sderaadt #define ON 1
102df930be7Sderaadt #define OFF 0
103df930be7Sderaadt 
104df930be7Sderaadt extern struct obj *invent, *uwep, *uarm, *uarm2, *uarmh, *uarms, *uarmg,
105df930be7Sderaadt 	*uleft, *uright, *fcobj;
106df930be7Sderaadt extern struct obj *uchain;	/* defined iff PUNISHED */
107df930be7Sderaadt extern struct obj *uball;	/* defined if PUNISHED */
108df930be7Sderaadt 
109df930be7Sderaadt struct prop {
110df930be7Sderaadt #define	TIMEOUT		007777	/* mask */
111df930be7Sderaadt #define	LEFT_RING	W_RINGL	/* 010000L */
112df930be7Sderaadt #define	RIGHT_RING	W_RINGR	/* 020000L */
113df930be7Sderaadt #define	INTRINSIC	040000L
114df930be7Sderaadt #define	LEFT_SIDE	LEFT_RING
115df930be7Sderaadt #define	RIGHT_SIDE	RIGHT_RING
116df930be7Sderaadt #define	BOTH_SIDES	(LEFT_SIDE | RIGHT_SIDE)
117df930be7Sderaadt 	long p_flgs;
118df930be7Sderaadt 	int (*p_tofn)();	/* called after timeout */
119df930be7Sderaadt };
120df930be7Sderaadt 
121df930be7Sderaadt struct you {
122df930be7Sderaadt 	xchar ux, uy;
123df930be7Sderaadt 	schar dx, dy, dz;	/* direction of move (or zap or ... ) */
124df930be7Sderaadt #ifdef QUEST
125df930be7Sderaadt 	schar di;		/* direction of FF */
126df930be7Sderaadt 	xchar ux0, uy0;		/* initial position FF */
12754da88e4Spjanzen #endif /* QUEST */
128df930be7Sderaadt 	xchar udisx, udisy;	/* last display pos */
129df930be7Sderaadt 	char usym;		/* usually '@' */
130df930be7Sderaadt 	schar uluck;
131df930be7Sderaadt #define	LUCKMAX		10	/* on moonlit nights 11 */
132df930be7Sderaadt #define	LUCKMIN		(-10)
133df930be7Sderaadt 	int last_str_turn:3;	/* 0: none, 1: half turn, 2: full turn */
134df930be7Sderaadt 				/* +: turn right, -: turn left */
135df930be7Sderaadt 	unsigned udispl:1;	/* @ on display */
136df930be7Sderaadt 	unsigned ulevel:4;	/* 1 - 14 */
137df930be7Sderaadt #ifdef QUEST
138df930be7Sderaadt 	unsigned uhorizon:7;
13954da88e4Spjanzen #endif /* QUEST */
140df930be7Sderaadt 	unsigned utrap:3;	/* trap timeout */
141df930be7Sderaadt 	unsigned utraptype:1;	/* defined if utrap nonzero */
142df930be7Sderaadt #define	TT_BEARTRAP	0
143df930be7Sderaadt #define	TT_PIT		1
144df930be7Sderaadt 	unsigned uinshop:6;	/* used only in shk.c - (roomno+1) of shop */
145df930be7Sderaadt 
146df930be7Sderaadt 
147df930be7Sderaadt /* perhaps these #define's should also be generated by makedefs */
148df930be7Sderaadt #define	TELEPAT		LAST_RING		/* not a ring */
149df930be7Sderaadt #define	Telepat		u.uprops[TELEPAT].p_flgs
150df930be7Sderaadt #define	FAST		(LAST_RING+1)		/* not a ring */
151df930be7Sderaadt #define	Fast		u.uprops[FAST].p_flgs
152df930be7Sderaadt #define	CONFUSION	(LAST_RING+2)		/* not a ring */
153df930be7Sderaadt #define	Confusion	u.uprops[CONFUSION].p_flgs
154df930be7Sderaadt #define	INVIS		(LAST_RING+3)		/* not a ring */
155df930be7Sderaadt #define	Invis		u.uprops[INVIS].p_flgs
156df930be7Sderaadt #define Invisible	(Invis && !See_invisible)
157df930be7Sderaadt #define	GLIB		(LAST_RING+4)		/* not a ring */
158df930be7Sderaadt #define	Glib		u.uprops[GLIB].p_flgs
159df930be7Sderaadt #define	PUNISHED	(LAST_RING+5)		/* not a ring */
160df930be7Sderaadt #define	Punished	u.uprops[PUNISHED].p_flgs
161df930be7Sderaadt #define	SICK		(LAST_RING+6)		/* not a ring */
162df930be7Sderaadt #define	Sick		u.uprops[SICK].p_flgs
163df930be7Sderaadt #define	BLIND		(LAST_RING+7)		/* not a ring */
164df930be7Sderaadt #define	Blind		u.uprops[BLIND].p_flgs
165df930be7Sderaadt #define	WOUNDED_LEGS	(LAST_RING+8)		/* not a ring */
166df930be7Sderaadt #define Wounded_legs	u.uprops[WOUNDED_LEGS].p_flgs
167df930be7Sderaadt #define STONED		(LAST_RING+9)		/* not a ring */
168df930be7Sderaadt #define Stoned		u.uprops[STONED].p_flgs
169df930be7Sderaadt #define PROP(x) (x-RIN_ADORNMENT)       /* convert ring to index in uprops */
170df930be7Sderaadt 	unsigned umconf:1;
171df930be7Sderaadt 	char *usick_cause;
172df930be7Sderaadt 	struct prop uprops[LAST_RING+10];
173df930be7Sderaadt 
174df930be7Sderaadt 	unsigned uswallow:1;		/* set if swallowed by a monster */
175df930be7Sderaadt 	unsigned uswldtim:4;		/* time you have been swallowed */
176df930be7Sderaadt 	unsigned uhs:3;			/* hunger state - see hack.eat.c */
177df930be7Sderaadt 	schar ustr,ustrmax;
178df930be7Sderaadt 	schar udaminc;
179df930be7Sderaadt 	schar uac;
180df930be7Sderaadt 	int uhp,uhpmax;
181df930be7Sderaadt 	long int ugold,ugold0,uexp,urexp;
182df930be7Sderaadt 	int uhunger;			/* refd only in eat.c and shk.c */
183df930be7Sderaadt 	int uinvault;
184df930be7Sderaadt 	struct monst *ustuck;
185df930be7Sderaadt 	int nr_killed[CMNUM+2];		/* used for experience bookkeeping */
186df930be7Sderaadt };
187df930be7Sderaadt 
188df930be7Sderaadt extern struct you u;
189df930be7Sderaadt 
190df930be7Sderaadt extern char *traps[];
191df930be7Sderaadt extern char vowels[];
192df930be7Sderaadt 
193df930be7Sderaadt extern xchar curx,cury;	/* cursor location on screen */
194df930be7Sderaadt 
195df930be7Sderaadt extern coord bhitpos;	/* place where thrown weapon falls to the ground */
196df930be7Sderaadt 
197df930be7Sderaadt extern xchar seehx,seelx,seehy,seely; /* where to see*/
198df930be7Sderaadt extern char *save_cm,*killer;
199df930be7Sderaadt 
200df930be7Sderaadt extern xchar dlevel, maxdlevel; /* dungeon level */
201df930be7Sderaadt 
202df930be7Sderaadt extern long moves;
203df930be7Sderaadt 
204df930be7Sderaadt extern int multi;
205df930be7Sderaadt 
206df930be7Sderaadt 
207846311fcStdeval extern char lock[PL_NSIZ+4];
208df930be7Sderaadt 
209df930be7Sderaadt 
210df930be7Sderaadt #define DIST(x1,y1,x2,y2)       (((x1)-(x2))*((x1)-(x2)) + ((y1)-(y2))*((y1)-(y2)))
211df930be7Sderaadt 
212df930be7Sderaadt #define	PL_CSIZ		20	/* sizeof pl_character */
213df930be7Sderaadt #define	MAX_CARR_CAP	120	/* so that boulders can be heavier */
214df930be7Sderaadt #define	MAXLEVEL	40
215df930be7Sderaadt #define	FAR	(COLNO+2)	/* position outside screen */
2164a5fbbc4Spjanzen 
2174a5fbbc4Spjanzen 
2184a5fbbc4Spjanzen /* alloc.c */
21905f1a98eSderaadt void *alloc(unsigned int);
2204a5fbbc4Spjanzen 
2214a5fbbc4Spjanzen /* hack.apply.c */
2224a5fbbc4Spjanzen int  doapply(void);
2234a5fbbc4Spjanzen int  holetime(void);
2244a5fbbc4Spjanzen void dighole(void);
2254a5fbbc4Spjanzen 
2264a5fbbc4Spjanzen /* hack.bones.c */
2274a5fbbc4Spjanzen void savebones(void);
2284a5fbbc4Spjanzen int  getbones(void);
2294a5fbbc4Spjanzen 
2304a5fbbc4Spjanzen /* hack.c */
2314a5fbbc4Spjanzen void unsee(void);
2324a5fbbc4Spjanzen void seeoff(int);
2334a5fbbc4Spjanzen void domove(void);
2344a5fbbc4Spjanzen int  dopickup(void);
2354a5fbbc4Spjanzen void pickup(int);
2364a5fbbc4Spjanzen void lookaround(void);
2374a5fbbc4Spjanzen int  monster_nearby(void);
2384a5fbbc4Spjanzen int  cansee(xchar, xchar);
2394a5fbbc4Spjanzen int  sgn(int);
2404a5fbbc4Spjanzen void setsee(void);
2414a5fbbc4Spjanzen void nomul(int);
2424a5fbbc4Spjanzen int  abon(void);
2434a5fbbc4Spjanzen int  dbon(void);
2444a5fbbc4Spjanzen void losestr(int);
2454a5fbbc4Spjanzen void losehp(int, char *);
2464a5fbbc4Spjanzen void losehp_m(int, struct monst *);
2474a5fbbc4Spjanzen void losexp(void);
2484a5fbbc4Spjanzen int  inv_weight(void);
2494a5fbbc4Spjanzen long newuexp(void);
2504a5fbbc4Spjanzen 
2514a5fbbc4Spjanzen /* hack.cmd.c */
2524a5fbbc4Spjanzen void rhack(char *);
2534a5fbbc4Spjanzen int  doextcmd(void);
2544a5fbbc4Spjanzen int  movecmd(char);
2554a5fbbc4Spjanzen int  getdir(boolean);
2564a5fbbc4Spjanzen void confdir(void);
2574a5fbbc4Spjanzen #ifdef QUEST
2584a5fbbc4Spjanzen void finddir(void);
2594a5fbbc4Spjanzen int  isroom(int, int);
2604a5fbbc4Spjanzen #endif
2614a5fbbc4Spjanzen int  isok(int, int);
2624a5fbbc4Spjanzen 
2634a5fbbc4Spjanzen /* hack.do.c */
2644a5fbbc4Spjanzen int  dodrop(void);
2654a5fbbc4Spjanzen void dropx(struct obj *);
2664a5fbbc4Spjanzen void dropy(struct obj *);
2674a5fbbc4Spjanzen int  doddrop(void);
2684a5fbbc4Spjanzen int  dodown(void);
2694a5fbbc4Spjanzen int  doup(void);
2704a5fbbc4Spjanzen void goto_level(int, boolean);
2714a5fbbc4Spjanzen int  donull(void);
2724a5fbbc4Spjanzen int  dopray(void);
2734a5fbbc4Spjanzen int  dothrow(void);
2744a5fbbc4Spjanzen struct obj *splitobj(struct obj *, int);
2754a5fbbc4Spjanzen void more_experienced(int, int);
2764a5fbbc4Spjanzen void set_wounded_legs(long, int);
2774a5fbbc4Spjanzen void heal_legs(void);
2784a5fbbc4Spjanzen 
2794a5fbbc4Spjanzen /* hack.do_name.c */
2804a5fbbc4Spjanzen coord getpos(int, char *);
2814a5fbbc4Spjanzen int  do_mname(void);
2824a5fbbc4Spjanzen int  ddocall(void);
2834a5fbbc4Spjanzen void docall(struct obj *);
2844a5fbbc4Spjanzen char *xmonnam(struct monst *, int);
2854a5fbbc4Spjanzen char *monnam(struct monst *);
2864a5fbbc4Spjanzen char *Monnam(struct monst *);
2874a5fbbc4Spjanzen char *amonnam(struct monst *, char *);
2884a5fbbc4Spjanzen char *Amonnam(struct monst *, char *);
2894a5fbbc4Spjanzen char *Xmonnam(struct monst *);
2904a5fbbc4Spjanzen 
2914a5fbbc4Spjanzen /* hack.do_wear.c */
2924a5fbbc4Spjanzen int  doremarm(void);
2934a5fbbc4Spjanzen int  doremring(void);
2944a5fbbc4Spjanzen int  armoroff(struct obj *);
2954a5fbbc4Spjanzen int  doweararm(void);
2964a5fbbc4Spjanzen int  dowearring(void);
2974a5fbbc4Spjanzen void ringoff(struct obj *);
2984a5fbbc4Spjanzen void find_ac(void);
2994a5fbbc4Spjanzen void glibr(void);
3004a5fbbc4Spjanzen struct obj *some_armor(void);
3014a5fbbc4Spjanzen void corrode_armor(void);
3024a5fbbc4Spjanzen 
3034a5fbbc4Spjanzen /* hack.dog.c */
3044a5fbbc4Spjanzen void makedog(void);
3054a5fbbc4Spjanzen void losedogs(void);
3064a5fbbc4Spjanzen void keepdogs(void);
3074a5fbbc4Spjanzen void fall_down(struct monst *);
3084a5fbbc4Spjanzen int  dog_move(struct monst *, int);
3094a5fbbc4Spjanzen int  inroom(xchar, xchar);
3104a5fbbc4Spjanzen int  tamedog(struct monst *, struct obj *);
3114a5fbbc4Spjanzen 
3124a5fbbc4Spjanzen /* hack.eat.c */
3134a5fbbc4Spjanzen void init_uhunger(void);
3144a5fbbc4Spjanzen int  opentin(void);
3154a5fbbc4Spjanzen void Meatdone(void);
3164a5fbbc4Spjanzen int  doeat(void);
3174a5fbbc4Spjanzen void gethungry(void);
3184a5fbbc4Spjanzen void morehungry(int);
3194a5fbbc4Spjanzen void lesshungry(int);
3204a5fbbc4Spjanzen void unfaint(void);
3214a5fbbc4Spjanzen int  poisonous(struct obj *);
3224a5fbbc4Spjanzen 
3234a5fbbc4Spjanzen /* hack.end.c */
3244a5fbbc4Spjanzen void done1(int);
3254a5fbbc4Spjanzen int  done2(void);
3264a5fbbc4Spjanzen void done_intr(int);
3274a5fbbc4Spjanzen void done_hangup(int);
3284a5fbbc4Spjanzen void done_in_by(struct monst *);
3294a5fbbc4Spjanzen void done(char *);
3304a5fbbc4Spjanzen void clearlocks(void);
3314a5fbbc4Spjanzen char *eos(char *);
3324a5fbbc4Spjanzen void charcat(char *, char);
3334a5fbbc4Spjanzen void prscore(int, char **);
3344a5fbbc4Spjanzen 
3354a5fbbc4Spjanzen /* hack.engrave.c */
3364a5fbbc4Spjanzen struct engr *engr_at(xchar, xchar);
3374a5fbbc4Spjanzen int  sengr_at(char *, xchar, xchar);
3384a5fbbc4Spjanzen void u_wipe_engr(int);
3394a5fbbc4Spjanzen void wipe_engr_at(xchar, xchar, xchar);
3404a5fbbc4Spjanzen void read_engr_at(int, int);
3414a5fbbc4Spjanzen void make_engr_at(int, int, char *);
3424a5fbbc4Spjanzen int  doengrave(void);
3434a5fbbc4Spjanzen void save_engravings(int);
3444a5fbbc4Spjanzen void rest_engravings(int);
3454a5fbbc4Spjanzen 
3464a5fbbc4Spjanzen /* hack.fight.c */
3474a5fbbc4Spjanzen int  hitmm(struct monst *, struct monst *);
3484a5fbbc4Spjanzen void mondied(struct monst *);
3494a5fbbc4Spjanzen int  fightm(struct monst *);
3504a5fbbc4Spjanzen int  thitu(int, int, char *);
3514a5fbbc4Spjanzen boolean hmon(struct monst *, struct obj *, int);
3524a5fbbc4Spjanzen boolean attack(struct monst *);
3534a5fbbc4Spjanzen 
3544a5fbbc4Spjanzen /* hack.invent.c */
3554a5fbbc4Spjanzen struct obj *addinv(struct obj *);
3564a5fbbc4Spjanzen void useup(struct obj *);
3574a5fbbc4Spjanzen void freeinv(struct obj *);
3584a5fbbc4Spjanzen void delobj(struct obj *);
3594a5fbbc4Spjanzen void freeobj(struct obj *);
3604a5fbbc4Spjanzen void freegold(struct gold *);
3614a5fbbc4Spjanzen void deltrap(struct trap *);
3624a5fbbc4Spjanzen struct monst *m_at(int, int);
3634a5fbbc4Spjanzen struct obj   *o_at(int, int);
3644a5fbbc4Spjanzen struct obj   *sobj_at(int, int, int);
3654a5fbbc4Spjanzen int  carried(struct obj *);
3664a5fbbc4Spjanzen boolean carrying(int);
3674a5fbbc4Spjanzen struct obj *o_on(unsigned int, struct obj *);
3684a5fbbc4Spjanzen struct trap *t_at(int, int);
3694a5fbbc4Spjanzen struct gold *g_at(int, int);
3704a5fbbc4Spjanzen struct obj *mkgoldobj(long);
3714a5fbbc4Spjanzen struct obj *getobj(char *, char *);
3724a5fbbc4Spjanzen int  ckunpaid(struct obj *);
3734a5fbbc4Spjanzen int  ggetobj(char *, int (*fn)(struct obj *), int);
3744a5fbbc4Spjanzen int  askchain(struct obj *, char *, int, int (*fn)(struct obj *),
3754a5fbbc4Spjanzen     int (*ckfn)(struct obj *), int);
3764a5fbbc4Spjanzen void prinv(struct obj *);
3774a5fbbc4Spjanzen int  ddoinv(void);
3784a5fbbc4Spjanzen int  dotypeinv(void);
3794a5fbbc4Spjanzen int  dolook(void);
3804a5fbbc4Spjanzen void stackobj(struct obj *);
3814a5fbbc4Spjanzen int  countgold(void);
3824a5fbbc4Spjanzen int  doprgold(void);
3834a5fbbc4Spjanzen int  doprwep(void);
3844a5fbbc4Spjanzen int  doprarm(void);
3854a5fbbc4Spjanzen int  doprring(void);
3864a5fbbc4Spjanzen 
3874a5fbbc4Spjanzen /* hack.ioctl.c */
3884a5fbbc4Spjanzen void getioctls(void);
3894a5fbbc4Spjanzen void setioctls(void);
3904a5fbbc4Spjanzen #ifdef SUSPEND
3914a5fbbc4Spjanzen int  dosuspend(void);
3924a5fbbc4Spjanzen #endif
3934a5fbbc4Spjanzen 
3944a5fbbc4Spjanzen /* hack.lev.c */
3954a5fbbc4Spjanzen void savelev(int, xchar);
396ebf3d589Sguenther void bwrite(int, const void *, ssize_t);
3974a5fbbc4Spjanzen void saveobjchn(int, struct obj *);
3984a5fbbc4Spjanzen void savemonchn(int, struct monst *);
3994a5fbbc4Spjanzen void savegoldchn(int, struct gold *);
4004a5fbbc4Spjanzen void savetrapchn(int, struct trap *);
4014a5fbbc4Spjanzen void getlev(int, int, xchar);
4024a5fbbc4Spjanzen void mread(int, char *, unsigned);
4034a5fbbc4Spjanzen void mklev(void);
4044a5fbbc4Spjanzen 
4054a5fbbc4Spjanzen /* hack.main.c */
4064a5fbbc4Spjanzen void glo(int);
4074a5fbbc4Spjanzen void askname(void);
408911134d2Sguenther void impossible(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
4094a5fbbc4Spjanzen /* ... stuff: fix in files; printf-like ones have spec _attrib or
4104a5fbbc4Spjanzen  * something */
4114a5fbbc4Spjanzen void stop_occupation(void);
4124a5fbbc4Spjanzen 
4134a5fbbc4Spjanzen /* hack.makemon.c */
4144a5fbbc4Spjanzen struct monst *makemon(struct permonst *, int, int);
4154a5fbbc4Spjanzen coord enexto(xchar, xchar);
4164a5fbbc4Spjanzen int  goodpos(int, int);
4174a5fbbc4Spjanzen void rloc(struct monst *);
4184a5fbbc4Spjanzen struct monst *mkmon_at(char, int, int);
4194a5fbbc4Spjanzen 
4204a5fbbc4Spjanzen /* hack.mhitu.c */
4214a5fbbc4Spjanzen int  mhitu(struct monst *);
4224a5fbbc4Spjanzen int  hitu(struct monst *, int);
4234a5fbbc4Spjanzen 
4244a5fbbc4Spjanzen /* hack.mklev.c */
4254a5fbbc4Spjanzen void makelevel(void);
4264a5fbbc4Spjanzen int  makerooms(void);
4274a5fbbc4Spjanzen void mktrap(int, int, struct mkroom *);
4284a5fbbc4Spjanzen 
4294a5fbbc4Spjanzen /* hack.mkmaze.c */
4304a5fbbc4Spjanzen void makemaz(void);
4314a5fbbc4Spjanzen coord mazexy(void);
4324a5fbbc4Spjanzen 
4334a5fbbc4Spjanzen /* hack/mkobj.c */
4344a5fbbc4Spjanzen struct obj * mkobj_at(int, int, int);
4354a5fbbc4Spjanzen void mksobj_at(int, int, int);
4364a5fbbc4Spjanzen struct obj *mkobj(int);
4374a5fbbc4Spjanzen struct obj *mksobj(int);
4384a5fbbc4Spjanzen int  letter(int);
4394a5fbbc4Spjanzen int  weight(struct obj *);
4404a5fbbc4Spjanzen void mkgold(long, int, int);
4414a5fbbc4Spjanzen 
4424a5fbbc4Spjanzen /* hack.mkshop.c */
4434a5fbbc4Spjanzen #ifndef QUEST
4444a5fbbc4Spjanzen void mkshop(void);
4454a5fbbc4Spjanzen void mkzoo(int);
4464a5fbbc4Spjanzen struct permonst *morguemon(void);
4474a5fbbc4Spjanzen void mkswamp(void);
4484a5fbbc4Spjanzen #endif
4494a5fbbc4Spjanzen 
4504a5fbbc4Spjanzen /* hack.mon.c */
4514a5fbbc4Spjanzen void movemon(void);
4524a5fbbc4Spjanzen void justswld(struct monst *, char *);
4534a5fbbc4Spjanzen void youswld(struct monst *, int, int, char *);
4544a5fbbc4Spjanzen int  dochug(struct monst *);
4554a5fbbc4Spjanzen int  m_move(struct monst *, int);
4564a5fbbc4Spjanzen int  mfndpos(struct monst *, coord pos[9], int info[9], int);
4574a5fbbc4Spjanzen int  dist(int, int);
4584a5fbbc4Spjanzen void poisoned(char *, char *);
4594a5fbbc4Spjanzen void mondead(struct monst *);
4604a5fbbc4Spjanzen void replmon(struct monst *, struct monst *);
4614a5fbbc4Spjanzen void relmon(struct monst *);
4624a5fbbc4Spjanzen void monfree(struct monst *);
4634a5fbbc4Spjanzen void unstuck(struct monst *);
4644a5fbbc4Spjanzen void killed(struct monst *);
4654a5fbbc4Spjanzen void kludge(char *, char *);
4664a5fbbc4Spjanzen void rescham(void);
4674a5fbbc4Spjanzen int  newcham(struct monst *, struct permonst *);
4684a5fbbc4Spjanzen void mnexto(struct monst *);
4694a5fbbc4Spjanzen void setmangry(struct monst *);
4704a5fbbc4Spjanzen int  canseemon(struct monst *);
4714a5fbbc4Spjanzen 
4724a5fbbc4Spjanzen /* hack.o_init.c */
4734a5fbbc4Spjanzen int  letindex(char);
4744a5fbbc4Spjanzen void init_objects(void);
4754a5fbbc4Spjanzen int  probtype(char);
4764a5fbbc4Spjanzen void oinit(void);
4774a5fbbc4Spjanzen void savenames(int);
4784a5fbbc4Spjanzen void restnames(int);
4794a5fbbc4Spjanzen int  dodiscovered(void);
4804a5fbbc4Spjanzen 
4814a5fbbc4Spjanzen /* hack.objnam.c */
4824a5fbbc4Spjanzen char *strprepend(char *, char *);
4834a5fbbc4Spjanzen char *typename(int);
4844a5fbbc4Spjanzen char *xname(struct obj *);
4854a5fbbc4Spjanzen char *doname(struct obj *);
4864a5fbbc4Spjanzen void setan(char *, char *, size_t);
4874a5fbbc4Spjanzen char *aobjnam(struct obj *, char *);
4884a5fbbc4Spjanzen char *Doname(struct obj *);
4894a5fbbc4Spjanzen struct obj *readobjnam(char *, size_t);
4904a5fbbc4Spjanzen 
4914a5fbbc4Spjanzen /* hack.options.c */
4924a5fbbc4Spjanzen void initoptions(void);
4934a5fbbc4Spjanzen int  doset(void);
4944a5fbbc4Spjanzen 
4954a5fbbc4Spjanzen /* hack.pager.c */
4964a5fbbc4Spjanzen int  dowhatis(void);
4974a5fbbc4Spjanzen void intruph(int);
4984a5fbbc4Spjanzen void set_whole_screen(void);
4994a5fbbc4Spjanzen #ifdef NEWS
5004a5fbbc4Spjanzen int  readnews(void);
5014a5fbbc4Spjanzen #endif
5024a5fbbc4Spjanzen void set_pager(int);
5034a5fbbc4Spjanzen int  page_line(char *);
5044a5fbbc4Spjanzen void cornline(int, char *);
5054a5fbbc4Spjanzen int  dohelp(void);
5064a5fbbc4Spjanzen int  page_file(char *, boolean);
5074a5fbbc4Spjanzen #ifdef UNIX
5084a5fbbc4Spjanzen #ifdef SHELL
5094a5fbbc4Spjanzen int  dosh(void);
5104a5fbbc4Spjanzen #endif
5114a5fbbc4Spjanzen int  child(int);
5124a5fbbc4Spjanzen #endif
5134a5fbbc4Spjanzen 
5144a5fbbc4Spjanzen /* hack.potion.c */
5154a5fbbc4Spjanzen int  dodrink(void);
5164a5fbbc4Spjanzen void pluslvl(void);
5174a5fbbc4Spjanzen void strange_feeling(struct obj *, char *);
5184a5fbbc4Spjanzen void potionhit(struct monst *, struct obj *);
5194a5fbbc4Spjanzen void potionbreathe(struct obj *);
5204a5fbbc4Spjanzen int  dodip(void);
5214a5fbbc4Spjanzen 
5224a5fbbc4Spjanzen /* hack.pri.c */
5234a5fbbc4Spjanzen void swallowed(void);
524911134d2Sguenther void panic(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
5254a5fbbc4Spjanzen void atl(int, int, int);
5264a5fbbc4Spjanzen void on_scr(int, int);
5274a5fbbc4Spjanzen void tmp_at(schar, schar);
5284a5fbbc4Spjanzen void Tmp_at(schar, schar);
5294a5fbbc4Spjanzen void setclipped(void);
5304a5fbbc4Spjanzen void at(xchar, xchar, char);
5314a5fbbc4Spjanzen void prme(void);
5324a5fbbc4Spjanzen int  doredraw(void);
5334a5fbbc4Spjanzen void docrt(void);
5344a5fbbc4Spjanzen void docorner(int, int);
5354a5fbbc4Spjanzen void curs_on_u(void);
5364a5fbbc4Spjanzen void pru(void);
5374a5fbbc4Spjanzen void prl(int, int);
5384a5fbbc4Spjanzen char news0(xchar, xchar);
5394a5fbbc4Spjanzen void newsym(int, int);
5404a5fbbc4Spjanzen void mnewsym(int, int);
5414a5fbbc4Spjanzen void nosee(int, int);
5424a5fbbc4Spjanzen #ifndef QUEST
5434a5fbbc4Spjanzen void prl1(int, int);
5444a5fbbc4Spjanzen void nose1(int, int);
5454a5fbbc4Spjanzen #endif
5464a5fbbc4Spjanzen int  vism_at(int, int);
5474a5fbbc4Spjanzen void unpobj(struct obj *);
5484a5fbbc4Spjanzen void seeobjs(void);
5494a5fbbc4Spjanzen void seemons(void);
5504a5fbbc4Spjanzen void pmon(struct monst *);
5514a5fbbc4Spjanzen void unpmon(struct monst *);
5524a5fbbc4Spjanzen void nscr(void);
5534a5fbbc4Spjanzen void bot(void);
5544a5fbbc4Spjanzen void cls(void);
5554a5fbbc4Spjanzen 
5564a5fbbc4Spjanzen /* hack.read.c */
5574a5fbbc4Spjanzen int  doread(void);
5584a5fbbc4Spjanzen int  identify(struct obj *);
5594a5fbbc4Spjanzen void litroom(boolean);
5604a5fbbc4Spjanzen 
5614a5fbbc4Spjanzen /* hack.rip.c */
5624a5fbbc4Spjanzen void outrip(void);
5634a5fbbc4Spjanzen 
5644a5fbbc4Spjanzen /* hack.rumors.c */
5654a5fbbc4Spjanzen void outrumor(void);
5664a5fbbc4Spjanzen 
5674a5fbbc4Spjanzen /* hack.save.c */
5684a5fbbc4Spjanzen int  dosave(void);
5697ad55f55Smestre __dead void hackhangup(int);
5704a5fbbc4Spjanzen int  dorecover(int);
5714a5fbbc4Spjanzen struct obj *restobjchn(int);
5724a5fbbc4Spjanzen struct monst *restmonchn(int);
5734a5fbbc4Spjanzen 
5744a5fbbc4Spjanzen /* hack.search.c */
5754a5fbbc4Spjanzen int  findit(void);
5764a5fbbc4Spjanzen int  dosearch(void);
5774a5fbbc4Spjanzen int  doidtrap(void);
5784a5fbbc4Spjanzen void wakeup(struct monst *);
5794a5fbbc4Spjanzen void seemimic(struct monst *);
5804a5fbbc4Spjanzen 
5814a5fbbc4Spjanzen /* hack.shk.c */
5824a5fbbc4Spjanzen char *shkname(struct monst *);
5834a5fbbc4Spjanzen void shkdead(struct monst *);
5844a5fbbc4Spjanzen void replshk(struct monst *, struct monst *);
5854a5fbbc4Spjanzen int  inshop(void);
5864a5fbbc4Spjanzen void obfree(struct obj *, struct obj *);
5874a5fbbc4Spjanzen int  dopay(void);
5884a5fbbc4Spjanzen void paybill(void);
5894a5fbbc4Spjanzen void addtobill(struct obj *);
5904a5fbbc4Spjanzen void splitbill(struct obj *, struct obj *);
5914a5fbbc4Spjanzen void subfrombill(struct obj *);
5924a5fbbc4Spjanzen int  doinvbill(int);
5934a5fbbc4Spjanzen int  shkcatch(struct obj *);
5944a5fbbc4Spjanzen int  shk_move(struct monst *);
5954a5fbbc4Spjanzen void shopdig(int);
5964a5fbbc4Spjanzen int  online(int, int);
5974a5fbbc4Spjanzen int  follower(struct monst *);
5984a5fbbc4Spjanzen 
5994a5fbbc4Spjanzen /* hack.shknam.c */
6004a5fbbc4Spjanzen void findname(char *, size_t, char);
6014a5fbbc4Spjanzen 
6024a5fbbc4Spjanzen /* hack.steal.c */
6034a5fbbc4Spjanzen long somegold(void);
6044a5fbbc4Spjanzen void stealgold(struct monst *);
6054a5fbbc4Spjanzen void stealarm(void);
6064a5fbbc4Spjanzen int  steal(struct monst *);
6074a5fbbc4Spjanzen void mpickobj(struct monst *, struct obj *);
6084a5fbbc4Spjanzen int  stealamulet(struct monst *);
6094a5fbbc4Spjanzen void relobj(struct monst *, int);
6104a5fbbc4Spjanzen 
6114a5fbbc4Spjanzen /* hack.termcap.c */
6124a5fbbc4Spjanzen void startup(void);
6134a5fbbc4Spjanzen void start_screen(void);
6144a5fbbc4Spjanzen void end_screen(void);
6154a5fbbc4Spjanzen void start_screen(void);
6164a5fbbc4Spjanzen void curs(int, int);
6174a5fbbc4Spjanzen void cl_end(void);
6184a5fbbc4Spjanzen void clr_screen(void);
6194a5fbbc4Spjanzen void home(void);
6204a5fbbc4Spjanzen void standoutbeg(void);
6214a5fbbc4Spjanzen void standoutend(void);
6224a5fbbc4Spjanzen void backsp(void);
6234a5fbbc4Spjanzen void hackbell(void);
6244a5fbbc4Spjanzen void cl_eos(void);
6254a5fbbc4Spjanzen 
6264a5fbbc4Spjanzen /* hack.timeout.c */
6274a5fbbc4Spjanzen void hacktimeout(void);
6284a5fbbc4Spjanzen 
6294a5fbbc4Spjanzen /* hack.topl.c */
6304a5fbbc4Spjanzen int  doredotopl(void);
6314a5fbbc4Spjanzen void remember_topl(void);
6324a5fbbc4Spjanzen void addtopl(char *);
6334a5fbbc4Spjanzen void more(void);
6344a5fbbc4Spjanzen void cmore(char *);
6354a5fbbc4Spjanzen void clrlin(void);
636911134d2Sguenther void pline(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
637911134d2Sguenther void vpline(const char *, va_list) __attribute__((__format__ (printf, 1, 0)));
6384a5fbbc4Spjanzen void putsym(char);
6394a5fbbc4Spjanzen void putstr(char *);
6404a5fbbc4Spjanzen 
6414a5fbbc4Spjanzen /* hack.track.c */
6424a5fbbc4Spjanzen void initrack(void);
6434a5fbbc4Spjanzen void settrack(void);
6444a5fbbc4Spjanzen coord *gettrack(int, int);
6454a5fbbc4Spjanzen 
6464a5fbbc4Spjanzen /* hack.trap.c */
6474a5fbbc4Spjanzen struct trap *maketrap(int, int, int);
6484a5fbbc4Spjanzen void dotrap(struct trap *);
6494a5fbbc4Spjanzen int  mintrap(struct monst *);
6504a5fbbc4Spjanzen void selftouch(char *);
6514a5fbbc4Spjanzen void float_up(void);
6524a5fbbc4Spjanzen int  float_down(void);
6534a5fbbc4Spjanzen void tele(void);
6544a5fbbc4Spjanzen int  dotele(void);
6554a5fbbc4Spjanzen void placebc(int);
6564a5fbbc4Spjanzen void unplacebc(void);
6574a5fbbc4Spjanzen void level_tele(void);
6584a5fbbc4Spjanzen void drown(void);
6594a5fbbc4Spjanzen 
6604a5fbbc4Spjanzen /* hack.tty.c */
6614a5fbbc4Spjanzen void gettty(void);
6624a5fbbc4Spjanzen void settty(char *);
6634a5fbbc4Spjanzen void setftty(void);
6647ad55f55Smestre __dead void error(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
6654a5fbbc4Spjanzen void getlin(char *);
6664a5fbbc4Spjanzen void getret(void);
6674a5fbbc4Spjanzen void cgetret(char *);
6684a5fbbc4Spjanzen void xwaitforspace(char *);
6694a5fbbc4Spjanzen char *parse(void);
6704a5fbbc4Spjanzen char readchar(void);
6714a5fbbc4Spjanzen void end_of_input(void);
6724a5fbbc4Spjanzen 
6734a5fbbc4Spjanzen /* hack.u_init.c */
6744a5fbbc4Spjanzen void u_init(void);
6754a5fbbc4Spjanzen void plnamesuffix(void);
6764a5fbbc4Spjanzen 
6774a5fbbc4Spjanzen /* hack.unix.c */
6784a5fbbc4Spjanzen int  getyear(void);
6794a5fbbc4Spjanzen char *getdate(void);
6804a5fbbc4Spjanzen int  phase_of_the_moon(void);
6814a5fbbc4Spjanzen int  night(void);
6824a5fbbc4Spjanzen int  midnight(void);
6834a5fbbc4Spjanzen void getlock(void);
6844a5fbbc4Spjanzen #ifdef MAIL
6854a5fbbc4Spjanzen void getmailstatus(void);
6864a5fbbc4Spjanzen void ckmailstatus(void);
6874a5fbbc4Spjanzen void readmail(void);
6884a5fbbc4Spjanzen #endif
6894a5fbbc4Spjanzen void regularize(char *);
6904a5fbbc4Spjanzen 
6914a5fbbc4Spjanzen /* hack.vault.c */
6924a5fbbc4Spjanzen void setgd(void);
6934a5fbbc4Spjanzen void invault(void);
6944a5fbbc4Spjanzen int  gd_move(void);
6954a5fbbc4Spjanzen void gddead(void);
6964a5fbbc4Spjanzen void replgd(struct monst *, struct monst *);
6974a5fbbc4Spjanzen 
6984a5fbbc4Spjanzen /* hack.version.c */
6994a5fbbc4Spjanzen int  doversion(void);
7004a5fbbc4Spjanzen 
7014a5fbbc4Spjanzen /* hack.wield.c */
7024a5fbbc4Spjanzen void setuwep(struct obj *);
7034a5fbbc4Spjanzen int  dowield(void);
7044a5fbbc4Spjanzen void corrode_weapon(void);
7054a5fbbc4Spjanzen int  chwepon(struct obj *, int);
7064a5fbbc4Spjanzen 
7074a5fbbc4Spjanzen /* hack.wizard.c */
7084a5fbbc4Spjanzen void amulet(void);
7094a5fbbc4Spjanzen int  wiz_hit(struct monst *);
7104a5fbbc4Spjanzen void inrange(struct monst *);
7114a5fbbc4Spjanzen void aggravate(void);
7124a5fbbc4Spjanzen 
7134a5fbbc4Spjanzen /* hack.worm.c */
7144a5fbbc4Spjanzen #ifndef NOWORM
7154a5fbbc4Spjanzen int  getwn(struct monst *);
7164a5fbbc4Spjanzen void initworm(struct monst *);
7174a5fbbc4Spjanzen void worm_move(struct monst *);
7184a5fbbc4Spjanzen void worm_nomove(struct monst *);
7194a5fbbc4Spjanzen void wormdead(struct monst *);
7204a5fbbc4Spjanzen void wormhit(struct monst *);
7214a5fbbc4Spjanzen void wormsee(unsigned);
7224a5fbbc4Spjanzen void pwseg(struct wseg *);
7234a5fbbc4Spjanzen void cutworm(struct monst *, xchar, xchar, uchar);
7244a5fbbc4Spjanzen #endif
7254a5fbbc4Spjanzen 
7264a5fbbc4Spjanzen /* hack.worn.c */
7274a5fbbc4Spjanzen void setworn(struct obj *, long);
7284a5fbbc4Spjanzen void setnotworn(struct obj *);
7294a5fbbc4Spjanzen 
7304a5fbbc4Spjanzen /* hack.zap.c */
7314a5fbbc4Spjanzen void bhitm(struct monst *, struct obj *);
7324a5fbbc4Spjanzen boolean bhito(struct obj *, struct obj *);
7334a5fbbc4Spjanzen int  dozap(void);
7344a5fbbc4Spjanzen char *exclam(int);
7354a5fbbc4Spjanzen void hit(char *, struct monst *, char *);
7364a5fbbc4Spjanzen void miss(char *, struct monst *);
7374a5fbbc4Spjanzen struct monst *bhit(int, int, int, char,
7384a5fbbc4Spjanzen     void (*fhitm)(struct monst *, struct obj *),
7394a5fbbc4Spjanzen     boolean (*fhito)(struct obj *, struct obj *), struct obj *);
7404a5fbbc4Spjanzen struct monst *boomhit(int, int);
7414a5fbbc4Spjanzen void buzz(int, xchar, xchar, int, int);
7424a5fbbc4Spjanzen void fracture_rock(struct obj *);
7434a5fbbc4Spjanzen 
7444a5fbbc4Spjanzen /* rnd.c */
7454a5fbbc4Spjanzen int  rn1(int, int);
7464a5fbbc4Spjanzen int  rn2(int);
7474a5fbbc4Spjanzen int  rnd(int);
7484a5fbbc4Spjanzen int  d(int, int);
749