diff srogue/rogue.h @ 36:2128c7dc8a40

Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
author elwin
date Thu, 25 Nov 2010 12:21:41 +0000
parents
children 15f8229f38c1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srogue/rogue.h	Thu Nov 25 12:21:41 2010 +0000
@@ -0,0 +1,701 @@
+/*
+ * Rogue definitions and variable declarations
+ *
+ * @(#)rogue.h	9.0	(rdk)	 7/17/84
+ *
+ * Super-Rogue
+ * Copyright (C) 1984 Robert D. Kindelberger
+ * All rights reserved.
+ *
+ * Based on "Rogue: Exploring the Dungeons of Doom"
+ * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
+ * All rights reserved.
+ *
+ * See the file LICENSE.TXT for full copyright and licensing information.
+ */
+
+#ifdef BSD
+#include "cx.h"
+#endif
+
+
+#include <ctype.h>
+#include <curses.h>
+
+#ifdef ATT
+#define	CBREAK	FALSE
+#define _IOSTRG	01
+#endif
+
+#define reg     register        /* register abbr.       */
+
+/*
+ * Maximum number of different things
+ */
+
+#define NCOLORS		32
+#define NSYLS       159
+#define NSTONES     35
+#define NWOOD       24
+#define NMETAL      15
+
+#define MAXDAEMONS 20
+
+#define TYPETRAPS	9	/* max types of traps */
+#define MAXROOMS	9	/* max rooms per level */
+#define MAXTHINGS	9	/* max things on each level */
+#define MAXOBJ		9	/* max goodies on each level */	
+#define MAXPACK		23	/* max things this hero can carry */
+#define MAXTRAPS	10	/* max traps per level */
+#define MAXMONS		52	/* max available monsters */
+#define MONRANGE	20	/* max # of monsters avail each level */
+#define AMLEVEL		35	/* earliest level that amulet can appear */
+#define MAXPURCH	4	/* max purchases in trading post */
+#define MINABIL		3	/* minimum for any ability */
+#define MAXSTR		24	/* maximum strength */
+#define MAXOTHER	18	/* maximum wis, dex, con */
+#define NORMAC		10	/* normal hero armor class (no armor) */
+#define MONWIS		10	/* monsters standard wisdom */
+
+#define NORMLEV		0	/* normal level */
+#define POSTLEV		1	/* trading post level */
+#define MAZELEV		2	/* maze level */
+
+#define NORMFOOD	0	/* normal food's group no. */
+#define FRUITFOOD	1	/* fruit's group no. */
+#define NEWGROUP	2	/* start of group no. other than food */
+
+#define	NUMTHINGS	8	/* types of goodies for hero */
+#define TYP_POTION	0
+#define TYP_SCROLL	1
+#define TYP_FOOD	2
+#define TYP_WEAPON	3
+#define TYP_ARMOR	4
+#define TYP_RING	5
+#define TYP_STICK	6
+#define TYP_AMULET	7
+
+#define V_PACK		3600	/* max volume in pack */
+#define V_POTION	50		/* volume of potion */
+#define V_SCROLL	80		/* volume of scroll */
+#define V_FOOD		35		/* volume of food */
+#define V_WEAPON	0		/* volume of weapon (depends on wep) */
+#define V_ARMOR		0		/* volume of armor (depends on armor) */
+#define V_RING		20		/* volume of ring */
+#define V_STICK		0		/* volume of stick (depends on staff/wand) */
+#define V_AMULET	30		/* volume of amulet */
+
+#define V_WS_STAFF	200		/* volume of a staff */
+#define V_WS_WAND	110		/* volume of a wand */
+#define W_WS_STAFF	100		/* weight of a staff */
+#define W_WS_WAND	 60		/* weight of a wand */
+
+#define FROMRING	2
+#define DONTCARE	-1
+#define ANYTHING	-1,-1	/* DONTCARE, DONTCARE */
+
+#define K_ARROW		240		/* killed by an arrow */
+#define K_DART		241		/* killed by a dart */
+#define K_BOLT		242		/* killed by a bolt */
+#define K_POOL		243		/* killed by drowning */
+#define K_ROD		244		/* killed by an exploding rod */
+#define K_SCROLL	245		/* killed by a burning scroll */
+#define K_STONE		246		/* killed by materializing in rock */
+#define K_STARVE	247		/* killed by starvation */
+/*
+ * return values for get functions
+ */
+
+#define	NORM	0		/* normal exit */
+#define	QUIT	1		/* quit option setting */
+#define	MINUS	2		/* back up one option */
+
+/*
+ * Return values for games end
+ */
+#define KILLED	0		/* hero was killed */
+#define CHICKEN	1		/* hero chickened out (quit) */
+#define WINNER	2		/* hero was a total winner */
+
+/*
+ * return values for chase routines
+ */
+#define CHASE	0		/* continue chasing hero */
+#define FIGHT	1		/* fight the hero */
+#define GONER	2		/* chaser fell into a trap */
+
+/*
+ * All the fun defines
+ */
+#define next(ptr)	(*ptr).l_next
+#define prev(ptr)	(*ptr).l_prev
+#define ldata(ptr)	(*ptr).l_data
+#define OBJPTR(what)	(struct object *)((*what).l_data)
+#define THINGPTR(what)	(struct thing *)((*what).l_data)
+
+#define inroom(rp, cp) (\
+	(cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && \
+	(rp)->r_pos.x <= (cp)->x && (cp)->y <= (rp)->r_pos.y + \
+	((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y)
+
+#define unc(cp) (cp).y, (cp).x
+#define cmov(xy) move((xy).y, (xy).x)
+#define DISTANCE(y1,x1,y2,x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
+#define when break;case
+#define otherwise break;default
+#define until(expr) while(!(expr))
+
+#define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
+#define draw(window) wrefresh(window)
+
+#define hero player.t_pos
+#define pstats player.t_stats
+#define pack player.t_pack
+
+#define herowis() (getpwis(him))
+#define herodex() (getpdex(him,FALSE))
+#define herostr() (pstats.s_ef.a_str)
+#define herocon() (pstats.s_ef.a_con)
+
+#define attach(a,b) _attach(&a,b)
+#define detach(a,b) _detach(&a,b)
+#define free_list(a) _free_list(&a)
+#ifndef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#endif
+#define goingup() (level < max_level)
+
+#define on(thing, flag) (((thing).t_flags & flag) != 0)
+#define off(thing, flag) (((thing).t_flags & flag) == 0)
+#undef CTRL
+#define CTRL(ch) (ch & 0x1F)
+
+#define ALLOC(x) malloc((unsigned int) x)
+#define FREE(x) free((char *) x)
+#define	EQSTR(a, b, c)	(strncmp(a, b, c) == 0)
+#define GOLDCALC (rnd(50 + 10 * level) + 2)
+#define ISMULT(type) (type == POTION || type == SCROLL || type == FOOD)
+
+#define newgrp() ++group
+#define o_charges o_ac
+
+
+/*
+ * Things that appear on the screens
+ */
+#define PASSAGE		'#'
+#define DOOR		'+'
+#define FLOOR		'.'
+#define PLAYER		'@'
+#define POST		'^'
+#define MAZETRAP	'\\'
+#define TRAPDOOR	'>'
+#define ARROWTRAP	'{'
+#define SLEEPTRAP	'$'
+#define BEARTRAP	'}'
+#define TELTRAP		'~'
+#define DARTTRAP	'`'
+#define POOL		'"'
+#define SECRETDOOR	'&'
+#define STAIRS		'%'
+#define GOLD		'*'
+#define POTION		'!'
+#define SCROLL		'?'
+#define MAGIC		'$'
+#define FOOD		':'
+#define WEAPON		')'
+#define ARMOR		']'
+#define AMULET		','
+#define RING		'='
+#define STICK		'/'
+#define CALLABLE	-1
+
+
+/*
+ *	stuff to do with encumberence 
+ */
+#define NORMENCB 1500	/* normal encumberence */
+#define SOMTHERE 5		/* something is in the way for dropping */
+#define CANTDROP 6		/* cant drop it cause its cursed */
+#define F_OKAY	 0		/* have plenty of food in stomach */
+#define F_HUNGRY 1		/* player is hungry */
+#define F_WEAK	 2		/* weak from lack of food */
+#define F_FAINT	 3		/* fainting from lack of food */
+
+
+/*
+ * Various constants
+ */
+#define	PASSWD		"mTuZ7WUV9RWkQ"
+#define BEARTIME	3
+#define SLEEPTIME	5
+#define HEALTIME	30
+#define HOLDTIME	2
+#define STPOS		0
+#define WANDERTIME	70
+#define BEFORE		1
+#define AFTER		2
+#define HUHDURATION	20
+#define SEEDURATION	850
+#define HUNGERTIME	1300
+#define WEAKTIME	150
+#define HUNGTIME	300		/* 2 * WEAKTIME */
+#define STOMACHSIZE	2000
+#define ESCAPE		27
+#define LEFT		0
+#define RIGHT		1
+#define BOLT_LENGTH	6
+
+#define STR		1
+#define DEX		2
+#define CON		3
+#define WIS		4
+
+/*
+ * Save against things
+ */
+#define VS_POISON			00
+#define VS_PARALYZATION		00
+#define VS_DEATH			00
+#define VS_PETRIFICATION	01
+#define VS_BREATH			02
+#define VS_MAGIC			03
+
+
+/*
+ * Various flag bits
+ */
+#define ISSTUCK 0000001		/* monster can't run (violet fungi) */
+#define ISDARK	0000001		/* room is dark */
+#define ISCURSED 000001		/* object is cursed */
+#define ISBLIND 0000001		/* hero is blind */
+#define ISPARA  0000002		/* monster is paralyzed */
+#define ISGONE	0000002		/* room is gone */
+#define ISKNOW  0000002		/* object is known */
+#define ISRUN	0000004		/* Hero & monsters are running */
+#define ISTREAS 0000004		/* room is a treasure room */
+#define ISPOST  0000004		/* object is in a trading post */
+#define ISFOUND 0000010		/* trap is found */
+#define ISINVINC 000010		/* player is invincible */
+#define ISINVIS 0000020		/* monster is invisible */
+#define ISPROT	0000020		/* object is protected somehow */
+#define ISMEAN  0000040		/* monster is mean */
+#define ISBLESS 0000040		/* object is blessed */
+#define ISGREED 0000100		/* monster is greedy */
+#define ISWOUND 0000200		/* monster is wounded */
+#define ISHELD  0000400		/* hero is held fast */
+#define ISHUH   0001000		/* hero | monster is confused */
+#define ISREGEN 0002000		/* monster is regenerative */
+#define CANHUH  0004000		/* hero can confuse monsters */
+#define CANSEE  0010000		/* hero can see invisible monsters */
+#define WASHIT	0010000		/* hero has hit monster at least once */
+#define ISMISL  0020000		/* object is normally thrown in attacks */
+#define ISCANC	0020000		/* monsters special attacks are canceled */
+#define ISMANY  0040000		/* objects are found in a group (> 1) */
+#define ISSLOW	0040000		/* hero | monster is slow */
+#define ISHASTE 0100000		/* hero | monster is fast */
+#define ISETHER	0200000		/* hero is thin as air */
+#define NONE	100			/* equal to 'd' (used for weaps) */
+
+
+/*
+ * Potion types
+ */
+#define P_CONFUSE	0		/* confusion */
+#define P_PARALYZE	1		/* paralysis */
+#define P_POISON	2		/* poison */
+#define P_STRENGTH	3		/* gain strength */
+#define P_SEEINVIS	4		/* see invisible */
+#define P_HEALING	5		/* healing */
+#define P_MFIND		6		/* monster detection */
+#define P_TFIND		7		/* magic detection */
+#define P_RAISE		8		/* raise level */
+#define P_XHEAL		9		/* extra healing */
+#define P_HASTE		10		/* haste self */
+#define P_RESTORE	11		/* restore strength */
+#define P_BLIND		12		/* blindness */
+#define P_NOP		13		/* thirst quenching */
+#define P_DEX		14		/* increase dexterity */
+#define P_ETH		15		/* etherealness */
+#define P_SMART		16		/* wisdom */
+#define P_REGEN		17		/* regeneration */
+#define P_SUPHERO	18		/* super ability */
+#define P_DECREP	19		/* decrepedness */
+#define P_INVINC	20		/* invicibility */
+#define MAXPOTIONS	21		/* types of potions */
+
+
+/*
+ * Scroll types
+ */
+#define S_CONFUSE	0		/* monster confusion */
+#define S_MAP		1		/* magic mapping */
+#define S_LIGHT		2		/* light */
+#define S_HOLD		3		/* hold monster */
+#define S_SLEEP		4		/* sleep */
+#define S_ARMOR		5		/* enchant armor */
+#define S_IDENT		6		/* identify */
+#define S_SCARE		7		/* scare monster */
+#define S_GFIND		8		/* gold detection */
+#define S_TELEP		9		/* teleportation */
+#define S_ENCH		10		/* enchant weapon */
+#define S_CREATE	11		/* create monster */
+#define S_REMOVE	12		/* remove curse */
+#define S_AGGR		13		/* aggravate monster */
+#define S_NOP		14		/* blank paper */
+#define S_GENOCIDE	15		/* genocide */
+#define S_KNOWALL	16		/* item knowledge */
+#define S_PROTECT	17		/* item protection */
+#define S_DCURSE	18		/* demons curse */
+#define S_DLEVEL	19		/* transport */
+#define S_ALLENCH	20		/* enchantment */
+#define S_BLESS		21		/* gods blessing */
+#define S_MAKEIT	22		/* aquirement */
+#define S_BAN		23		/* banishment */
+#define S_CWAND		24		/* charge wands */
+#define S_LOCTRAP	25		/* locate traps */
+#define MAXSCROLLS	26		/* types of scrolls */
+
+
+/*
+ * Weapon types
+ */
+#define MACE		0		/* mace */
+#define SWORD		1		/* long sword */
+#define BOW			2		/* short bow */
+#define ARROW		3		/* arrow */
+#define DAGGER		4		/* dagger */
+#define ROCK		5		/* rocks */
+#define TWOSWORD	6		/* two-handed sword */
+#define SLING		7		/* sling */
+#define DART		8		/* darts */
+#define CROSSBOW	9		/* crossbow */
+#define BOLT		10		/* crossbow bolt */
+#define SPEAR		11		/* spear */
+#define TRIDENT		12		/* trident */
+#define SPETUM		13		/* spetum */
+#define BARDICHE	14 		/* bardiche */
+#define PIKE		15		/* pike */
+#define BASWORD		16		/* bastard sword */
+#define HALBERD		17		/* halberd */
+#define MAXWEAPONS	18		/* types of weapons */
+
+
+/*
+ * Armor types
+ */
+#define LEATHER		0		/* leather */
+#define RINGMAIL	1		/* ring */
+#define STUDDED		2		/* studded leather */
+#define SCALE		3		/* scale */
+#define PADDED		4		/* padded */
+#define CHAIN		5		/* chain */
+#define SPLINT		6		/* splint */
+#define BANDED		7		/* banded */
+#define PLATEMAIL	8		/* plate mail */
+#define PLATEARMOR	9		/* plate armor */
+#define MAXARMORS	10		/* types of armor */
+
+
+/*
+ * Ring types
+ */
+#define R_PROTECT	0		/* protection */
+#define R_ADDSTR	1		/* add strength */
+#define R_SUSTSTR	2		/* sustain strength */
+#define R_SEARCH	3		/* searching */
+#define R_SEEINVIS	4		/* see invisible */
+#define R_CONST		5		/* constitution */
+#define R_AGGR		6		/* aggravate monster */
+#define R_ADDHIT	7		/* agility */
+#define R_ADDDAM	8		/* increase damage */
+#define R_REGEN		9		/* regeneration */
+#define R_DIGEST	10		/* slow digestion */
+#define R_TELEPORT	11		/* teleportation */
+#define R_STEALTH	12		/* stealth */
+#define R_SPEED		13		/* speed */
+#define R_FTRAPS	14		/* find traps */
+#define R_DELUS		15		/* delusion */
+#define R_SUSAB		16		/* sustain ability */
+#define R_BLIND		17		/* blindness */
+#define R_SLOW		18		/* lethargy */
+#define R_GIANT		19		/* ogre strength */
+#define R_SAPEM		20		/* enfeeblement */
+#define R_HEAVY		21		/* burden */
+#define R_LIGHT		22		/* illumination */
+#define R_BREATH	23		/* fire protection */
+#define R_KNOW		24		/* wisdom */
+#define R_DEX		25		/* dexterity */
+#define MAXRINGS	26		/* types of rings */
+
+
+/*
+ * Rod/Wand/Staff types
+ */
+
+#define WS_LIGHT	0		/* light */
+#define WS_HIT		1		/* striking */
+#define WS_ELECT	2		/* lightning */
+#define WS_FIRE		3		/* fire */
+#define WS_COLD		4		/* cold */
+#define WS_POLYM	5		/* polymorph */
+#define WS_MISSILE	6		/* magic missile */
+#define WS_HASTE_M	7		/* haste monster */
+#define WS_SLOW_M	8		/* slow monster */
+#define WS_DRAIN	9		/* drain life */
+#define WS_NOP		10		/* nothing */
+#define WS_TELAWAY	11		/* teleport away */
+#define WS_TELTO	12		/* teleport to */
+#define WS_CANCEL	13		/* cancellation */
+#define WS_SAPLIFE	14		/* sap life */
+#define WS_CURE		15		/* curing */
+#define WS_PYRO		16		/* pyromania */
+#define WS_ANNIH	17		/* annihilate monster */
+#define WS_PARZ		18		/* paralyze monster */
+#define WS_HUNGER	19		/* food absorption */
+#define WS_MREG		20		/* regenerate monster */
+#define WS_MINVIS	21		/* hide monster */
+#define WS_ANTIM	22		/* anti-matter */
+#define WS_MOREMON	23		/* clone monster */
+#define WS_CONFMON	24		/* confuse monster */
+#define WS_MDEG		25		/* degenerate monster */
+#define MAXSTICKS	26		/* max types of sticks */
+
+#define MAXAMULETS	1		/* types of amulets */
+#define MAXFOODS	1		/* types of food */
+
+
+/*
+ * Now we define the structures and types
+ */
+
+struct delayed_action {
+	int d_type;
+	int (*d_func)();
+	int d_arg;
+	int d_time;
+};
+
+/*
+ * Help list
+ */
+struct h_list {
+	char h_ch;
+	char *h_desc;
+};
+
+
+/*
+ * Coordinate data type
+ */
+struct coord {
+	int x;			/* column position */
+	int y;			/* row position */
+};
+
+struct monlev {
+	int l_lev;		/* lowest level for a monster */
+	int h_lev;		/* highest level for a monster */
+	bool d_wand;	/* TRUE if monster wanders */
+};
+
+/*
+ * Linked list data type
+ */
+struct linked_list {
+	struct linked_list *l_next;
+	struct linked_list *l_prev;
+	char *l_data;			/* Various structure pointers */
+};
+
+
+/*
+ * Stuff about magic items
+ */
+#define mi_wght mi_worth
+struct magic_item {
+	char *mi_name;			/* name of item */
+	int mi_prob;			/* probability of getting item */
+	int mi_worth;			/* worth of item */
+};
+
+struct magic_info {
+	int mf_max;						/* max # of this type */
+	int	mf_vol;						/* volume of this item */
+	char mf_show;					/* appearance on screen */
+	struct magic_item *mf_magic;	/* pointer to magic tables */
+};
+
+/*
+ * staff/wand stuff
+ */
+struct rod {
+	char *ws_type;		/* either "staff" or "wand" */
+	char *ws_made;		/* "mahogany", etc */
+	int	 ws_vol;		/* volume of this type stick */
+	int  ws_wght;		/* weight of this type stick */
+};
+
+/*
+ * armor structure 
+ */
+struct init_armor {
+	int a_class;		/* normal armor class */
+	int a_wght;			/* weight of armor */
+	int a_vol;			/* volume of armor */
+};
+
+/*
+ * weapon structure
+ */
+struct init_weps {
+    char *w_dam;		/* hit damage */
+    char *w_hrl;		/* hurl damage */
+    int  w_flags;		/* flags */
+    int  w_wght;		/* weight of weapon */
+	int  w_vol;			/* volume of weapon */
+    char w_launch;		/* need to launch it */
+};
+
+
+/*
+ * Room structure
+ */
+struct room {
+	struct coord r_pos;		/* Upper left corner */
+	struct coord r_max;		/* Size of room */
+	struct coord r_gold;	/* Where the gold is */
+	struct coord r_exit[4];	/* Where the exits are */
+	struct room *r_ptr[4];	/* this exits' link to next rm */
+	int r_goldval;			/* How much the gold is worth */
+	int r_flags;			/* Info about the room */
+	int r_nexits;			/* Number of exits */
+};
+
+/*
+ * Array of all traps on this level
+ */
+struct trap {
+	struct coord tr_pos;	/* Where trap is */
+	struct coord tr_goto;	/* where trap tranports to (if any) */
+	int tr_flags;			/* Info about trap */
+	char tr_type;			/* What kind of trap */
+};
+
+/*
+ * structure for describing true abilities
+ */
+struct real {
+	int a_str;			/* strength (3-24) */
+	int a_dex;			/* dexterity (3-18) */
+	int a_wis;			/* wisdom (3-18) */
+	int a_con;			/* constitution (3-18) */
+};
+
+/*
+ * Structure describing a fighting being
+ */
+struct stats {
+	struct real s_re;	/* True ability */
+	struct real s_ef;	/* Effective ability */
+	long s_exp;			/* Experience */
+	int s_lvl;			/* Level of mastery */
+	int s_arm;			/* Armor class */
+	int s_hpt;			/* Hit points */
+	int s_maxhp;		/* max value of hit points */
+	int s_pack;			/* current weight of his pack */
+	int s_carry;		/* max weight he can carry */
+	char s_dmg[16];		/* String describing damage done */
+};
+
+/*
+ * Structure for monsters and player
+ */
+struct thing {
+	struct stats t_stats;		/* Physical description */
+	struct coord t_pos;			/* Position */
+	struct coord t_oldpos;		/* last spot of it */
+	struct coord *t_dest;		/* Where it is running to */
+	struct linked_list *t_pack;	/* What the thing is carrying */
+	struct room *t_room;		/* Room this thing is in */
+	long t_flags;				/* State word */
+	int t_indx;					/* Index into monster structure */
+	int t_nomove;				/* # turns you cant move */
+	int t_nocmd;				/* # turns you cant do anything */
+	bool t_turn;				/* If slow, is it a turn to move */
+	char t_type;				/* What it is */
+	char t_disguise;			/* What mimic looks like */
+	char t_oldch;				/* Char that was where it was */
+	char t_reserved;
+};
+
+/*
+ * Array containing information on all the various types of mosnters
+ */
+struct monster {
+	char *m_name;			/* What to call the monster */
+	char m_show;			/* char that monster shows */
+	short m_carry;			/* Probability of having an item */
+	struct monlev m_lev;	/* level stuff */
+	long m_flags;			/* Things about the monster */
+	struct stats m_stats;	/* Initial stats */
+};
+
+/*
+ * Structure for a thing that the rogue can carry
+ */
+struct object {
+	struct coord o_pos;		/* Where it lives on the screen */
+	char o_damage[8];		/* Damage if used like sword */
+	char o_hurldmg[8];		/* Damage if thrown */
+	char *o_typname;		/* name this thing is called */
+	int o_type;				/* What kind of object it is */
+	int o_count;			/* Count for plural objects */
+	int o_which;			/* Which object of a type it is */