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