Source:NetHack 3.4.0/you.h

From NetHackWiki
Jump to navigation Jump to search

Below is the full text to you.h from the source code of NetHack 3.4.0. To link to a particular line, write [[NetHack 3.4.0/you.h#line123]], for example.

Warning! This is the source code from an old release. For the latest release, see Source code

The NetHack General Public License applies to screenshots, source code and other content from NetHack.

This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.

1.    /*	SCCS Id: @(#)you.h	3.4	2000/05/21	*/
2.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3.    /* NetHack may be freely redistributed.  See license for details. */
4.    
5.    #ifndef YOU_H
6.    #define YOU_H
7.    
8.    #include "attrib.h"
9.    #include "monst.h"
10.   #ifndef PROP_H
11.   #include "prop.h"		/* (needed here for util/makedefs.c) */
12.   #endif
13.   #include "skills.h"
14.   
15.   /*** Substructures ***/
16.   
17.   struct RoleName {
18.   	const char	*m;	/* name when character is male */
19.   	const char	*f;	/* when female; null if same as male */
20.   };
21.   
22.   struct RoleAdvance {
23.   	/* "fix" is the fixed amount, "rnd" is the random amount */
24.   	xchar infix, inrnd;	/* at character initialization */
25.   	xchar lofix, lornd;	/* gained per level <  urole.xlev */
26.   	xchar hifix, hirnd;	/* gained per level >= urole.xlev */
27.   };
28.   
29.   struct u_have {
30.   	Bitfield(amulet,1);	/* carrying Amulet	*/
31.   	Bitfield(bell,1);	/* carrying Bell	*/
32.   	Bitfield(book,1);	/* carrying Book	*/
33.   	Bitfield(menorah,1);	/* carrying Candelabrum */
34.   	Bitfield(questart,1);	/* carrying the Quest Artifact */
35.   	Bitfield(unused,3);
36.   };
37.   
38.   struct u_event {
39.   	Bitfield(minor_oracle,1);	/* received at least 1 cheap oracle */
40.   	Bitfield(major_oracle,1);	/*  "  expensive oracle */
41.   	Bitfield(qcalled,1);		/* called by Quest leader to do task */
42.   	Bitfield(qexpelled,1);		/* expelled from the Quest dungeon */
43.   	Bitfield(qcompleted,1);		/* successfully completed Quest task */
44.   	Bitfield(uheard_tune,2);	/* 1=know about, 2=heard passtune */
45.   	Bitfield(uopened_dbridge,1);	/* opened the drawbridge */
46.   
47.   	Bitfield(invoked,1);		/* invoked Gate to the Sanctum level */
48.   	Bitfield(gehennom_entered,1);	/* entered Gehennom via Valley */
49.   #ifdef ELBERETH
50.   	Bitfield(uhand_of_elbereth,2);	/* became Hand of Elbereth */
51.   #endif
52.   	Bitfield(udemigod,1);		/* killed the wiz */
53.   	Bitfield(ascended,1);		/* has offered the Amulet */
54.   };
55.   
56.   /* KMH, conduct --
57.    * These are voluntary challenges.  Each field denotes the number of
58.    * times a challenge has been violated.
59.    */
60.   struct u_conduct {		/* number of times... */
61.   	long	unvegetarian;	/* eaten any animal */
62.   	long	unvegan;	/* ... or any animal byproduct */
63.   	long	food;		/* ... or any comestible */
64.   	long	gnostic;	/* used prayer, priest, or altar */
65.   	long	weaphit;	/* hit a monster with a weapon */
66.   	long	killer;		/* killed a monster yourself */
67.   	long	literate;	/* read something (other than BotD) */
68.   	long	polypiles;	/* polymorphed an object */
69.   	long	polyselfs;	/* transformed yourself */
70.   	long	wishes;		/* used a wish */
71.   	long	wisharti;	/* wished for an artifact */
72.   				/* genocides already listed at end of game */
73.   };
74.   
75.   /*** Unified structure containing role information ***/
76.   struct Role {
77.   	/*** Strings that name various things ***/
78.   	struct RoleName name;	/* the role's name (from u_init.c) */
79.   	struct RoleName rank[9]; /* names for experience levels (from botl.c) */
80.   	const char *lgod, *ngod, *cgod; /* god names (from pray.c) */
81.   	const char *filecode;	/* abbreviation for use in file names */
82.   	const char *homebase;	/* quest leader's location (from questpgr.c) */
83.   	const char *intermed;	/* quest intermediate goal (from questpgr.c) */
84.   
85.   	/*** Indices of important monsters and objects ***/
86.   	short malenum,		/* index (PM_) as a male (botl.c) */
87.   	      femalenum,	/* ...or as a female (NON_PM == same) */
88.   	      petnum,		/* PM_ of preferred pet (NON_PM == random) */
89.   	      ldrnum,		/* PM_ of quest leader (questpgr.c) */
90.   	      guardnum,		/* PM_ of quest guardians (questpgr.c) */
91.   	      neminum,		/* PM_ of quest nemesis (questpgr.c) */
92.   	      enemy1num,	/* specific quest enemies (NON_PM == random) */
93.   	      enemy2num;
94.   	char  enemy1sym,	/* quest enemies by class (S_) */
95.   	      enemy2sym;
96.   	short questarti;	/* index (ART_) of quest artifact (questpgr.c) */
97.   
98.   	/*** Bitmasks ***/
99.   	short allow;		/* bit mask of allowed variations */
100.  #define ROLE_RACEMASK	0x0ff8		/* allowable races */
101.  #define ROLE_GENDMASK	0xf000		/* allowable genders */
102.  #define ROLE_MALE	0x1000
103.  #define ROLE_FEMALE	0x2000
104.  #define ROLE_NEUTER	0x4000
105.  #define ROLE_ALIGNMASK	AM_MASK		/* allowable alignments */
106.  #define ROLE_LAWFUL	AM_LAWFUL
107.  #define ROLE_NEUTRAL	AM_NEUTRAL
108.  #define ROLE_CHAOTIC	AM_CHAOTIC
109.  
110.  	/*** Attributes (from attrib.c and exper.c) ***/
111.  	xchar attrbase[A_MAX];	/* lowest initial attributes */
112.  	xchar attrdist[A_MAX];	/* distribution of initial attributes */
113.  	struct RoleAdvance hpadv; /* hit point advancement */
114.  	struct RoleAdvance enadv; /* energy advancement */
115.  	xchar xlev;		/* cutoff experience level */
116.  	xchar initrecord;	/* initial alignment record */
117.  
118.  	/*** Spell statistics (from spell.c) ***/
119.  	int spelbase;		/* base spellcasting penalty */
120.  	int spelheal;		/* penalty (-bonus) for healing spells */
121.  	int spelshld;		/* penalty for wearing any shield */
122.  	int spelarmr;		/* penalty for wearing metal armour */
123.  	int spelstat;		/* which stat (A_) is used */
124.  	int spelspec;		/* spell (SPE_) the class excels at */
125.  	int spelsbon;		/* penalty (-bonus) for that spell */
126.  
127.  	/*** Properties in variable-length arrays ***/
128.  	/* intrinsics (see attrib.c) */
129.  	/* initial inventory (see u_init.c) */
130.  	/* skills (see u_init.c) */
131.  
132.  	/*** Don't forget to add... ***/
133.  	/* quest leader, guardians, nemesis (monst.c) */
134.  	/* quest artifact (artilist.h) */
135.  	/* quest dungeon definition (dat/Xyz.dat) */
136.  	/* quest text (dat/quest.txt) */
137.  	/* dictionary entries (dat/data.bas) */
138.  };
139.  
140.  extern const struct Role roles[];	/* table of available roles */
141.  extern struct Role urole;
142.  #define Role_if(X)	(urole.malenum == (X))
143.  #define Role_switch	(urole.malenum)
144.  
145.  /* used during initialization for race, gender, and alignment
146.     as well as for character class */
147.  #define ROLE_NONE	(-1)
148.  #define ROLE_RANDOM	(-2)
149.  
150.  /*** Unified structure specifying race information ***/
151.  
152.  struct Race {
153.  	/*** Strings that name various things ***/
154.  	const char *noun;	/* noun ("human", "elf") */
155.  	const char *adj;	/* adjective ("human", "elven") */
156.  	const char *coll;	/* collective ("humanity", "elvenkind") */
157.  	const char *filecode;	/* code for filenames */
158.  	struct RoleName individual; /* individual as a noun ("man", "elf") */
159.  
160.  	/*** Indices of important monsters and objects ***/
161.  	short malenum,		/* PM_ as a male monster */
162.  	      femalenum,	/* ...or as a female (NON_PM == same) */
163.  	      mummynum,		/* PM_ as a mummy */
164.  	      zombienum;	/* PM_ as a zombie */
165.  
166.  	/*** Bitmasks ***/
167.  	short allow;		/* bit mask of allowed variations */
168.  	short selfmask,		/* your own race's bit mask */
169.  	      lovemask,		/* bit mask of always peaceful */
170.  	      hatemask;		/* bit mask of always hostile */
171.  
172.  	/*** Attributes ***/
173.  	xchar attrmin[A_MAX];	/* minimum allowable attribute */
174.  	xchar attrmax[A_MAX];	/* maximum allowable attribute */
175.  	struct RoleAdvance hpadv; /* hit point advancement */
176.  	struct RoleAdvance enadv; /* energy advancement */
177.  #if 0	/* DEFERRED */
178.  	int   nv_range;		/* night vision range */
179.  	int   xray_range;	/* X-ray vision range */
180.  #endif
181.  
182.  	/*** Properties in variable-length arrays ***/
183.  	/* intrinsics (see attrib.c) */
184.  
185.  	/*** Don't forget to add... ***/
186.  	/* quest leader, guardians, nemesis (monst.c) */
187.  	/* quest dungeon definition (dat/Xyz.dat) */
188.  	/* quest text (dat/quest.txt) */
189.  	/* dictionary entries (dat/data.bas) */
190.  };
191.  
192.  extern const struct Race races[];	/* Table of available races */
193.  extern struct Race urace;
194.  #define Race_if(X)	(urace.malenum == (X))
195.  #define Race_switch	(urace.malenum)
196.  
197.  /*** Unified structure specifying gender information ***/
198.  struct Gender {
199.  	const char *adj;	/* male/female/neuter */
200.  	const char *he;		/* he/she/it */
201.  	const char *him;	/* him/her/it */
202.  	const char *his;	/* his/her/its */
203.  	const char *filecode;	/* file code */
204.  	short allow;		/* equivalent ROLE_ mask */
205.  };
206.  #define ROLE_GENDERS	2	/* number of permitted player genders */
207.  				/* increment to 3 if you allow neuter roles */
208.  
209.  extern const struct Gender genders[];	/* table of available genders */
210.  #define uhe()	(genders[flags.female ? 1 : 0].he)
211.  #define uhim()	(genders[flags.female ? 1 : 0].him)
212.  #define uhis()	(genders[flags.female ? 1 : 0].his)
213.  #define mhe(mtmp)	(genders[pronoun_gender(mtmp)].he)
214.  #define mhim(mtmp)	(genders[pronoun_gender(mtmp)].him)
215.  #define mhis(mtmp)	(genders[pronoun_gender(mtmp)].his)
216.  
217.  
218.  /*** Unified structure specifying alignment information ***/
219.  struct Align {
220.  	const char *noun;	/* law/balance/chaos */
221.  	const char *adj;	/* lawful/neutral/chaotic */
222.  	const char *filecode;	/* file code */
223.  	short allow;		/* equivalent ROLE_ mask */
224.  	aligntyp value;		/* equivalent A_ value */
225.  };
226.  #define ROLE_ALIGNS	3	/* number of permitted player alignments */
227.  
228.  extern const struct Align aligns[];	/* table of available alignments */
229.  
230.  
231.  /*** Information about the player ***/
232.  struct you {
233.  	xchar ux, uy;
234.  	schar dx, dy, dz;	/* direction of move (or zap or ... ) */
235.  	schar di;		/* direction of FF */
236.  	xchar tx, ty;		/* destination of travel */
237.  	xchar ux0, uy0;		/* initial position FF */
238.  	d_level uz, uz0;	/* your level on this and the previous turn */
239.  	d_level utolev;		/* level monster teleported you to, or uz */
240.  	uchar utotype;		/* bitmask of goto_level() flags for utolev */
241.  	boolean umoved;		/* changed map location (post-move) */
242.  	int last_str_turn;	/* 0: none, 1: half turn, 2: full turn */
243.  				/* +: turn right, -: turn left */
244.  	int ulevel;		/* 1 to MAXULEV */
245.  	int ulevelmax;
246.  	unsigned utrap;		/* trap timeout */
247.  	unsigned utraptype;	/* defined if utrap nonzero */
248.  #define TT_BEARTRAP	0
249.  #define TT_PIT		1
250.  #define TT_WEB		2
251.  #define TT_LAVA		3
252.  #define TT_INFLOOR	4
253.  	char	urooms[5];	/* rooms (roomno + 3) occupied now */
254.  	char	urooms0[5];	/* ditto, for previous position */
255.  	char	uentered[5];	/* rooms (roomno + 3) entered this turn */
256.  	char	ushops[5];	/* shop rooms (roomno + 3) occupied now */
257.  	char	ushops0[5];	/* ditto, for previous position */
258.  	char	ushops_entered[5]; /* ditto, shops entered this turn */
259.  	char	ushops_left[5]; /* ditto, shops exited this turn */
260.  
261.  	int	 uhunger;	/* refd only in eat.c and shk.c */
262.  	unsigned uhs;		/* hunger state - see eat.c */
263.  
264.  	struct prop uprops[LAST_PROP+1];
265.  
266.  	unsigned umconf;
267.  	char usick_cause[PL_PSIZ+20]; /* sizeof "unicorn horn named "+1 */
268.  	Bitfield(usick_type,2);
269.  #define SICK_VOMITABLE 0x01
270.  #define SICK_NONVOMITABLE 0x02
271.  #define SICK_ALL 0x03
272.  
273.  	/* These ranges can never be more than MAX_RANGE (vision.h). */
274.  	int nv_range;		/* current night vision range */
275.  	int xray_range;		/* current xray vision range */
276.  
277.  	/*
278.  	 * These variables are valid globally only when punished and blind.
279.  	 */
280.  #define BC_BALL  0x01	/* bit mask for ball  in 'bc_felt' below */
281.  #define BC_CHAIN 0x02	/* bit mask for chain in 'bc_felt' below */
282.  	int bglyph;	/* glyph under the ball */
283.  	int cglyph;	/* glyph under the chain */
284.  	int bc_order;	/* ball & chain order [see bc_order() in ball.c] */
285.  	int bc_felt;	/* mask for ball/chain being felt */
286.  
287.  	int umonster;			/* hero's "real" monster num */
288.  	int umonnum;			/* current monster number */
289.  
290.  	int mh, mhmax, mtimedone;	/* for polymorph-self */
291.  	struct attribs	macurr,		/* for monster attribs */
292.  			mamax;		/* for monster attribs */
293.  	int ulycn;			/* lycanthrope type */
294.  
295.  	unsigned ucreamed;
296.  	unsigned uswldtim;		/* time you have been swallowed */
297.  
298.  	Bitfield(uswallow,1);		/* true if swallowed */
299.  	Bitfield(uinwater,1);		/* if you're currently in water (only
300.  					   underwater possible currently) */
301.  	Bitfield(uundetected,1);	/* if you're a hiding monster/piercer */
302.  	Bitfield(mfemale,1);		/* saved human value of flags.female */
303.  	Bitfield(uinvulnerable,1);	/* you're invulnerable (praying) */
304.  	Bitfield(uburied,1);		/* you're buried */
305.  	Bitfield(uedibility,1);		/* blessed food detection; sense unsafe food */
306.  	/* 1 free bit! */
307.  
308.  	unsigned udg_cnt;		/* how long you have been demigod */
309.  	struct u_event	uevent;		/* certain events have happened */
310.  	struct u_have	uhave;		/* you're carrying special objects */
311.  	struct u_conduct uconduct;	/* KMH, conduct */
312.  	struct attribs	acurr,		/* your current attributes (eg. str)*/
313.  			aexe,		/* for gain/loss via "exercise" */
314.  			abon,		/* your bonus attributes (eg. str) */
315.  			amax,		/* your max attributes (eg. str) */
316.  			atemp,		/* used for temporary loss/gain */
317.  			atime;		/* used for loss/gain countdown */
318.  	align	ualign;			/* character alignment */
319.  #define CONVERT		2
320.  #define A_ORIGINAL	1
321.  #define A_CURRENT	0
322.  	aligntyp ualignbase[CONVERT];	/* for ualign conversion record */
323.  	schar uluck, moreluck;		/* luck and luck bonus */
324.  #define Luck	(u.uluck + u.moreluck)
325.  #define LUCKADD		3	/* added value when carrying luck stone */
326.  #define LUCKMAX		10	/* on moonlit nights 11 */
327.  #define LUCKMIN		(-10)
328.  	schar	uhitinc;
329.  	schar	udaminc;
330.  	schar	uac;
331.  	uchar	uspellprot;		/* protection by SPE_PROTECTION */
332.  	uchar	usptime;		/* #moves until uspellprot-- */
333.  	uchar	uspmtime;		/* #moves between uspellprot-- */
334.  	int	uhp,uhpmax;
335.  	int	uen, uenmax;		/* magical energy - M. Stephenson */
336.  	int ugangr;			/* if the gods are angry at you */
337.  	int ugifts;			/* number of artifacts bestowed */
338.  	int ublessed, ublesscnt;	/* blessing/duration from #pray */
339.  #ifndef GOLDOBJ
340.  	long	ugold, ugold0;
341.  #else
342.  	long	umoney0;
343.  #endif
344.  	long	uexp, urexp;
345.  	long	ucleansed;	/* to record moves when player was cleansed */
346.  	long	usleep;		/* sleeping; monstermove you last started */
347.  	int uinvault;
348.  	struct monst *ustuck;
349.  #ifdef STEED
350.  	struct monst *usteed;
351.  	long ugallop;
352.  	int urideturns;
353.  #endif
354.  	int	umortality;		/* how many times you died */
355.  	int ugrave_arise; /* you die and become something aside from a ghost */
356.  	time_t	ubirthday;		/* real world time when game began */
357.  
358.  	int	weapon_slots;		/* unused skill slots */
359.  	int	skills_advanced;		/* # of advances made so far */
360.  	xchar	skill_record[P_SKILL_LIMIT];	/* skill advancements */
361.  	struct skills weapon_skills[P_NUM_SKILLS];
362.  	boolean twoweap;		/* KMH -- Using two-weapon combat */
363.  
364.  };	/* end of `struct you' */
365.  
366.  #define Upolyd (u.umonnum != u.umonster)
367.  
368.  #endif	/* YOU_H */