Home | History | Annotate | Line # | Download | only in rogue
rogue.h revision 1.11.8.1
      1  1.11.8.1   itojun /*	$NetBSD: rogue.h,v 1.11.8.1 2002/10/02 01:21:01 itojun Exp $	*/
      2       1.3      cgd 
      3       1.1      cgd /*
      4       1.3      cgd  * Copyright (c) 1988, 1993
      5       1.3      cgd  *	The Regents of the University of California.  All rights reserved.
      6       1.1      cgd  *
      7       1.1      cgd  * This code is derived from software contributed to Berkeley by
      8       1.5    lukem  * Timothy C. Stoehr.
      9       1.1      cgd  *
     10       1.1      cgd  * Redistribution and use in source and binary forms, with or without
     11       1.1      cgd  * modification, are permitted provided that the following conditions
     12       1.1      cgd  * are met:
     13       1.1      cgd  * 1. Redistributions of source code must retain the above copyright
     14       1.1      cgd  *    notice, this list of conditions and the following disclaimer.
     15       1.1      cgd  * 2. Redistributions in binary form must reproduce the above copyright
     16       1.1      cgd  *    notice, this list of conditions and the following disclaimer in the
     17       1.1      cgd  *    documentation and/or other materials provided with the distribution.
     18       1.1      cgd  * 3. All advertising materials mentioning features or use of this software
     19       1.1      cgd  *    must display the following acknowledgement:
     20       1.1      cgd  *	This product includes software developed by the University of
     21       1.1      cgd  *	California, Berkeley and its contributors.
     22       1.1      cgd  * 4. Neither the name of the University nor the names of its contributors
     23       1.1      cgd  *    may be used to endorse or promote products derived from this software
     24       1.1      cgd  *    without specific prior written permission.
     25       1.1      cgd  *
     26       1.1      cgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     27       1.1      cgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     28       1.1      cgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     29       1.1      cgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     30       1.1      cgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     31       1.1      cgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     32       1.1      cgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     33       1.1      cgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     34       1.1      cgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     35       1.1      cgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     36       1.1      cgd  * SUCH DAMAGE.
     37       1.1      cgd  *
     38       1.3      cgd  *	@(#)rogue.h	8.1 (Berkeley) 5/31/93
     39       1.1      cgd  */
     40       1.1      cgd 
     41       1.1      cgd /*
     42       1.1      cgd  * rogue.h
     43       1.1      cgd  *
     44       1.1      cgd  * This source herein may be modified and/or distributed by anybody who
     45       1.1      cgd  * so desires, with the following restrictions:
     46       1.1      cgd  *    1.)  This notice shall not be removed.
     47       1.1      cgd  *    2.)  Credit shall not be taken for the creation of this source.
     48       1.1      cgd  *    3.)  This code is not to be traded, sold, or used for personal
     49       1.1      cgd  *         gain or profit.
     50       1.1      cgd  */
     51       1.1      cgd 
     52       1.1      cgd #define boolean char
     53       1.1      cgd 
     54       1.1      cgd #define NOTHING		((unsigned short)     0)
     55       1.1      cgd #define OBJECT		((unsigned short)    01)
     56       1.1      cgd #define MONSTER		((unsigned short)    02)
     57       1.1      cgd #define STAIRS		((unsigned short)    04)
     58       1.1      cgd #define HORWALL		((unsigned short)   010)
     59       1.1      cgd #define VERTWALL	((unsigned short)   020)
     60       1.1      cgd #define DOOR		((unsigned short)   040)
     61       1.1      cgd #define FLOOR		((unsigned short)  0100)
     62       1.1      cgd #define TUNNEL		((unsigned short)  0200)
     63       1.1      cgd #define TRAP		((unsigned short)  0400)
     64       1.1      cgd #define HIDDEN		((unsigned short) 01000)
     65       1.1      cgd 
     66       1.1      cgd #define ARMOR		((unsigned short)   01)
     67       1.1      cgd #define WEAPON		((unsigned short)   02)
     68       1.1      cgd #define SCROL		((unsigned short)   04)
     69       1.1      cgd #define POTION		((unsigned short)  010)
     70       1.1      cgd #define GOLD		((unsigned short)  020)
     71       1.1      cgd #define FOOD		((unsigned short)  040)
     72       1.1      cgd #define WAND		((unsigned short) 0100)
     73       1.1      cgd #define RING		((unsigned short) 0200)
     74       1.1      cgd #define AMULET		((unsigned short) 0400)
     75       1.1      cgd #define ALL_OBJECTS	((unsigned short) 0777)
     76       1.1      cgd 
     77       1.1      cgd #define LEATHER 0
     78       1.1      cgd #define RINGMAIL 1
     79       1.1      cgd #define SCALE 2
     80       1.1      cgd #define CHAIN 3
     81       1.1      cgd #define BANDED 4
     82       1.1      cgd #define SPLINT 5
     83       1.1      cgd #define PLATE 6
     84       1.1      cgd #define ARMORS 7
     85       1.1      cgd 
     86       1.1      cgd #define BOW 0
     87       1.1      cgd #define DART 1
     88       1.1      cgd #define ARROW 2
     89       1.1      cgd #define DAGGER 3
     90       1.1      cgd #define SHURIKEN 4
     91       1.1      cgd #define MACE 5
     92       1.1      cgd #define LONG_SWORD 6
     93       1.1      cgd #define TWO_HANDED_SWORD 7
     94       1.1      cgd #define WEAPONS 8
     95       1.1      cgd 
     96       1.1      cgd #define MAX_PACK_COUNT 24
     97       1.1      cgd 
     98       1.1      cgd #define PROTECT_ARMOR 0
     99       1.1      cgd #define HOLD_MONSTER 1
    100       1.1      cgd #define ENCH_WEAPON 2
    101       1.1      cgd #define ENCH_ARMOR 3
    102       1.1      cgd #define IDENTIFY 4
    103       1.1      cgd #define TELEPORT 5
    104       1.1      cgd #define SLEEP 6
    105       1.1      cgd #define SCARE_MONSTER 7
    106       1.1      cgd #define REMOVE_CURSE 8
    107       1.1      cgd #define CREATE_MONSTER 9
    108       1.1      cgd #define AGGRAVATE_MONSTER 10
    109       1.1      cgd #define MAGIC_MAPPING 11
    110       1.1      cgd #define CON_MON 12
    111       1.1      cgd #define SCROLS 13
    112       1.1      cgd 
    113       1.1      cgd #define INCREASE_STRENGTH 0
    114       1.1      cgd #define RESTORE_STRENGTH 1
    115       1.1      cgd #define HEALING 2
    116       1.1      cgd #define EXTRA_HEALING 3
    117       1.1      cgd #define POISON 4
    118       1.1      cgd #define RAISE_LEVEL 5
    119       1.1      cgd #define BLINDNESS 6
    120       1.1      cgd #define HALLUCINATION 7
    121       1.1      cgd #define DETECT_MONSTER 8
    122       1.1      cgd #define DETECT_OBJECTS 9
    123       1.1      cgd #define CONFUSION 10
    124       1.1      cgd #define LEVITATION 11
    125       1.1      cgd #define HASTE_SELF 12
    126       1.1      cgd #define SEE_INVISIBLE 13
    127       1.1      cgd #define POTIONS 14
    128       1.1      cgd 
    129       1.1      cgd #define TELE_AWAY 0
    130       1.1      cgd #define SLOW_MONSTER 1
    131       1.1      cgd #define INVISIBILITY 2
    132       1.1      cgd #define POLYMORPH 3
    133       1.1      cgd #define HASTE_MONSTER 4
    134       1.1      cgd #define MAGIC_MISSILE 5
    135       1.1      cgd #define CANCELLATION 6
    136       1.1      cgd #define DO_NOTHING 7
    137       1.1      cgd #define DRAIN_LIFE 8
    138       1.1      cgd #define COLD 9
    139       1.1      cgd #define FIRE 10
    140       1.1      cgd #define WANDS 11
    141       1.1      cgd 
    142       1.1      cgd #define STEALTH 0
    143       1.1      cgd #define R_TELEPORT 1
    144       1.1      cgd #define REGENERATION 2
    145       1.1      cgd #define SLOW_DIGEST 3
    146       1.1      cgd #define ADD_STRENGTH 4
    147       1.1      cgd #define SUSTAIN_STRENGTH 5
    148       1.1      cgd #define DEXTERITY 6
    149       1.1      cgd #define ADORNMENT 7
    150       1.1      cgd #define R_SEE_INVISIBLE 8
    151       1.1      cgd #define MAINTAIN_ARMOR 9
    152       1.1      cgd #define SEARCHING 10
    153       1.1      cgd #define RINGS 11
    154       1.1      cgd 
    155       1.1      cgd #define RATION 0
    156       1.1      cgd #define FRUIT 1
    157       1.1      cgd 
    158       1.5    lukem #define NOT_USED	((unsigned short)   0)
    159       1.1      cgd #define BEING_WIELDED	((unsigned short)  01)
    160       1.5    lukem #define BEING_WORN	((unsigned short)  02)
    161       1.1      cgd #define ON_LEFT_HAND	((unsigned short)  04)
    162       1.1      cgd #define ON_RIGHT_HAND	((unsigned short) 010)
    163       1.1      cgd #define ON_EITHER_HAND	((unsigned short) 014)
    164       1.5    lukem #define BEING_USED	((unsigned short) 017)
    165       1.1      cgd 
    166       1.1      cgd #define NO_TRAP -1
    167       1.1      cgd #define TRAP_DOOR 0
    168       1.1      cgd #define BEAR_TRAP 1
    169       1.1      cgd #define TELE_TRAP 2
    170       1.1      cgd #define DART_TRAP 3
    171       1.1      cgd #define SLEEPING_GAS_TRAP 4
    172       1.1      cgd #define RUST_TRAP 5
    173       1.1      cgd #define TRAPS 6
    174       1.1      cgd 
    175       1.1      cgd #define STEALTH_FACTOR 3
    176       1.1      cgd #define R_TELE_PERCENT 8
    177       1.1      cgd 
    178       1.5    lukem #define UNIDENTIFIED	((unsigned short) 00)	/* MUST BE ZERO! */
    179       1.5    lukem #define IDENTIFIED	((unsigned short) 01)
    180       1.5    lukem #define CALLED		((unsigned short) 02)
    181       1.1      cgd 
    182       1.1      cgd #define DROWS 24
    183       1.1      cgd #define DCOLS 80
    184       1.1      cgd #define NMESSAGES 5
    185       1.1      cgd #define MAX_TITLE_LENGTH 30
    186       1.1      cgd #define MAXSYLLABLES 40
    187       1.1      cgd #define MAX_METAL 14
    188       1.1      cgd #define WAND_MATERIALS 30
    189       1.1      cgd #define GEMS 14
    190       1.1      cgd 
    191       1.1      cgd #define GOLD_PERCENT 46
    192       1.1      cgd 
    193       1.1      cgd #define MAX_OPT_LEN 40
    194       1.1      cgd 
    195  1.11.8.1   itojun #define MAX_ID_TITLE_LEN 64
    196       1.1      cgd struct id {
    197       1.1      cgd 	short value;
    198  1.11.8.1   itojun 	char title[MAX_ID_TITLE_LEN];
    199       1.1      cgd 	char *real;
    200       1.1      cgd 	unsigned short id_status;
    201       1.1      cgd };
    202       1.1      cgd 
    203       1.1      cgd /* The following #defines provide more meaningful names for some of the
    204       1.1      cgd  * struct object fields that are used for monsters.  This, since each monster
    205       1.1      cgd  * and object (scrolls, potions, etc) are represented by a struct object.
    206       1.1      cgd  * Ideally, this should be handled by some kind of union structure.
    207       1.1      cgd  */
    208       1.1      cgd 
    209       1.1      cgd #define m_damage damage
    210       1.1      cgd #define hp_to_kill quantity
    211       1.1      cgd #define m_char ichar
    212       1.1      cgd #define first_level is_protected
    213       1.1      cgd #define last_level is_cursed
    214       1.1      cgd #define m_hit_chance class
    215       1.1      cgd #define stationary_damage identified
    216       1.1      cgd #define drop_percent which_kind
    217       1.1      cgd #define trail_char d_enchant
    218       1.1      cgd #define slowed_toggle quiver
    219       1.1      cgd #define moves_confused hit_enchant
    220       1.1      cgd #define nap_length picked_up
    221       1.1      cgd #define disguise what_is
    222       1.1      cgd #define next_monster next_object
    223       1.1      cgd 
    224       1.1      cgd struct obj {				/* comment is monster meaning */
    225       1.1      cgd 	unsigned long m_flags;	/* monster flags */
    226       1.8  hubertf 	const char *damage;		/* damage it does */
    227       1.1      cgd 	short quantity;			/* hit points to kill */
    228       1.1      cgd 	short ichar;			/* 'A' is for aquatar */
    229       1.1      cgd 	short kill_exp;			/* exp for killing it */
    230       1.1      cgd 	short is_protected;		/* level starts */
    231       1.1      cgd 	short is_cursed;		/* level ends */
    232       1.1      cgd 	short class;			/* chance of hitting you */
    233       1.1      cgd 	short identified;		/* 'F' damage, 1,2,3... */
    234       1.1      cgd 	unsigned short which_kind; /* item carry/drop % */
    235       1.1      cgd 	short o_row, o_col, o;	/* o is how many times stuck at o_row, o_col */
    236       1.1      cgd 	short row, col;			/* current row, col */
    237       1.1      cgd 	short d_enchant;		/* room char when detect_monster */
    238       1.1      cgd 	short quiver;			/* monster slowed toggle */
    239       1.1      cgd 	short trow, tcol;		/* target row, col */
    240       1.1      cgd 	short hit_enchant;		/* how many moves is confused */
    241       1.1      cgd 	unsigned short what_is;	/* imitator's charactor (?!%: */
    242       1.1      cgd 	short picked_up;		/* sleep from wand of sleep */
    243       1.1      cgd 	unsigned short in_use_flags;
    244       1.1      cgd 	struct obj *next_object;	/* next monster */
    245       1.1      cgd };
    246       1.1      cgd 
    247       1.1      cgd typedef struct obj object;
    248       1.1      cgd 
    249       1.5    lukem #define INIT_AW		(object*)0
    250       1.5    lukem #define INIT_RINGS	(object*)0
    251       1.5    lukem #define INIT_HP		12
    252       1.5    lukem #define INIT_STR	16
    253       1.5    lukem #define INIT_EXPLEVEL	1
    254       1.5    lukem #define INIT_EXP	0
    255       1.5    lukem #define INIT_PACK	{0}
    256       1.5    lukem #define INIT_GOLD	0
    257       1.5    lukem #define INIT_CHAR	'@'
    258       1.5    lukem #define INIT_MOVES	1250
    259       1.1      cgd 
    260       1.1      cgd struct fightr {
    261       1.1      cgd 	object *armor;
    262       1.1      cgd 	object *weapon;
    263       1.1      cgd 	object *left_ring, *right_ring;
    264       1.1      cgd 	short hp_current;
    265       1.1      cgd 	short hp_max;
    266       1.1      cgd 	short str_current;
    267       1.1      cgd 	short str_max;
    268       1.1      cgd 	object pack;
    269       1.1      cgd 	long gold;
    270       1.1      cgd 	short exp;
    271       1.1      cgd 	long exp_points;
    272       1.1      cgd 	short row, col;
    273       1.1      cgd 	short fchar;
    274       1.1      cgd 	short moves_left;
    275       1.1      cgd };
    276       1.1      cgd 
    277       1.1      cgd typedef struct fightr fighter;
    278       1.1      cgd 
    279       1.1      cgd struct dr {
    280       1.1      cgd 	short oth_room;
    281       1.1      cgd 	short oth_row,
    282       1.1      cgd 	      oth_col;
    283       1.1      cgd 	short door_row,
    284       1.1      cgd 		  door_col;
    285       1.1      cgd };
    286       1.1      cgd 
    287       1.1      cgd typedef struct dr door;
    288       1.1      cgd 
    289       1.1      cgd struct rm {
    290       1.1      cgd 	short bottom_row, right_col, left_col, top_row;
    291       1.1      cgd 	door doors[4];
    292       1.1      cgd 	unsigned short is_room;
    293       1.1      cgd };
    294       1.1      cgd 
    295       1.1      cgd typedef struct rm room;
    296       1.1      cgd 
    297       1.1      cgd #define MAXROOMS 9
    298       1.1      cgd #define BIG_ROOM 10
    299       1.1      cgd 
    300       1.1      cgd #define NO_ROOM -1
    301       1.1      cgd 
    302       1.1      cgd #define PASSAGE -3		/* cur_room value */
    303       1.1      cgd 
    304       1.1      cgd #define AMULET_LEVEL 26
    305       1.1      cgd 
    306       1.1      cgd #define R_NOTHING	((unsigned short) 01)
    307       1.1      cgd #define R_ROOM		((unsigned short) 02)
    308       1.1      cgd #define R_MAZE		((unsigned short) 04)
    309       1.1      cgd #define R_DEADEND	((unsigned short) 010)
    310       1.1      cgd #define R_CROSS		((unsigned short) 020)
    311       1.1      cgd 
    312       1.1      cgd #define MAX_EXP_LEVEL 21
    313       1.1      cgd #define MAX_EXP 10000001L
    314       1.1      cgd #define MAX_GOLD 999999
    315       1.1      cgd #define MAX_ARMOR 99
    316       1.1      cgd #define MAX_HP 999
    317       1.1      cgd #define MAX_STRENGTH 99
    318       1.1      cgd #define LAST_DUNGEON 99
    319       1.1      cgd 
    320       1.1      cgd #define STAT_LEVEL 01
    321       1.1      cgd #define STAT_GOLD 02
    322       1.1      cgd #define STAT_HP 04
    323       1.1      cgd #define STAT_STRENGTH 010
    324       1.1      cgd #define STAT_ARMOR 020
    325       1.1      cgd #define STAT_EXP 040
    326       1.1      cgd #define STAT_HUNGER 0100
    327       1.1      cgd #define STAT_LABEL 0200
    328       1.1      cgd #define STAT_ALL 0377
    329       1.1      cgd 
    330       1.1      cgd #define PARTY_TIME 10	/* one party somewhere in each 10 level span */
    331       1.1      cgd 
    332       1.1      cgd #define MAX_TRAPS 10	/* maximum traps per level */
    333       1.1      cgd 
    334       1.1      cgd #define HIDE_PERCENT 12
    335       1.1      cgd 
    336       1.1      cgd struct tr {
    337       1.1      cgd 	short trap_type;
    338       1.1      cgd 	short trap_row, trap_col;
    339       1.1      cgd };
    340       1.1      cgd 
    341       1.1      cgd typedef struct tr trap;
    342       1.1      cgd 
    343       1.1      cgd extern fighter rogue;
    344       1.1      cgd extern room rooms[];
    345       1.1      cgd extern trap traps[];
    346       1.1      cgd extern unsigned short dungeon[DROWS][DCOLS];
    347       1.1      cgd extern object level_objects;
    348       1.1      cgd 
    349       1.1      cgd extern struct id id_scrolls[];
    350       1.1      cgd extern struct id id_potions[];
    351       1.1      cgd extern struct id id_wands[];
    352       1.1      cgd extern struct id id_rings[];
    353       1.1      cgd extern struct id id_weapons[];
    354       1.1      cgd extern struct id id_armors[];
    355       1.1      cgd 
    356       1.1      cgd extern object mon_tab[];
    357       1.1      cgd extern object level_monsters;
    358       1.1      cgd 
    359       1.1      cgd #define MONSTERS 26
    360       1.1      cgd 
    361       1.1      cgd #define HASTED					01L
    362       1.1      cgd #define SLOWED					02L
    363       1.1      cgd #define INVISIBLE				04L
    364       1.1      cgd #define ASLEEP				   010L
    365       1.1      cgd #define WAKENS				   020L
    366       1.1      cgd #define WANDERS				   040L
    367       1.1      cgd #define FLIES				  0100L
    368       1.1      cgd #define FLITS				  0200L
    369       1.1      cgd #define CAN_FLIT			  0400L		/* can, but usually doesn't, flit */
    370       1.1      cgd #define CONFUSED	 		 01000L
    371       1.1      cgd #define RUSTS				 02000L
    372       1.1      cgd #define HOLDS				 04000L
    373       1.1      cgd #define FREEZES				010000L
    374       1.1      cgd #define STEALS_GOLD			020000L
    375       1.1      cgd #define STEALS_ITEM			040000L
    376       1.1      cgd #define STINGS			   0100000L
    377       1.1      cgd #define DRAINS_LIFE		   0200000L
    378       1.1      cgd #define DROPS_LEVEL		   0400000L
    379       1.1      cgd #define SEEKS_GOLD		  01000000L
    380       1.1      cgd #define FREEZING_ROGUE	  02000000L
    381       1.1      cgd #define RUST_VANISHED	  04000000L
    382       1.1      cgd #define CONFUSES		 010000000L
    383       1.1      cgd #define IMITATES		 020000000L
    384       1.1      cgd #define FLAMES			 040000000L
    385       1.1      cgd #define STATIONARY		0100000000L		/* damage will be 1,2,3,... */
    386       1.1      cgd #define NAPPING			0200000000L		/* can't wake up for a while */
    387       1.1      cgd #define ALREADY_MOVED	0400000000L
    388       1.1      cgd 
    389       1.1      cgd #define SPECIAL_HIT		(RUSTS|HOLDS|FREEZES|STEALS_GOLD|STEALS_ITEM|STINGS|DRAINS_LIFE|DROPS_LEVEL)
    390       1.1      cgd 
    391       1.1      cgd #define WAKE_PERCENT 45
    392       1.1      cgd #define FLIT_PERCENT 40
    393       1.1      cgd #define PARTY_WAKE_PERCENT 75
    394       1.1      cgd 
    395       1.1      cgd #define HYPOTHERMIA 1
    396       1.1      cgd #define STARVATION 2
    397       1.1      cgd #define POISON_DART 3
    398       1.1      cgd #define QUIT 4
    399       1.1      cgd #define WIN 5
    400       1.1      cgd #define KFIRE 6
    401       1.1      cgd 
    402       1.1      cgd #define UPWARD 0
    403       1.1      cgd #define UPRIGHT 1
    404       1.1      cgd #define RIGHT 2
    405       1.1      cgd #define DOWNRIGHT 3
    406       1.1      cgd #define DOWN 4
    407       1.1      cgd #define DOWNLEFT 5
    408       1.1      cgd #define LEFT 6
    409       1.1      cgd #define UPLEFT 7
    410       1.1      cgd #define DIRS 8
    411       1.1      cgd 
    412       1.1      cgd #define ROW1 7
    413       1.1      cgd #define ROW2 15
    414       1.1      cgd 
    415       1.1      cgd #define COL1 26
    416       1.1      cgd #define COL2 52
    417       1.1      cgd 
    418       1.1      cgd #define MOVED 0
    419       1.1      cgd #define MOVE_FAILED -1
    420       1.1      cgd #define STOPPED_ON_SOMETHING -2
    421       1.1      cgd #define CANCEL '\033'
    422       1.1      cgd #define LIST '*'
    423       1.1      cgd 
    424       1.1      cgd #define HUNGRY 300
    425       1.1      cgd #define WEAK 150
    426       1.1      cgd #define FAINT 20
    427       1.1      cgd #define STARVE 0
    428       1.1      cgd 
    429       1.1      cgd #define MIN_ROW 1
    430       1.1      cgd 
    431       1.1      cgd struct rogue_time {
    432       1.1      cgd 	short year;		/* >= 1987 */
    433       1.1      cgd 	short month;	/* 1 - 12 */
    434       1.1      cgd 	short day;		/* 1 - 31 */
    435       1.1      cgd 	short hour;		/* 0 - 23 */
    436       1.1      cgd 	short minute;	/* 0 - 59 */
    437       1.1      cgd 	short second;	/* 0 - 59 */
    438       1.1      cgd };
    439       1.1      cgd 
    440       1.1      cgd #include <curses.h>
    441       1.5    lukem 
    442       1.5    lukem /*
    443       1.5    lukem  * external routine declarations.
    444       1.5    lukem  */
    445       1.5    lukem #include <stdio.h>
    446       1.5    lukem #include <string.h>
    447      1.10      jsm #include <sys/types.h>
    448      1.10      jsm #include <unistd.h>
    449       1.5    lukem 
    450       1.5    lukem object	*alloc_object __P((void));
    451       1.5    lukem object	*check_duplicate __P((object *, object *));
    452       1.8  hubertf const char	*get_ench_color __P((void));
    453       1.5    lukem object	*get_letter_object __P((int));
    454       1.5    lukem object	*get_thrown_at_monster __P((object *, short, short *, short *));
    455       1.5    lukem object	*get_zapped_monster __P((short, short *, short *));
    456       1.5    lukem object	*gr_monster __P((object *, int));
    457       1.5    lukem object	*gr_object __P((void));
    458       1.8  hubertf char	*md_getenv __P((const char *));
    459       1.6  mycroft const char *
    460       1.6  mycroft 	md_gln __P((void));
    461       1.5    lukem char	*md_malloc __P((int));
    462       1.8  hubertf const char	*mon_name __P((const object *));
    463       1.8  hubertf const char	*name_of __P((const object *));
    464       1.5    lukem object	*object_at __P((object *, short, short));
    465       1.5    lukem object	*pick_up __P((int, int, short *));
    466       1.5    lukem void	add_exp __P((int, boolean));
    467       1.5    lukem void	add_mazes __P((void));
    468       1.5    lukem void	add_traps __P((void));
    469       1.5    lukem void	aggravate __P((void));
    470       1.5    lukem void	aim_monster __P((object *));
    471       1.5    lukem void	bounce __P((short, short, short, short, short));
    472       1.5    lukem void	byebye __P((int));
    473       1.5    lukem void	c_object_for_wizard __P((void));
    474       1.5    lukem void	call_it __P((void));
    475       1.5    lukem boolean	can_move __P((int, int, int, int));
    476       1.5    lukem boolean	can_turn __P((int, int));
    477       1.8  hubertf void	center __P((short, const char *));
    478       1.5    lukem void	check_gold_seeker __P((object *));
    479       1.5    lukem boolean	check_hunger __P((boolean));
    480       1.5    lukem boolean	check_imitator __P((object *));
    481       1.5    lukem void	check_message __P((void));
    482       1.5    lukem int	check_up __P((void));
    483       1.8  hubertf void	clean_up __P((const char *)) __attribute__((__noreturn__));
    484       1.5    lukem void	clear_level __P((void));
    485       1.5    lukem void	cnfs __P((void));
    486       1.5    lukem int	coin_toss __P((void));
    487       1.5    lukem int	connect_rooms __P((short, short));
    488       1.5    lukem void	cough_up __P((object *));
    489       1.5    lukem void	create_monster __P((void));
    490       1.5    lukem int	damage_for_strength __P((void));
    491       1.5    lukem void	darken_room __P((short));
    492       1.5    lukem void	disappear __P((object *));
    493       1.5    lukem void	do_args __P((int, char **));
    494       1.5    lukem void	do_opts __P((void));
    495       1.5    lukem void	do_put_on __P((object *, boolean));
    496       1.5    lukem void	do_shell __P((void));
    497       1.5    lukem void	do_wear __P((object *));
    498       1.5    lukem void	do_wield __P((object *));
    499       1.5    lukem void	dr_course __P((object *, boolean, short, short));
    500       1.5    lukem void	drain_life __P((void));
    501       1.5    lukem void	draw_magic_map __P((void));
    502       1.5    lukem void	draw_simple_passage __P((short, short, short, short, short));
    503       1.5    lukem void	drop __P((void));
    504       1.5    lukem int	drop_check __P((void));
    505       1.5    lukem void	drop_level __P((void));
    506       1.5    lukem void	eat __P((void));
    507       1.5    lukem void	edit_opts __P((void));
    508       1.5    lukem void	env_get_value __P((char **, char *, boolean));
    509       1.7  hubertf void	error_save __P((int)) __attribute__((__noreturn__));
    510       1.5    lukem void	fight __P((int));
    511       1.5    lukem void	fill_it __P((int, boolean));
    512       1.5    lukem void	fill_out_level __P((void));
    513       1.5    lukem boolean	flame_broil __P((object *));
    514       1.5    lukem int	flit __P((object *));
    515       1.5    lukem void	flop_weapon __P((object *, short, short));
    516       1.5    lukem void	free_object __P((object *));
    517       1.5    lukem void	free_stuff __P((object *));
    518       1.5    lukem void	freeze __P((object *));
    519       1.8  hubertf int	get_armor_class __P((const object *));
    520       1.5    lukem int	get_com_id __P((int *, short));
    521       1.8  hubertf int	get_damage __P((const char *, boolean));
    522       1.8  hubertf void	get_desc __P((const object *, char *));
    523       1.5    lukem int	get_dir __P((short, short, short, short));
    524       1.5    lukem void	get_dir_rc __P((short, short *, short *, short));
    525       1.5    lukem char	get_dungeon_char __P((short, short));
    526       1.5    lukem int	get_exp_level __P((long));
    527       1.5    lukem void	get_food __P((object *, boolean));
    528       1.8  hubertf int	get_hit_chance __P((const object *));
    529       1.8  hubertf int	get_input_line __P((const char *, const char *, char *, const char *, boolean, boolean));
    530       1.5    lukem char	get_mask_char __P((unsigned short));
    531       1.8  hubertf int	get_number __P((const char *));
    532       1.5    lukem boolean	get_oth_room __P((short, short *, short *));
    533       1.5    lukem int	get_rand __P((int, int));
    534       1.5    lukem short	get_room_number __P((int, int));
    535       1.8  hubertf int	get_value __P((const object *));
    536       1.8  hubertf int	get_w_damage __P((const object *));
    537       1.5    lukem void	get_wand_and_ring_materials __P((void));
    538       1.8  hubertf int	get_weapon_damage __P((const object *));
    539       1.5    lukem char	gmc __P((object *));
    540       1.5    lukem char	gmc_row_col __P((int, int));
    541       1.5    lukem void	go_blind __P((void));
    542       1.5    lukem boolean	gold_at __P((int, int));
    543       1.5    lukem void	gr_armor __P((object *));
    544       1.5    lukem char	gr_dir __P((void));
    545       1.5    lukem char	gr_obj_char __P((void));
    546       1.5    lukem void	gr_potion __P((object *));
    547       1.5    lukem void	gr_ring __P((object *, boolean));
    548       1.5    lukem short	gr_room __P((void));
    549       1.5    lukem void	gr_row_col __P((short *, short *, unsigned short));
    550       1.5    lukem void	gr_scroll __P((object *));
    551       1.5    lukem void	gr_wand __P((object *));
    552       1.5    lukem void	gr_weapon __P((object *, int));
    553       1.5    lukem void	hallucinate __P((void));
    554       1.5    lukem boolean	has_amulet __P((void));
    555       1.8  hubertf boolean	has_been_touched __P((const struct rogue_time *, const struct rogue_time *));
    556       1.5    lukem void	heal __P((void));
    557       1.5    lukem void	hide_boxed_passage __P((int, int, int, int, int));
    558       1.5    lukem void	hold_monster __P((void));
    559       1.5    lukem int	hp_raise __P((void));
    560       1.5    lukem void	id_all __P((void));
    561       1.5    lukem void	id_com __P((void));
    562       1.5    lukem void	id_trap __P((void));
    563       1.5    lukem void	id_type __P((void));
    564       1.5    lukem void	idntfy __P((void));
    565       1.5    lukem boolean	imitating __P((int, int));
    566       1.5    lukem int	init __P((int, char **));
    567       1.8  hubertf void	init_str __P((char **, const char *));
    568       1.8  hubertf void	insert_score __P((char [][], char [][], const char *, short, short, const object *, int));
    569       1.5    lukem void	inv_armor_weapon __P((boolean));
    570       1.5    lukem void	inv_rings __P((void));
    571       1.8  hubertf void	inventory __P((const object *, unsigned short));
    572       1.5    lukem boolean	is_all_connected __P((void));
    573       1.5    lukem boolean	is_digit __P((int));
    574       1.5    lukem boolean	is_direction __P((short, short *));
    575       1.5    lukem boolean	is_pack_letter __P((short *, unsigned short *));
    576       1.5    lukem boolean	is_passable __P((int, int));
    577       1.5    lukem boolean	is_vowel __P((short));
    578       1.5    lukem void	kick_into_pack __P((void));
    579       1.9      jsm void	killed_by __P((const object *, short)) __attribute__((__noreturn__));
    580       1.8  hubertf long	lget_number __P((const char *));
    581       1.5    lukem void	light_passage __P((int, int));
    582       1.5    lukem void	light_up_room __P((int));
    583       1.5    lukem boolean	m_confuse __P((object *));
    584       1.5    lukem void	make_level __P((void));
    585       1.5    lukem void	make_maze __P((short, short, short, short, short, short));
    586       1.5    lukem void	make_party __P((void));
    587       1.5    lukem void	make_room __P((short, short, short, short));
    588       1.5    lukem void	make_scroll_titles __P((void));
    589       1.8  hubertf boolean	mask_pack __P((const object *, unsigned short));
    590       1.5    lukem boolean	mask_room __P((short, short *, short *, unsigned short));
    591       1.8  hubertf boolean	md_df __P((const char *));
    592       1.7  hubertf void	md_exit __P((int)) __attribute__((__noreturn__));
    593       1.5    lukem void	md_gct __P((struct rogue_time *));
    594       1.8  hubertf int	md_get_file_id __P((const char *));
    595       1.8  hubertf void	md_gfmt __P((const char *, struct rogue_time *));
    596       1.5    lukem int	md_gseed __P((void));
    597       1.5    lukem void	md_heed_signals __P((void));
    598       1.5    lukem void	md_ignore_signals __P((void));
    599       1.8  hubertf int	md_link_count __P((const char *));
    600       1.5    lukem void	md_lock __P((boolean));
    601       1.8  hubertf void	md_shell __P((const char *));
    602       1.5    lukem void	md_sleep __P((int));
    603       1.5    lukem void	md_slurp __P((void));
    604       1.8  hubertf void	message __P((const char *, boolean));
    605       1.5    lukem void	mix_colors __P((void));
    606       1.5    lukem void	mix_colors __P((void));
    607       1.5    lukem void	mix_random_rooms __P((void));
    608       1.8  hubertf int	mon_can_go __P((const object *, int, int));
    609       1.5    lukem int	mon_damage __P((object *, short));
    610       1.5    lukem void	mon_hit __P((object *));
    611       1.8  hubertf boolean	mon_sees __P((const object *, int, int));
    612       1.5    lukem int	move_confused __P((object *));
    613       1.5    lukem void	move_mon_to __P((object *, int, int));
    614       1.5    lukem void	move_onto __P((void));
    615       1.5    lukem int	mtry __P((object *, int, int));
    616       1.5    lukem void	multiple_move_rogue __P((short));
    617       1.5    lukem void	mv_1_monster __P((object *, int, int));
    618       1.5    lukem void	mv_aquatars __P((void));
    619       1.5    lukem void	mv_mons __P((void));
    620       1.8  hubertf int	name_cmp __P((char *, const char *));
    621       1.5    lukem short	next_avail_ichar __P((void));
    622       1.5    lukem boolean	next_to_something __P((int, int));
    623       1.8  hubertf void	nickize __P((char *, const char *, const char *));
    624       1.5    lukem int	no_room_for_monster __P((int));
    625       1.5    lukem int	one_move_rogue __P((short, short));
    626       1.5    lukem void	onintr __P((int));
    627       1.5    lukem void	opt_erase __P((int));
    628       1.5    lukem void	opt_go __P((int));
    629       1.5    lukem void	opt_show __P((int));
    630       1.8  hubertf short	pack_count __P((const object *));
    631       1.8  hubertf short	pack_letter __P((const char *, unsigned short));
    632       1.8  hubertf void	pad __P((const char *, short));
    633       1.5    lukem void	party_monsters __P((int, int));
    634       1.5    lukem short	party_objects __P((int));
    635       1.5    lukem void	place_at __P((object *, int, int));
    636       1.5    lukem void	plant_gold __P((int, int, boolean));
    637       1.5    lukem void	play_level __P((void));
    638       1.5    lukem void	player_init __P((void));
    639       1.5    lukem void	player_init __P((void));
    640       1.5    lukem void	potion_heal __P((int));
    641       1.5    lukem int	pr_com_id __P((int));
    642       1.5    lukem int	pr_motion_char __P((int));
    643       1.5    lukem void	print_stats __P((int));
    644       1.5    lukem void	put_amulet __P((void));
    645       1.5    lukem void	put_door __P((room *, short, short *, short *));
    646       1.5    lukem void	put_gold __P((void));
    647       1.5    lukem void	put_m_at __P((int, int, object *));
    648       1.5    lukem void	put_mons __P((void));
    649       1.5    lukem void	put_objects __P((void));
    650       1.5    lukem void	put_on_ring __P((void));
    651       1.5    lukem void	put_player __P((short));
    652       1.8  hubertf void	put_scores __P((const object *, short)) __attribute__((__noreturn__));
    653       1.5    lukem void	put_stairs __P((void));
    654       1.5    lukem void	quaff __P((void));
    655       1.5    lukem void	quit __P((boolean));
    656       1.8  hubertf int	r_index __P((const char *, int, boolean));
    657       1.5    lukem void	r_read __P((FILE *, char *, int));
    658       1.8  hubertf void	r_write __P((FILE *, const char *, int));
    659       1.5    lukem void	rand_around __P((short, short *, short *));
    660       1.5    lukem int	rand_percent __P((int));
    661       1.5    lukem void	rand_place __P((object *));
    662       1.5    lukem void	read_pack __P((object *, FILE *, boolean));
    663       1.5    lukem void	read_scroll __P((void));
    664  1.11.8.1   itojun void	read_string __P((char *, FILE *, size_t));
    665       1.8  hubertf void	recursive_deadend __P((short, const short *, short, short));
    666       1.5    lukem boolean	reg_move __P((void));
    667       1.5    lukem void	relight __P((void));
    668       1.5    lukem void	remessage __P((short));
    669       1.5    lukem void	remove_ring __P((void));
    670       1.5    lukem void	rest __P((int));
    671       1.8  hubertf void	restore __P((const char *));
    672       1.5    lukem int	rgetchar __P((void));
    673       1.5    lukem void	ring_stats __P((boolean));
    674       1.5    lukem int	rogue_can_see __P((int, int));
    675       1.5    lukem void	rogue_damage __P((short, object *, short));
    676       1.5    lukem void	rogue_hit __P((object *, boolean));
    677       1.5    lukem int	rogue_is_around __P((int, int));
    678       1.5    lukem long	rrandom __P((void));
    679       1.5    lukem void	rust __P((object *));
    680       1.5    lukem void	rw_dungeon __P((FILE *, boolean));
    681       1.5    lukem void	rw_id __P((struct id *, FILE *, int, boolean));
    682       1.5    lukem void	rw_rooms __P((FILE *, boolean));
    683       1.5    lukem void	s_con_mon __P((object *));
    684       1.5    lukem int	same_col __P((int, int));
    685       1.5    lukem int	same_row __P((int, int));
    686       1.5    lukem void	save_game __P((void));
    687       1.8  hubertf void	save_into_file __P((const char *));
    688       1.5    lukem void	save_screen __P((void));
    689       1.5    lukem void	search __P((short, boolean));
    690       1.5    lukem boolean	seek_gold __P((object *));
    691       1.5    lukem void	sell_pack __P((void));
    692       1.7  hubertf void	sf_error __P((void)) __attribute__((__noreturn__));
    693       1.5    lukem void	show_average_hp __P((void));
    694       1.5    lukem void	show_monsters __P((void));
    695       1.5    lukem void	show_objects __P((void));
    696       1.5    lukem void	show_traps __P((void));
    697       1.5    lukem void	single_inv __P((short));
    698       1.5    lukem void	sound_bell __P((void));
    699       1.5    lukem void	special_hit __P((object *));
    700       1.5    lukem void	srrandom __P((int));
    701       1.5    lukem void	start_window __P((void));
    702       1.5    lukem void	start_window __P((void));
    703       1.5    lukem void	steal_gold __P((object *));
    704       1.5    lukem void	steal_item __P((object *));
    705       1.5    lukem void	sting __P((object *));
    706       1.5    lukem void	stop_window __P((void));
    707       1.5    lukem void	stop_window __P((void));
    708       1.5    lukem void	take_a_nap __P((void));
    709       1.5    lukem void	take_from_pack __P((object *, object *));
    710       1.5    lukem void	take_off __P((void));
    711       1.5    lukem void	tele __P((void));
    712       1.5    lukem void	tele_away __P((object *));
    713       1.5    lukem void	throw __P((void));
    714       1.5    lukem boolean	throw_at_monster __P((object *, object *));
    715       1.8  hubertf int	to_hit __P((const object *));
    716       1.5    lukem short	trap_at __P((int, int));
    717       1.5    lukem void	trap_player __P((int, int));
    718       1.5    lukem boolean	try_to_cough __P((short, short, object *));
    719       1.5    lukem void	turn_passage __P((short, boolean));
    720       1.5    lukem void	un_put_on __P((object *));
    721       1.5    lukem void	unblind __P((void));
    722       1.5    lukem void	unconfuse __P((void));
    723       1.5    lukem void	uncurse_all __P((void));
    724       1.5    lukem void	unhallucinate __P((void));
    725       1.5    lukem void	unwear __P((object *));
    726       1.5    lukem void	unwield __P((object *));
    727       1.5    lukem void	vanish __P((object *, short, object *));
    728       1.5    lukem void	visit_rooms __P((int));
    729       1.5    lukem void	wait_for_ack __P((void));
    730       1.5    lukem void	wake_room __P((short, boolean, short, short));
    731       1.5    lukem void	wake_up __P((object *));
    732       1.5    lukem void	wanderer __P((void));
    733       1.5    lukem void	wdrain_life __P((object *));
    734       1.5    lukem void	wear __P((void));
    735       1.5    lukem void	wield __P((void));
    736       1.9      jsm void	win __P((void)) __attribute__((__noreturn__));
    737       1.5    lukem void	wizardize __P((void));
    738       1.8  hubertf void	write_pack __P((const object *, FILE *));
    739       1.5    lukem void	write_string __P((char *, FILE *));
    740       1.5    lukem long	xxx __P((boolean));
    741       1.5    lukem void	xxxx __P((char *, short));
    742       1.5    lukem void	zap_monster __P((object *, unsigned short));
    743       1.5    lukem void	zapp __P((void));
    744       1.5    lukem object *add_to_pack __P((object *, object *, int));
    745       1.8  hubertf struct id *get_id_table __P((const object *));
    746       1.5    lukem unsigned short gr_what_is __P((void));
    747       1.5    lukem 
    748       1.5    lukem extern	boolean	ask_quit;
    749       1.5    lukem extern	boolean	being_held;
    750       1.5    lukem extern	boolean	cant_int;
    751       1.5    lukem extern	boolean	con_mon;
    752       1.5    lukem extern	boolean	detect_monster;
    753       1.5    lukem extern	boolean	did_int;
    754       1.5    lukem extern	boolean	interrupted;
    755       1.5    lukem extern	boolean	is_wood[];
    756       1.5    lukem extern	boolean	jump;
    757       1.5    lukem extern	boolean	maintain_armor;
    758       1.5    lukem extern	boolean	mon_disappeared;
    759       1.5    lukem extern	boolean	msg_cleared;
    760       1.5    lukem extern	boolean	no_skull;
    761       1.5    lukem extern	boolean	passgo;
    762       1.5    lukem extern	boolean	r_see_invisible;
    763       1.5    lukem extern	boolean	r_teleport;
    764       1.5    lukem extern	boolean	save_is_interactive;
    765       1.5    lukem extern	boolean	score_only;
    766       1.5    lukem extern	boolean	see_invisible;
    767       1.5    lukem extern	boolean	sustain_strength;
    768       1.5    lukem extern	boolean	trap_door;
    769       1.5    lukem extern	boolean	wizard;
    770       1.5    lukem extern	char	hit_message[];
    771  1.11.8.1   itojun #define HUNGER_STR_LEN 8
    772  1.11.8.1   itojun extern	char	hunger_str[HUNGER_STR_LEN];
    773  1.11.8.1   itojun extern	char	login_name[MAX_OPT_LEN];
    774       1.8  hubertf extern	const char   *byebye_string;
    775       1.8  hubertf extern	const char   *curse_message;
    776       1.8  hubertf extern	const char   *error_file;
    777       1.5    lukem extern	char   *fruit;
    778       1.8  hubertf extern	const char   *const m_names[];
    779       1.8  hubertf extern	const char   *more;
    780       1.8  hubertf extern	const char   *new_level_message;
    781       1.5    lukem extern	char   *nick_name;
    782       1.8  hubertf extern	const char   *press_space;
    783       1.5    lukem extern	char   *save_file;
    784       1.8  hubertf extern	const char   *you_can_move_again;
    785       1.8  hubertf extern	const long	level_points[];
    786       1.5    lukem extern	short	add_strength;
    787       1.5    lukem extern	short	auto_search;
    788       1.5    lukem extern	short	bear_trap;
    789       1.5    lukem extern	short	blind;
    790       1.5    lukem extern	short	confused;
    791       1.5    lukem extern	short	cur_level;
    792       1.5    lukem extern	short	cur_room;
    793       1.5    lukem extern	short	e_rings;
    794       1.5    lukem extern	short	extra_hp;
    795       1.5    lukem extern	short	foods;
    796       1.5    lukem extern	short	halluc;
    797       1.5    lukem extern	short	haste_self;
    798       1.5    lukem extern	short	less_hp;
    799       1.5    lukem extern	short	levitate;
    800       1.5    lukem extern	short	m_moves;
    801       1.5    lukem extern	short	max_level;
    802       1.5    lukem extern	short	party_room;
    803       1.5    lukem extern	short	r_rings;
    804       1.5    lukem extern	short	regeneration;
    805       1.5    lukem extern	short	ring_exp;
    806       1.5    lukem extern	short	stealthy;
    807      1.10      jsm extern	gid_t	gid;
    808      1.10      jsm extern	gid_t	egid;
    809