mirror of
https://codeberg.org/noisytoot/notnotdnethack.git
synced 2024-11-21 16:55:06 +00:00
Ron Nazarov
6dc3e21939
This makes players poly'd into parasitized androids (which is only possible in wizmode since they're nopoly) count as androids, like the parasitized android player race.
1037 lines
38 KiB
C
1037 lines
38 KiB
C
/* SCCS Id: @(#)you.h 3.4 2000/05/21 */
|
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#ifndef YOU_H
|
|
#define YOU_H
|
|
|
|
#include "attrib.h"
|
|
#include "monst.h"
|
|
#include "cults.h"
|
|
#ifndef PROP_H
|
|
#include "prop.h" /* (needed here for util/makedefs.c) */
|
|
#endif
|
|
#include "skills.h"
|
|
#include "engrave.h"
|
|
|
|
/*** Substructures ***/
|
|
|
|
struct RoleName {
|
|
char *m; /* name when character is male */
|
|
char *f; /* when female; null if same as male */
|
|
};
|
|
|
|
struct RoleAdvance {
|
|
/* "fix" is the fixed amount, "rnd" is the random amount */
|
|
xchar infix, inrnd; /* at character initialization */
|
|
xchar lofix, lornd; /* gained per level < urole.xlev */
|
|
xchar hifix, hirnd; /* gained per level >= urole.xlev */
|
|
};
|
|
|
|
struct u_have {
|
|
Bitfield(amulet,1); /* carrying Amulet */
|
|
Bitfield(bell,1); /* carrying Bell */
|
|
Bitfield(book,1); /* carrying Book */
|
|
Bitfield(menorah,1); /* carrying Candelabrum */
|
|
Bitfield(questart,1); /* carrying the Quest Artifact */
|
|
Bitfield(unused,3);
|
|
};
|
|
|
|
struct u_event {
|
|
Bitfield(minor_oracle,1); /*1 received at least 1 cheap oracle */
|
|
Bitfield(major_oracle,1); /*2 " expensive oracle */
|
|
Bitfield(qcalled,1); /*3 called by Quest leader to do task */
|
|
Bitfield(qexpelled,1); /*4 expelled from the Quest dungeon */
|
|
Bitfield(qcompleted,1); /*5 successfully completed Quest task */
|
|
Bitfield(uheard_tune,2); /*7 1=know about, 2=heard passtune */
|
|
Bitfield(uopened_dbridge,1); /*8 opened the drawbridge */
|
|
Bitfield(uread_necronomicon,1); /*9 have read the necronomicon */
|
|
Bitfield(knoweddergud,1); /*10 know the identity of the black-web god */
|
|
|
|
Bitfield(found_square,1); /*11 found the vibrating square */
|
|
Bitfield(invoked,1); /*12 invoked Gate to the Sanctum level */
|
|
Bitfield(gehennom_entered,1); /*13 entered Gehennom via Valley */
|
|
#define CROWNING_BITS 7
|
|
#define MAX_CROWNING pow(2,CROWNING_BITS)-1
|
|
Bitfield(uhand_of_elbereth,CROWNING_BITS); /*19 became Hand of Elbereth */
|
|
Bitfield(udemigod,1); /*21 killed the wiz */
|
|
Bitfield(ukilled_apollyon,1); /*22 killed the angel of the pit. Lucifer should spawn on Astral */
|
|
Bitfield(ukilled_illurien,1); /*23 Harassment */
|
|
Bitfield(ukilled_dagon,1); /*24 Returns */
|
|
Bitfield(ukilled_hydra,1); /*25 Returns */
|
|
Bitfield(sum_entered,1); /*26 entered Sum-of-All */
|
|
Bitfield(uaxus_foe,1); /*27 enemy of the modrons */
|
|
Bitfield(utook_castle, 2); /*29 sat on the castle throne, used artifact wish */
|
|
Bitfield(uunknowngod, 2); /*31 given five artifacts to the priests of the unknown god, used artifact wish */
|
|
Bitfield(uconstellation, 2); /*33 has earned the star emperor ring wish, used artifact wish */
|
|
#define ARTWISH_EARNED 1
|
|
#define ARTWISH_SPENT 2
|
|
Bitfield(ascended,1); /*34 has offered the Amulet */
|
|
Bitfield(knoxmade,1); /*35 Portal to Ludios has been made in the main dungeon, teleport ok */
|
|
|
|
Bitfield(padding,10); /*45 reseve another bitfield in event. */
|
|
};
|
|
|
|
/* KMH, conduct --
|
|
* These are voluntary challenges. Each field denotes the number of
|
|
* times a challenge has been violated.
|
|
*/
|
|
struct u_conduct { /* number of times... */
|
|
long unvegetarian; /* eaten any animal */
|
|
long unvegan; /* ... or any animal byproduct */
|
|
long food; /* ... or any comestible */
|
|
long ratseaten; /* number of rats eaten */
|
|
long gnostic; /* used prayer, priest, or altar */
|
|
long weaphit; /* hit a monster with a weapon */
|
|
long killer; /* killed a monster yourself */
|
|
long wardless; /* drew a warding symbol */
|
|
long elbereth; /* wrote elbereth */
|
|
long literate; /* read something (other than BotD) */
|
|
long polypiles; /* polymorphed an object */
|
|
long polyselfs; /* transformed yourself */
|
|
long wishes; /* used a wish */
|
|
long wisharti; /* wished for an artifact */
|
|
long shopID; /* number of items id by shopkeepers */
|
|
long IDs; /* number of items id by magic or shopkeepers */
|
|
/* genocides already listed at end of game */
|
|
};
|
|
|
|
/*** Unified structure containing role information ***/
|
|
struct Role {
|
|
/*** Strings that name various things ***/
|
|
struct RoleName name; /* the role's name (from u_init.c) */
|
|
struct RoleName rank[9]; /* names for experience levels (from botl.c) */
|
|
int lgod, ngod, cgod; /* god numbers (from gnames.h) */
|
|
const char *filecode; /* abbreviation for use in file names */
|
|
const char *homebase; /* quest leader's location (from questpgr.c) */
|
|
const char *intermed; /* quest intermediate goal (from questpgr.c) */
|
|
|
|
/*** Indices of important monsters and objects ***/
|
|
short malenum, /* index (PM_) as a male (botl.c) */
|
|
femalenum, /* ...or as a female (NON_PM == same) */
|
|
petnum, /* PM_ of preferred pet (NON_PM == random) */
|
|
ldrnum, /* PM_ of quest leader (questpgr.c) */
|
|
guardnum, /* PM_ of quest guardians (questpgr.c) */
|
|
neminum, /* PM_ of quest nemesis (questpgr.c) */
|
|
enemy1num, /* specific quest enemies (NON_PM == random) */
|
|
enemy2num;
|
|
char enemy1sym, /* quest enemies by class (S_) */
|
|
enemy2sym;
|
|
int questarti; /* index (ART_) of quest artifact (questpgr.c) */
|
|
|
|
/*** Bitmasks ***/
|
|
long marace; /* allowable races */
|
|
short allow; /* bit mask of allowed variations */
|
|
#define ROLE_GENDMASK 0xf000 /* allowable genders */
|
|
#define ROLE_MALE 0x1000
|
|
#define ROLE_FEMALE 0x2000
|
|
#define ROLE_NEUTER 0x4000
|
|
#define ROLE_ALIGNMASK AM_MASK /* allowable alignments */
|
|
#define ROLE_LAWFUL AM_LAWFUL
|
|
#define ROLE_NEUTRAL AM_NEUTRAL
|
|
#define ROLE_CHAOTIC AM_CHAOTIC
|
|
|
|
/*** Attributes (from attrib.c and exper.c) ***/
|
|
xchar attrbase[A_MAX]; /* lowest initial attributes */
|
|
xchar attrdist[A_MAX]; /* distribution of initial attributes */
|
|
struct RoleAdvance hpadv; /* hit point advancement */
|
|
struct RoleAdvance enadv; /* energy advancement */
|
|
xchar xlev; /* cutoff experience level */
|
|
xchar initrecord; /* initial alignment record */
|
|
|
|
/*** Spell statistics (from spell.c) ***/
|
|
int spelbase; /* base spellcasting penalty */
|
|
int spelheal; /* penalty (-bonus) for healing spells */
|
|
int spelshld; /* penalty for wearing any shield */
|
|
int spelarmr; /* penalty for wearing metal armour */
|
|
int spelstat; /* which stat (A_) is used */
|
|
int spelspec; /* spell (SPE_) the class excels at */
|
|
int spelsbon; /* penalty (-bonus) for that spell */
|
|
|
|
/*** Properties in variable-length arrays ***/
|
|
/* intrinsics (see attrib.c) */
|
|
/* initial inventory (see u_init.c) */
|
|
/* skills (see u_init.c) */
|
|
|
|
/*** Don't forget to add... ***/
|
|
/* quest leader, guardians, nemesis (monst.c) */
|
|
/* quest artifact (artilist.h) */
|
|
/* quest dungeon definition (dat/Xyz.dat) */
|
|
/* quest text (dat/quest.txt) */
|
|
/* dictionary entries (dat/data.bas) */
|
|
};
|
|
|
|
extern struct Role roles[]; /* table of available roles */
|
|
extern struct Role urole;
|
|
#define Role_if(X) (urole.malenum == (X))
|
|
#define Pantheon_if(X) (flags.racial_pantheon != 0 ? flags.racial_pantheon == (X) : roles[flags.pantheon].malenum == (X))
|
|
#define God_if(X) (u.ualign.god == (X))
|
|
#define Holiness_if(X) (gholiness(u.ualign.god) == (X))
|
|
#define Role_switch (urole.malenum)
|
|
/* also used to see if you're allowed to eat cats and dogs */
|
|
#define CANNIBAL_ALLOWED() (Role_if(PM_CAVEMAN) || Race_if(PM_ORC) || \
|
|
Race_if(PM_VAMPIRE))
|
|
|
|
|
|
/* used during initialization for race, gender, and alignment
|
|
as well as for character class */
|
|
#define ROLE_NONE (-1)
|
|
#define ROLE_RANDOM (-2)
|
|
|
|
struct mask_properties {
|
|
int msklevel;
|
|
int mskmonnum;
|
|
int mskrolenum;
|
|
Bitfield(mskfemale,1);
|
|
struct attribs mskacurr,
|
|
mskaexe,
|
|
mskamax;
|
|
align mskalign;
|
|
schar mskluck;
|
|
int mskhp,mskhpmax;
|
|
int msken,mskenmax;
|
|
long mskexp, mskrexp;
|
|
int mskweapon_slots; /* unused skill slots */
|
|
int mskskills_advanced; /* # of advances made so far */
|
|
xchar mksskill_record[P_SKILL_LIMIT]; /* skill advancements */
|
|
struct skills mask_skills[P_NUM_SKILLS];
|
|
};
|
|
|
|
struct old_lev{
|
|
struct d_level uz;
|
|
xchar ux;
|
|
xchar uy;
|
|
};
|
|
|
|
/*** Unified structure specifying race information ***/
|
|
|
|
struct Race {
|
|
/*** Strings that name various things ***/
|
|
const char *noun; /* noun ("human", "elf") */
|
|
const char *adj; /* adjective ("human", "elven") */
|
|
const char *coll; /* collective ("humanity", "elvenkind") */
|
|
const char *filecode; /* code for filenames */
|
|
struct RoleName individual; /* individual as a noun ("man", "elf") */
|
|
|
|
/*** Indices of important monsters and objects ***/
|
|
short malenum, /* PM_ as a male monster */
|
|
femalenum, /* ...or as a female (NON_PM == same) */
|
|
mummynum, /* PM_ as a mummy */
|
|
zombienum; /* PM_ as a zombie */
|
|
|
|
/*** Bitmasks ***/
|
|
short allow; /* bit mask of allowed variations */
|
|
long selfmask, /* your own race's bit mask */
|
|
lovemask, /* bit mask of always peaceful */
|
|
hatemask; /* bit mask of always hostile */
|
|
|
|
/*** Attributes ***/
|
|
xchar attrmin[A_MAX]; /* minimum allowable attribute */
|
|
xchar attrmax[A_MAX]; /* maximum allowable attribute */
|
|
struct RoleAdvance hpadv; /* hit point advancement */
|
|
struct RoleAdvance enadv; /* energy advancement */
|
|
int nv_range; /* night vision range */
|
|
#define NO_NIGHTVISION 0
|
|
#define NORMALNIGHTVIS 1
|
|
#define NIGHTVISION2 2
|
|
#define NIGHTVISION3 3
|
|
|
|
int spelspec; /* spell (SPE_) the species excels at */
|
|
int spelsbon; /* penalty (-bonus) for that spell */
|
|
/*** Properties in variable-length arrays ***/
|
|
/* intrinsics (see attrib.c) */
|
|
|
|
/*** Don't forget to add... ***/
|
|
/* quest leader, guardians, nemesis (monst.c) */
|
|
/* quest dungeon definition (dat/Xyz.dat) */
|
|
/* quest text (dat/quest.txt) */
|
|
/* dictionary entries (dat/data.bas) */
|
|
};
|
|
|
|
extern const struct Race races[]; /* Table of available races */
|
|
extern struct Race urace;
|
|
#define Race_if(X) (urace.malenum == (X))
|
|
#define Race_switch (urace.malenum)
|
|
#define youracedata (maybe_polyd(youmonst.data, &mons[urace.malenum]))
|
|
#define Humanoid_half_dragon(role) (Role_if(PM_MADMAN) || (Role_if(PM_NOBLEMAN) && flags.initgend))
|
|
|
|
/*** Unified structure specifying gender information ***/
|
|
struct Gender {
|
|
const char *adj; /* male/female/neuter */
|
|
const char *he; /* he/she/it */
|
|
const char *him; /* him/her/it */
|
|
const char *his; /* his/her/its */
|
|
const char *filecode; /* file code */
|
|
short allow; /* equivalent ROLE_ mask */
|
|
};
|
|
#define ROLE_GENDERS 2 /* number of permitted player genders */
|
|
/* increment to 3 if you allow neuter roles */
|
|
|
|
extern const struct Gender genders[]; /* table of available genders */
|
|
#define uhe() (genders[flags.female ? 1 : 0].he)
|
|
#define uhim() (genders[flags.female ? 1 : 0].him)
|
|
#define uhis() (genders[flags.female ? 1 : 0].his)
|
|
#define mhe(mtmp) (genders[pronoun_gender(mtmp)].he)
|
|
#define mhim(mtmp) (genders[pronoun_gender(mtmp)].him)
|
|
#define mhis(mtmp) (genders[pronoun_gender(mtmp)].his)
|
|
|
|
|
|
/*** Unified structure specifying alignment information ***/
|
|
struct Align {
|
|
const char *noun; /* law/balance/chaos */
|
|
const char *adj; /* lawful/neutral/chaotic */
|
|
const char *filecode; /* file code */
|
|
short allow; /* equivalent ROLE_ mask */
|
|
aligntyp value; /* equivalent A_ value */
|
|
};
|
|
#define ROLE_ALIGNS 3 /* number of permitted player alignments */
|
|
|
|
extern const struct Align aligns[]; /* table of available alignments */
|
|
|
|
struct Species {
|
|
const char *name;
|
|
int value;
|
|
int type;
|
|
};
|
|
|
|
extern const struct Species species[]; /* table of available species */
|
|
|
|
#define current_species_name() (uclockwork ? default_material_name(u.clk_material, FALSE) : species[flags.initspecies].name)
|
|
#define base_species_name() (Race_if(PM_CLOCKWORK_AUTOMATON) ? default_material_name(u.clk_material, FALSE) : species[flags.initspecies].name)
|
|
|
|
#define ROLE_SPECIES 36 /* number of permitted player species */
|
|
#define NONE_SPECIES 0
|
|
#define ENT_SPECIES 1
|
|
#define DRAGON_SPECIES 2
|
|
#define CLK_SPECIES 3
|
|
|
|
/*** Information about the player ***/
|
|
struct you {
|
|
xchar ux, uy;
|
|
schar dx, dy, dz; /* direction of move (or zap or ... ) */
|
|
schar di; /* direction of FF */
|
|
xchar tx, ty; /* destination of travel */
|
|
xchar itx, ity; /* intermediary travel destination */
|
|
xchar ux0, uy0; /* initial position FF */
|
|
d_level uz, uz0; /* your level on this and the previous turn */
|
|
d_level utolev; /* level monster teleported you to, or uz */
|
|
uchar utotype; /* bitmask of goto_level() flags for utolev */
|
|
boolean umoved; /* changed map location (post-move) */
|
|
boolean uattked; /* attacked a target (post-move) */
|
|
boolean unull; /* passed a turn (post-move) */
|
|
coord prev_dir; /* previous dirction pressed (for monk moves) */
|
|
int last_str_turn; /* 0: none, 1: half turn, 2: full turn */
|
|
/* +: turn right, -: turn left */
|
|
int ulevel, ulevel_real; /* 1 to MAXULEV */
|
|
int ulevelmax, ulevelmax_real;
|
|
unsigned utrap; /* trap timeout */
|
|
unsigned utraptype; /* defined if utrap nonzero */
|
|
#define TT_BEARTRAP 0
|
|
#define TT_PIT 1
|
|
#define TT_WEB 2
|
|
#define TT_LAVA 3
|
|
#define TT_INFLOOR 4
|
|
#define TT_FLESH_HOOK 5
|
|
char urooms[5]; /* rooms (roomno + 3) occupied now */
|
|
char urooms0[5]; /* ditto, for previous position */
|
|
char uentered[5]; /* rooms (roomno + 3) entered this turn */
|
|
char ushops[5]; /* shop rooms (roomno + 3) occupied now */
|
|
char ushops0[5]; /* ditto, for previous position */
|
|
char ushops_entered[5]; /* ditto, shops entered this turn */
|
|
char ushops_left[5]; /* ditto, shops exited this turn */
|
|
|
|
int uhunger; /* refd only in eat.c and shk.c */
|
|
int uhungermax;/* */
|
|
|
|
struct old_lev old_lev; /*used for etheraloid phasing in/out*/
|
|
#define YouHunger (Race_if(PM_INCANTIFIER) ? u.uen : u.uhunger)
|
|
#define INC_BASE_NUTRITION 25
|
|
#define DEFAULT_HMAX 2000
|
|
unsigned uhs; /* hunger state - see eat.c */
|
|
|
|
#define FFORM_LISTSIZE (LAST_FFORM/32 + 1)
|
|
unsigned long int fightingForm[FFORM_LISTSIZE];/* special properties */
|
|
int ueldritch_style;
|
|
Bitfield(uavoid_passives,1);
|
|
Bitfield(uavoid_msplcast,1);
|
|
Bitfield(uavoid_grabattk,1);
|
|
Bitfield(uavoid_englattk,1);
|
|
Bitfield(uavoid_unsafetouch,1);
|
|
int umystic; /*Monk mystic attacks active*/
|
|
#define monk_style_active(style) (u.umystic & (1 << (style-1)))
|
|
#define toggle_monk_style(style) (u.umystic = u.umystic ^ (1 << (style-1)))
|
|
|
|
#define DIVE_KICK 1
|
|
#define AURA_BOLT 2
|
|
#define BIRD_KICK 3
|
|
#define METODRIVE 4
|
|
#define PUMMEL 5
|
|
// long laststruck;
|
|
long lastmoved;
|
|
long lastcast;
|
|
|
|
boolean ukinghill; /* records if you are carying the pirate treasure (and are therefor king of the hill) */
|
|
int protean; /* counter for the auto-polypiling power of the pirate treasure*/
|
|
int uhouse; /* drow house info */
|
|
int ent_species; /*species of ent tree*/
|
|
#define ENT_ASH 0
|
|
#define ENT_BEECH 1
|
|
#define ENT_BIRCH 2
|
|
#define ENT_BLUEGUM 3
|
|
#define ENT_CEDAR 4
|
|
#define ENT_CHESTNUT 5
|
|
#define ENT_CYPRESS 6
|
|
#define ENT_DOGWOOD 7
|
|
#define ENT_ELDER 8
|
|
#define ENT_ELM 9
|
|
#define ENT_FIR 10
|
|
#define ENT_GINKGO 11
|
|
#define ENT_LARCH 12
|
|
#define ENT_LOCUST 13
|
|
#define ENT_MAGNOLIA 14
|
|
#define ENT_MAPLE 15
|
|
#define ENT_MIMOSA 16
|
|
#define ENT_METHUSELAH 17
|
|
#define ENT_OAK 18
|
|
#define ENT_POPLAR 19
|
|
#define ENT_REDWOOD 20
|
|
#define ENT_SPRUCE 21
|
|
#define ENT_WILLOW 22
|
|
#define ENT_YEW 23
|
|
#define ENT_MAX_SPECIES ENT_YEW
|
|
int start_house; /* starting drow house info */
|
|
int inherited; /* what you inherited at the start, if anything */
|
|
struct prop uprops[LAST_PROP+1];
|
|
int rift_count;
|
|
int vortex_count;
|
|
int miso_count;
|
|
|
|
unsigned umconf;
|
|
char usick_cause[PL_PSIZ+20]; /* sizeof "unicorn horn named "+1 */
|
|
Bitfield(usick_type,2);
|
|
#define SICK_VOMITABLE 0x01
|
|
#define SICK_NONVOMITABLE 0x02
|
|
#define SICK_ALL 0x03
|
|
|
|
/* This can never be more than MAX_RANGE (vision.h). */
|
|
int nv_range; /* current night vision range */
|
|
|
|
/*
|
|
* These variables are valid globally only when punished and blind.
|
|
*/
|
|
#define BC_BALL 0x01 /* bit mask for ball in 'bc_felt' below */
|
|
#define BC_CHAIN 0x02 /* bit mask for chain in 'bc_felt' below */
|
|
int bglyph; /* glyph under the ball */
|
|
int cglyph; /* glyph under the chain */
|
|
int bc_order; /* ball & chain order [see bc_order() in ball.c] */
|
|
int bc_felt; /* mask for ball/chain being felt */
|
|
|
|
int umonster; /* hero's role's monster num */
|
|
int umonnum; /* current monster number (either your role's or a polyform) */
|
|
|
|
int mh, mhmax, mhrolled, mtimedone; /* for polymorph-self */
|
|
#define MATTK_DSCALE 1
|
|
#define MATTK_BREATH 2
|
|
#define MATTK_HBREATH 3
|
|
#define MATTK_SPIT 4
|
|
#define MATTK_MAGIC 5
|
|
#define MATTK_REMV 6
|
|
#define MATTK_GAZE 7
|
|
#define MATTK_SUMM 8
|
|
#define MATTK_WEBS 9
|
|
#define MATTK_HIDE 10
|
|
#define MATTK_MIND 11
|
|
#define MATTK_CLOCK 12
|
|
#define MATTK_DARK 13
|
|
#define MATTK_VAMP 14
|
|
#define MATTK_REPL 15
|
|
#define MATTK_UHORN 16
|
|
#define MATTK_SHRIEK 17
|
|
#define MATTK_SCREAM 18
|
|
#define MATTK_HOLE 19
|
|
#define MATTK_REACH 20
|
|
#define MATTK_DROID 21
|
|
#define MATTK_TNKR 22
|
|
#define MATTK_U_SPELLS 23
|
|
#define MATTK_U_SPIRITS 24
|
|
#define MATTK_U_WORD 25
|
|
#define MATTK_U_TURN_UNDEAD 26 /* MATTK_U_TURN would be amusing, but even more confusing */
|
|
#define MATTK_U_STYLE 27
|
|
#define MATTK_U_MONST 28
|
|
#define MATTK_U_ELMENTAL 29
|
|
#define MATTK_WHISPER 30
|
|
#define MATTK_TELEK 31
|
|
#define MATTK_CRAZE 32
|
|
#define MATTK_PULSE 33
|
|
#define MATTK_LAVA 34
|
|
#define MATTK_PHASE_OUT 35
|
|
#define MATTK_PHASE_IN 36
|
|
#define MATTK_YUKI 37
|
|
#define MATTK_KI 38
|
|
#define MATTK_INK 39
|
|
|
|
|
|
|
|
#define ACU_RETURN_LVL 20
|
|
#define ACU_TELEK_LVL 15
|
|
#define ACU_REFL_LVL 14
|
|
#define ACU_CRAZE_LVL 12
|
|
#define ACU_PULSE_LVL 4
|
|
|
|
struct attribs macurr, /* for monster attribs */
|
|
mamax; /* for monster attribs */
|
|
int ulycn; /* lycanthrope type */
|
|
short ucspeed;
|
|
#define HIGH_CLOCKSPEED 1
|
|
#define NORM_CLOCKSPEED 2
|
|
#define SLOW_CLOCKSPEED 3
|
|
long clockworkUpgrades;
|
|
int uboiler;
|
|
#define MAX_BOILER 2000
|
|
int ustove;
|
|
int utemp;
|
|
#define WARM 1
|
|
#define HOT 2
|
|
#define BURNING_HOT 5
|
|
#define MELTING 10
|
|
#define MELTED 20
|
|
/*Note: because clockwork_eat_menu uses ints instead of longs, all upgrades that change how you eat must fit in an int.*/
|
|
#define OIL_STOVE 0x000001L
|
|
#define WOOD_STOVE 0x000002L
|
|
#define FAST_SWITCH 0x000004L
|
|
#define EFFICIENT_SWITCH 0x000008L
|
|
#define ARMOR_PLATING 0x000010L
|
|
#define PHASE_ENGINE 0x000020L
|
|
#define MAGIC_FURNACE 0x000040L
|
|
#define HELLFIRE_FURNACE 0x000080L
|
|
#define SCRAP_MAW 0x000100L
|
|
#define HIGH_TENSION 0x000200L
|
|
#define HEAVY_BLASTER 0x000400L
|
|
#define SECOND_BLASTER 0x000800L
|
|
|
|
//define HIGH_CLOCKSPEED 1
|
|
//define NORM_CLOCKSPEED 2
|
|
//define SLOW_CLOCKSPEED 3
|
|
#define RECHARGER 4
|
|
#define ANDROID_COMBO 5
|
|
//define PHASE_ENGINE 32
|
|
//define HEAVY_BLASTER 1024
|
|
|
|
int slowclock;
|
|
|
|
unsigned ucreamed;
|
|
unsigned uswldtim; /* time you have been swallowed */
|
|
|
|
Bitfield(uswallow,1); /* true if swallowed */
|
|
Bitfield(uinwater,1); /* if you're currently in water */
|
|
Bitfield(usubwater,1); /* if you're currently underwater */
|
|
Bitfield(uundetected,1); /* if you're a hiding monster/piercer */
|
|
Bitfield(mfemale,1); /* saved human value of flags.female */
|
|
Bitfield(uinvulnerable,1); /* you're invulnerable (praying) */
|
|
Bitfield(uburied,1); /* you're buried */
|
|
Bitfield(uedibility,1); /* blessed food detection; sense unsafe food */
|
|
/* 0 free bits? (doesn't add up?) */
|
|
Bitfield(shambin,2); /* Whether the shambling horror has normal innards, undifferentiated innards, or solid/nonexistent innards */
|
|
Bitfield(stumbin,2); /* Whether the stumbling horror has normal innards, undifferentiated innards, or solid/nonexistent innards */
|
|
Bitfield(wandein,2); /* Whether the wandering horror has normal innards, undifferentiated innards, or solid/nonexistent innards */
|
|
Bitfield(umartial,1); /* Do you know kung fu? */
|
|
Bitfield(umaniac,1); /* Swings wildly */
|
|
Bitfield(phasengn,1); /* clockwork phase engine */
|
|
Bitfield(umummyrot,1); /* you have mummy rot */
|
|
Bitfield(veil,1); /* you have not peaked behind the veil */
|
|
#define lift_veil() if(u.veil){\
|
|
u.veil = FALSE;\
|
|
change_uinsight(1);\
|
|
}
|
|
Bitfield(render_thought,1); /* you got a thought from a veil-render */
|
|
Bitfield(detestation_ritual,7); /* progress in detestation ritual */
|
|
#define NO_RITUAL 0
|
|
#define RITUAL_STARTED 0x01
|
|
#define RITUAL_CHAOS 0x02
|
|
#define RITUAL_NEUTRAL 0x04
|
|
#define RITUAL_LAW 0x08
|
|
#define RITUAL_HI_CHAOS 0x10
|
|
#define RITUAL_HI_NEUTRAL 0x20
|
|
#define RITUAL_HI_LAW 0x40
|
|
#define RITUAL_DONE (RITUAL_CHAOS|RITUAL_NEUTRAL|RITUAL_LAW)
|
|
#define HI_RITUAL_DONE (RITUAL_HI_CHAOS|RITUAL_HI_NEUTRAL|RITUAL_HI_LAW)
|
|
Bitfield(peaceful_pets,1); /* pets don't attack peaceful monsters */
|
|
Bitfield(uiearepairs,1); /* Knows how to repair Imperial Elven Armor */
|
|
/* 11 free bits */
|
|
|
|
int oonaenergy; /* Record the energy type used by Oona in your game. (Worm that Walks switches?) */
|
|
int brand_otyp; /* Record the otyp of Fire and Frost Brand in this game */
|
|
int ring_wishes; /* Record the how many wishes were/should be in the castle ring */
|
|
unsigned udg_cnt; /* timer for wizard intervention WRONG?:how long you have been demigod */
|
|
unsigned ill_cnt; /* timer for illurien intervention */
|
|
unsigned yel_cnt; /* timer for stranger intervention */
|
|
struct u_event uevent; /* certain events have happened */
|
|
struct u_have uhave; /* you're carrying special objects */
|
|
struct u_conduct uconduct; /* KMH, conduct */
|
|
struct attribs acurr, /* your current attributes (eg. str)*/
|
|
aexe, /* for gain/loss via "exercise" */
|
|
abon, /* your bonus attributes (eg. str) */
|
|
amax, /* your max attributes (eg. str) */
|
|
atemp, /* used for temporary loss/gain */
|
|
atime; /* used for loss/gain countdown */
|
|
long exerchkturn; /* Stat Excercise: What turn is the next exerchk? */
|
|
align ualign; /* character alignment */
|
|
#define UGOD_CONVERT 2
|
|
#define UGOD_ORIGINAL 1
|
|
#define UGOD_CURRENT 0
|
|
int ugodbase[UGOD_CONVERT];
|
|
schar uluck, moreluck; /* luck and luck bonus */
|
|
int luckturn;
|
|
#define Luck (u.uluck + u.moreluck)
|
|
#define LUCKADD 3 /* added value when carrying luck stone */
|
|
#define DIELUCK 4 /* subtracted from current luck on final death */
|
|
#define LUCKMAX 10 /* on moonlit nights 11 */
|
|
#define LUCKMIN (-10)
|
|
schar uhitinc; /* bonus to-hit chance */
|
|
schar udaminc; /* bonus damage */
|
|
int ucarinc; /* bonus carrying capacity */
|
|
schar uacinc; /* bonus AC (not spell/divine) */
|
|
schar uac;
|
|
schar udr;
|
|
uchar uspellprot; /* protection by SPE_PROTECTION */
|
|
uchar udrunken; /* drunkeness level (based on total number of potions of booze drunk) */
|
|
uchar usptime; /* #moves until uspellprot-- */
|
|
uchar uspmtime; /* #moves between uspellprot-- */
|
|
uchar sowdisc; /* sowing discord (spirit special attack) */
|
|
unsigned long long int spells_maintained;
|
|
int maintained_en_debt;
|
|
int quivered_spell;
|
|
int uhp, uhpmax, uhprolled, uhpmultiplier, uhpbonus, uhpmod;
|
|
int uen, uenmax, uenrolled, uenmultiplier, uenbonus; /* magical energy - M. Stephenson */
|
|
/*"Real" numbers for a WtWalk's non-mask-based HP*/
|
|
int uhp_real, uhpmax_real, uhprolled_real, uhpbonus_real, uhpmod_real;
|
|
int uen_real, uenmax_real, uenrolled_real, uenbonus_real;
|
|
int ugifts; /* number of artifacts bestowed */
|
|
int uartisval; /* approximate strength of artifacts bestowed and wished for */
|
|
int ucultsval; /* approximate strength of wished artifacts and gifts bestowed */
|
|
int ublessed, ublesscnt; /* blessing/duration from #pray */
|
|
long usaccredit; /* credit towards next gift */
|
|
boolean cult_atten[MAX_CULTS]; /* for having started with a cult */
|
|
#define shubbie_atten cult_atten[GOAT_CULT]
|
|
#define silver_atten cult_atten[FLAME_CULT]
|
|
#define yog_sothoth_atten cult_atten[SOTH_CULT]
|
|
#define good_neighbor_atten cult_atten[RAT_CULT]
|
|
long ucultcredit[MAX_CULTS]; /* for doing deeds for the cult, spendable */
|
|
#define shubbie_credit ucultcredit[GOAT_CULT]
|
|
#define silver_credit ucultcredit[FLAME_CULT]
|
|
#define yog_sothoth_credit ucultcredit[SOTH_CULT]
|
|
#define good_neighbor_credit ucultcredit[RAT_CULT]
|
|
long ucultcredit_total[MAX_CULTS]; /* total credit accumulated for the cult */
|
|
#define shubbie_devotion ucultcredit_total[GOAT_CULT]
|
|
#define silver_devotion ucultcredit_total[FLAME_CULT]
|
|
#define yog_sothoth_devotion ucultcredit_total[SOTH_CULT]
|
|
#define good_neighbor_devotion ucultcredit_total[RAT_CULT]
|
|
long ucultmutagen[MAX_CULTS]; /* total mutagen taken from the cult */
|
|
#define shubbie_mutagen ucultmutagen[GOAT_CULT]
|
|
#define yog_sothoth_mutagen ucultmutagen[SOTH_CULT]
|
|
long ucultmutations[MAX_CULTS]; /* total mutations taken from the cult */
|
|
#define shubbie_mutations ucultmutations[GOAT_CULT]
|
|
#define yog_sothoth_mutations ucultmutations[SOTH_CULT]
|
|
d_level silver_flame_z;
|
|
xchar s_f_x, s_f_y;
|
|
long lastprayed;
|
|
long lastslept;
|
|
long nextsleep;
|
|
long role_technique_turn;
|
|
#define whisperturn role_technique_turn
|
|
#define kiaiturn role_technique_turn
|
|
int regen_blocked;
|
|
uchar lastprayresult, reconciled;
|
|
#define PRAY_NONE 0
|
|
#define PRAY_GOOD 1
|
|
#define PRAY_BAD 2
|
|
#define PRAY_GIFT 3
|
|
#define PRAY_ANGER 4
|
|
#define PRAY_CONV 5
|
|
#define PRAY_INPROG 6
|
|
#define PRAY_IGNORED 7
|
|
|
|
#define REC_NONE 0
|
|
#define REC_REC 1
|
|
#define REC_MOL 2
|
|
|
|
#ifndef GOLDOBJ
|
|
long ugold, ugold0;
|
|
#else
|
|
long umoney0;
|
|
#endif
|
|
long uexp, urexp;
|
|
long ucleansed; /* to record moves when player was cleansed */
|
|
long usleep; /* sleeping; monstermove you last started */
|
|
long last_used_move; /* Partial action: last used turn */
|
|
int last_used_movement; /* Partial action: last used turn segment */
|
|
int ustdy; /* to record extra damage to be dealt due to having been studied */
|
|
uchar ubranch; /* record which branch the village wizard opened up for you*/
|
|
#define ICE_CAVES 1
|
|
#define BLACK_FOREST 2
|
|
#define GNOMISH_MINES 3
|
|
#define DISMAL_SWAMP 4
|
|
#define ARCHIPELAGO 5
|
|
int uencouraged;/* to record the buff from tame encouragement songs */
|
|
int uentangled_otyp; /* to record the otyp of an item entangling you */
|
|
long uentangled_oid; /* to record the oid of the item entangling you */
|
|
long int spawnedGold; /* to record total amount of gold spawned in a game */
|
|
int utats; /*Used to store Fell's tattoo information*/
|
|
#define TAT_HOURGLASS 0x0001
|
|
#define TAT_FALCHION 0x0002
|
|
#define TAT_KESTREL 0x0004
|
|
#define TAT_BULWARK 0x0008
|
|
#define TAT_FOUNTAIN 0x0010
|
|
#define TAT_CROESUS 0x0020
|
|
#define TAT_UNKNOWN 0x0040
|
|
#define TAT_WILLOW 0x0080
|
|
#define TAT_HAMMER 0x0100
|
|
#define TAT_SPEARHEAD 0x0200
|
|
#define TAT_CRYSTAL_ORB 0x0400
|
|
#define TAT_HYPHEN 0x0800
|
|
#define TAT_FLAMING_WHIP 0x1000
|
|
#define NUM_TATS 13
|
|
int usanity; /* to record level of sanity */
|
|
unsigned long long int umadness; /* to afflictions */
|
|
#define MAD_DELUSIONS 0x0000000000000001L
|
|
#define MAD_REAL_DELUSIONS 0x0000000000000002L
|
|
#define MAD_SANCTITY 0x0000000000000004L
|
|
#define MAD_GLUTTONY 0x0000000000000008L
|
|
#define MAD_SPORES 0x0000000000000010L
|
|
#define MAD_FRIGOPHOBIA 0x0000000000000020L
|
|
#define MAD_CANNIBALISM 0x0000000000000040L
|
|
#define MAD_RAGE 0x0000000000000080L
|
|
#define MAD_ARGENT_SHEEN 0x0000000000000100L
|
|
#define MAD_SUICIDAL 0x0000000000000200L
|
|
#define MAD_NUDIST 0x0000000000000400L
|
|
#define MAD_OPHIDIOPHOBIA 0x0000000000000800L
|
|
#define MAD_ARACHNOPHOBIA 0x0000000000001000L
|
|
#define MAD_ENTOMOPHOBIA 0x0000000000002000L
|
|
#define MAD_THALASSOPHOBIA 0x0000000000004000L
|
|
#define MAD_PARANOIA 0x0000000000008000L
|
|
#define MAD_TALONS 0x0000000000010000L
|
|
#define MAD_COLD_NIGHT 0x0000000000020000L
|
|
#define MAD_OVERLORD 0x0000000000040000L
|
|
#define MAD_DREAMS 0x0000000000080000L
|
|
#define MAD_NON_EUCLID 0x0000000000100000L
|
|
#define MAD_SPIRAL 0x0000000000200000L
|
|
#define MAD_HELMINTHOPHOBIA 0x0000000000400000L
|
|
#define MAD_GOAT_RIDDEN 0x0000000000800000L
|
|
#define MAD_FRENZY 0x0000000001000000L
|
|
#define MAD_THOUSAND_MASKS 0x0000000002000000L
|
|
#define MAD_FORMICATION 0x0000000004000000L
|
|
#define MAD_HOST 0x0000000008000000L
|
|
#define MAD_SCIAPHILIA 0x0000000010000000L
|
|
#define MAD_FORGETFUL 0x0000000020000000L
|
|
#define MAD_TOO_BIG 0x0000000040000000L
|
|
#define MAD_APOSTASY 0x0000000080000000L
|
|
#define MAD_ROTTING 0x0000000100000000L
|
|
#define MAD_REACHER 0x0000000200000000L
|
|
#define MAD_SCORPIONS 0x0000000400000000L
|
|
#define MAD_VERMIN 0x0000000800000000L
|
|
#define LAST_MADNESS MAD_SCORPIONS
|
|
int uinsight; /* to record level of insight */
|
|
/*Insight rate calculation: 40: "high insight" 300: "Approximate per-turn WoYendor intervention rate" 5: "total number of harmful effects" */
|
|
#define INSIGHT_RATE (40*300*5)
|
|
#define COA_PROB (max(1, 10000*pow(.95,(Role_if(PM_ANACHRONOUNBINDER)?max(0,u.uinsight-100):u.uinsight))))
|
|
uchar wimage; /* to record if you have the image of a Weeping Angel in your mind */
|
|
int umorgul; /* to record the number of morgul wounds */
|
|
int utaneggs; /* tannin eggs */
|
|
int udisks; /* to record how many aphanactonan disks you've read */
|
|
int uboln; /* to record how many spirits you've gained from the boln */
|
|
int uinvault;
|
|
int clk_material; /* clockwork material */
|
|
struct monst *ustuck;
|
|
boolean petattacked;
|
|
boolean pethped;
|
|
struct monst *usteed;
|
|
long ugallop;
|
|
int urideturns;
|
|
int umortality; /* how many times you died */
|
|
int ugrave_arise; /* you die and become something aside from a ghost */
|
|
time_t ubirthday; /* real world time when game began */
|
|
|
|
int weapon_slots; /* unused skill slots */
|
|
int skills_advanced; /* # of advances made so far */
|
|
xchar skill_record[P_SKILL_LIMIT]; /* skill advancements */
|
|
struct skills weapon_skills[P_NUM_SKILLS];
|
|
boolean twoweap; /* KMH -- Using two-weapon combat */
|
|
int divetimer; /* how long you can stay under water */
|
|
|
|
int role_variant; /*Records what variant of your role you are.*/
|
|
|
|
int umabil; /*Monk mystic attacks active*/
|
|
#define SURGE_PUNCH 0x0001
|
|
#define FORCE_PUNCH 0x0002
|
|
#define CHI_HEALING 0x0004
|
|
#define SPIRIT_PUNCH 0x0008
|
|
#define FLICKER_PUNCH 0x0010
|
|
#define ABSORPTIVE_PUNCH 0x0020
|
|
#define ENERGY_FORM 0x0040
|
|
|
|
#define SURGE_PUNCH_LVL 0
|
|
#define FORCE_PUNCH_LVL 4
|
|
#define CHI_HEALING_LVL 6
|
|
#define SPIRIT_PUNCH_LVL 10
|
|
#define FLICKER_PUNCH_LVL 8
|
|
#define ABSORPTIVE_PUNCH_LVL 2
|
|
long wardsknown; /* known wards */
|
|
#define WARD_ELBERETH (0x1L<<0)
|
|
#define WARD_HEPTAGRAM (0x1L<<1)
|
|
#define WARD_GORGONEION (0x1L<<2)
|
|
#define WARD_ACHERON (0x1L<<3)
|
|
#define WARD_PENTAGRAM (0x1L<<4)
|
|
#define WARD_HEXAGRAM (0x1L<<5)
|
|
#define WARD_HAMSA (0x1L<<6)
|
|
#define WARD_ELDER_SIGN (0x1L<<7)
|
|
#define WARD_EYE (0x1L<<8)
|
|
#define WARD_QUEEN (0x1L<<9)
|
|
#define WARD_CAT_LORD (0x1L<<10)
|
|
#define WARD_GARUDA (0x1L<<11)
|
|
#define WARD_CTHUGHA (0x1L<<12)
|
|
#define WARD_ITHAQUA (0x1L<<13)
|
|
#define WARD_KARAKAL (0x1L<<14)
|
|
#define WARD_YELLOW (0x1L<<15)
|
|
#define WARD_TRANSIT (0x1L<<16)
|
|
#define WARD_STABILIZE (0x1L<<17)
|
|
#define WARD_TOUSTEFNA (0x1L<<18)
|
|
#define WARD_DREPRUN (0x1L<<19)
|
|
#define WARD_OTTASTAFUR (0x1L<<20)
|
|
#define WARD_KAUPALOKI (0x1L<<21)
|
|
#define WARD_VEIOISTAFUR (0x1L<<22)
|
|
#define WARD_THJOFASTAFUR (0x1L<<23)
|
|
#define NUM_WARDS 23
|
|
|
|
|
|
int sealorder[31];
|
|
long sealsKnown;
|
|
long specialSealsKnown;
|
|
#define SEAL_AHAZU 0x0000001L
|
|
#define SEAL_AMON 0x0000002L
|
|
#define SEAL_ANDREALPHUS 0x0000004L
|
|
#define SEAL_ANDROMALIUS 0x0000008L
|
|
#define SEAL_ASTAROTH 0x0000010L
|
|
#define SEAL_BALAM 0x0000020L
|
|
#define SEAL_BERITH 0x0000040L
|
|
#define SEAL_BUER 0x0000080L
|
|
#define SEAL_CHUPOCLOPS 0x0000100L
|
|
#define SEAL_DANTALION 0x0000200L
|
|
#define SEAL_ECHIDNA 0x0000400L
|
|
#define SEAL_EDEN 0x0000800L
|
|
long edenshield;
|
|
#define SEAL_ENKI 0x0001000L
|
|
#define SEAL_EURYNOME 0x0002000L
|
|
int eurycounts;
|
|
#define SEAL_EVE 0x0004000L
|
|
#define SEAL_FAFNIR 0x0008000L
|
|
#define SEAL_HUGINN_MUNINN 0x0010000L
|
|
#define SEAL_IRIS 0x0020000L
|
|
long irisAttack;
|
|
#define SEAL_JACK 0x0040000L
|
|
#define SEAL_MALPHAS 0x0080000L
|
|
#define SEAL_MARIONETTE 0x0100000L
|
|
#define SEAL_MOTHER 0x0200000L
|
|
#define SEAL_NABERIUS 0x0400000L
|
|
#define SEAL_ORTHOS 0x0800000L
|
|
int orthocounts;
|
|
#define SEAL_OSE 0x1000000L
|
|
char osepro[128]; /*Lots of extra space*/
|
|
char osegen[128];
|
|
#define SEAL_OTIAX 0x2000000L
|
|
long otiaxAttack;
|
|
#define SEAL_PAIMON 0x4000000L
|
|
#define SEAL_SHIRO 0x8000000L
|
|
#define SEAL_SIMURGH 0x10000000L
|
|
#define SEAL_TENEBROUS 0x20000000L
|
|
#define SEAL_YMIR 0x40000000L
|
|
//Special flag for lookup tables, indicating that it is a quest spirit and should be treated as such
|
|
#define SEAL_SPECIAL 0x80000000L
|
|
|
|
//The remaining seals (Dahlver-Nar, Acererak, and the Numina) can't be learned in any way other than binder class features
|
|
#define SEAL_DAHLVER_NAR 0x00000001L
|
|
#define SEAL_ACERERAK 0x00000002L
|
|
#define SEAL_COUNCIL 0x00000004L
|
|
#define SEAL_COSMOS 0x00000008L
|
|
#define SEAL_LIVING_CRYSTAL 0x00000010L
|
|
#define SEAL_TWO_TREES 0x00000020L
|
|
#define SEAL_MISKA 0x00000040L
|
|
#define SEAL_NUDZIRATH 0x00000080L
|
|
#define SEAL_ALIGNMENT_THING 0x00000100L
|
|
#define SEAL_UNKNOWN_GOD 0x00000200L
|
|
#define SEAL_BLACK_WEB 0x00000400L
|
|
#define SEAL_YOG_SOTHOTH 0x00000800L
|
|
long yogAttack;
|
|
#define SEAL_NUMINA 0x40000000L
|
|
// long numina; //numina does not expire, and can be immediatly re-bound once 30th level is achived if the pact is broken.
|
|
|
|
int sealTimeout[NUMINA-FIRST_SEAL]; //turn on which spirit will be again eligible for binding.
|
|
|
|
long spiritSummons;
|
|
int sealCounts;
|
|
long sealsActive;
|
|
long sealsUsed;
|
|
long specialSealsActive;
|
|
long specialSealsUsed;
|
|
|
|
int wisSpirits, intSpirits;
|
|
|
|
#define GATE_SPIRITS 5
|
|
#define QUEST_SPIRIT 5
|
|
#define GPREM_SPIRIT 6
|
|
#define CROWN_SPIRIT 7
|
|
#define ALIGN_SPIRIT 8
|
|
#define OUTER_SPIRIT 9
|
|
#define NUM_BIND_SPRITS 10
|
|
//Spirits in order bound:
|
|
long spirit[NUM_BIND_SPRITS];
|
|
long spiritTineA,spiritTineB;
|
|
//Corresponding timeouts (turn on which binding expires):
|
|
long spiritT[NUM_BIND_SPRITS];
|
|
long spiritTineTA,spiritTineTB;
|
|
|
|
int spiritAC;
|
|
int spiritAttk;
|
|
|
|
#define PWR_ABDUCTION 0
|
|
#define PWR_FIRE_BREATH 1
|
|
#define PWR_TRANSDIMENSIONAL_RAY 2
|
|
#define PWR_TELEPORT 3
|
|
#define PWR_JESTER_S_MIRTH 4
|
|
#define PWR_THIEF_S_INSTINCTS 5
|
|
#define PWR_ASTAROTH_S_ASSEMBLY 6
|
|
#define PWR_ASTAROTH_S_SHARDS 7
|
|
#define PWR_ICY_GLARE 8
|
|
#define PWR_BALAM_S_ANOINTING 9
|
|
#define PWR_BLOOD_MERCENARY 10
|
|
#define PWR_SOW_DISCORD 11
|
|
#define PWR_GIFT_OF_HEALING 12
|
|
#define PWR_GIFT_OF_HEALTH 13
|
|
#define PWR_THROW_WEBBING 14
|
|
#define PWR_THOUGHT_TRAVEL 15
|
|
#define PWR_DREAD_OF_DANTALION 16
|
|
#define PWR_EARTH_SWALLOW 17
|
|
#define PWR_ECHIDNA_S_VENOM 18
|
|
#define PWR_SUCKLE_MONSTER 19
|
|
#define PWR_PURIFYING_BLAST 20
|
|
#define PWR_RECALL_TO_EDEN 21
|
|
#define PWR_STARGATE 22
|
|
#define PWR_WALKER_OF_THRESHOLDS 23
|
|
#define PWR_GEYSER 24
|
|
#define PWR_VENGANCE 25
|
|
#define PWR_SHAPE_THE_WIND 26
|
|
#define PWR_THORNS_AND_STONES 27
|
|
#define PWR_BARRAGE 28
|
|
#define PWR_BREATH_POISON 29
|
|
#define PWR_RUINOUS_STRIKE 30
|
|
#define PWR_RAVEN_S_TALONS 31
|
|
#define PWR_HORRID_WILTING 32
|
|
#define PWR_TURN_ANIMALS_AND_HUMANOIDS 33
|
|
#define PWR_REFILL_LANTERN 34
|
|
#define PWR_HELLFIRE 35
|
|
#define PWR_CALL_MURDER 36
|
|
#define PWR_ROOT_SHOUT 37
|
|
#define PWR_PULL_WIRES 38
|
|
#define PWR_DISGUSTED_GAZE 39
|
|
#define PWR_BLOODY_TOUNGE 40
|
|
#define PWR_SILVER_TOUNGE 41
|
|
#define PWR_EXHALATION_OF_THE_RIFT 42
|
|
#define PWR_QUERIENT_THOUGHTS 43
|
|
#define PWR_GREAT_LEAP 44
|
|
#define PWR_MASTER_OF_DOORWAYS 45
|
|
#define PWR_READ_SPELL 46
|
|
#define PWR_BOOK_TELEPATHY 47
|
|
#define PWR_UNITE_THE_EARTH_AND_SKY 48
|
|
#define PWR_HOOK_IN_THE_SKY 49
|
|
#define PWR_ENLIGHTENMENT 50
|
|
#define PWR_DAMNING_DARKNESS 51
|
|
#define PWR_TOUCH_OF_THE_VOID 52
|
|
#define PWR_ECHOS_OF_THE_LAST_WORD 53
|
|
#define PWR_POISON_GAZE 54
|
|
#define PWR_GAP_STEP 55
|
|
#define PWR_MOAN 56
|
|
#define PWR_SWALLOW_SOUL 57
|
|
#define PWR_EMBASSY_OF_ELEMENTS 58
|
|
#define PWR_SUMMON_MONSTER 59
|
|
#define PWR_PSEUDONATURAL_SURGE 60
|
|
#define PWR_SILVER_DEW 61
|
|
#define PWR_GOLDEN_DEW 62
|
|
#define PWR_MIRROR_SHATTER 63
|
|
#define PWR_MIRROR_WALK 64
|
|
#define PWR_FLOWING_FORMS 65
|
|
#define PWR_PHASE_STEP 66
|
|
#define PWR_BLACK_BOLT 67
|
|
#define PWR_WEAVE_BLACK_WEB 68
|
|
#define PWR_MAD_BURST 69
|
|
#define PWR_UNENDURABLE_MADNESS 70
|
|
#define PWR_CONTACT_YOG_SOTHOTH 71
|
|
#define PWR_IDENTIFY_INVENTORY 72
|
|
#define PWR_CLAIRVOYANCE 73
|
|
#define PWR_FIND_PATH 74
|
|
#define PWR_GNOSIS_PREMONITION 75
|
|
#define NUMBER_POWERS 76
|
|
|
|
int spiritPOrder[52]; //# of letters in alphabet, capital and lowercase
|
|
// char spiritPLetters[NUMBER_POWERS];
|
|
long spiritPColdowns[NUMBER_POWERS];
|
|
|
|
|
|
/* variable that keeps track of summoning in your vicinity.
|
|
Only allow 1 per turn, to help reduce summoning cascades. */
|
|
boolean summonMonster;
|
|
/* Variable that checks if the Wizard has increased the weight of the amulet */
|
|
boolean uleadamulet;
|
|
/*Deprecated (moved to art-instance variables?): Ugly extra artifact variables workaround. Spaghetti code alert!*/
|
|
char dracae_pets; /*How many pets have been incarnated by a dracae this game.*/
|
|
unsigned char puzzle_time; /*Time needed to solve the next step of a hyperborean dial puzzle.*/
|
|
unsigned char uhyperborean_steps; /*The most advanced step you've reached on a hyperborean dial puzzle.*/
|
|
int goldkamcount_tame; /*number of tame golden kamerel following you around*/
|
|
int voidChime;
|
|
long rangBell; /*Turn last rang bell of opening on*/
|
|
/*Keter counters*/
|
|
int keter, chokhmah, binah, gevurah, hod, daat, netzach;
|
|
int regifted; /*keeps track of how many artifacts the player has given to the unknown god*/
|
|
int uaesh, uaesh_duration, ukrau, ukrau_duration, uhoon, uhoon_duration,
|
|
uuur, uuur_duration, unaen, unaen_duration, uvaul, uvaul_duration;
|
|
boolean ufirst_light;
|
|
long ufirst_light_timeout;
|
|
boolean ufirst_sky;
|
|
long ufirst_sky_timeout;
|
|
boolean ufirst_life;
|
|
long ufirst_life_timeout;
|
|
boolean ufirst_know;
|
|
long ufirst_know_timeout;
|
|
long thoughts;
|
|
#define MAX_GLYPHS ((Role_if(PM_MADMAN) && u.uevent.qcompleted && (u.uinsight >= 20 || u.render_thought)) ? 4 : 3)
|
|
long mutations[MUTATION_LISTSIZE];
|
|
}; /* end of `struct you' */
|
|
#define uclockwork ((Race_if(PM_CLOCKWORK_AUTOMATON) && !Upolyd) || (Upolyd && youmonst.data->mtyp == PM_CLOCKWORK_AUTOMATON))
|
|
#define uandroid (is_android(youracedata))
|
|
#define umechanoid (uclockwork || uandroid)
|
|
//BAB
|
|
#define BASE_ATTACK_BONUS(wep) ((Role_if(PM_BARBARIAN) || Role_if(PM_ANACHRONOUNBINDER) || Role_if(PM_CONVICT) || Role_if(PM_KNIGHT) || Role_if(PM_ANACHRONONAUT) || \
|
|
Role_if(PM_PIRATE) || Role_if(PM_SAMURAI) || Role_if(PM_VALKYRIE) || (u.sealsActive&SEAL_BERITH) || \
|
|
(!wep && (martial_bonus() || (u.sealsActive&SEAL_EURYNOME))) || \
|
|
(Role_if(PM_MONK) && wep && is_monk_weapon(wep)) || \
|
|
(wep && is_lightsaber(wep) && (Unblind_telepat || (Blind && Blind_telepat)))) ? 1.00 :\
|
|
(Role_if(PM_ARCHEOLOGIST) || Role_if(PM_EXILE) || Role_if(PM_CAVEMAN) || Role_if(PM_MONK) || \
|
|
Role_if(PM_NOBLEMAN) || Role_if(PM_PRIEST) || Role_if(PM_ROGUE) || Role_if(PM_RANGER) || \
|
|
(u.sealsActive&SEAL_ENKI) || (Blind_telepat && wep && is_lightsaber(wep))) ? 0.75 :\
|
|
(Role_if(PM_BARD) || Role_if(PM_HEALER) || Role_if(PM_TOURIST) || Role_if(PM_WIZARD) || Role_if(PM_MADMAN)) ? 0.50:\
|
|
.5) /* Failsafe */
|
|
|
|
|
|
extern long sealKey[34]; /*Defined in u_init.c*/
|
|
extern boolean forcesight; /*Defined in u_init.c*/
|
|
extern boolean forceblind; /*Defined in u_init.c*/
|
|
extern char *wardDecode[26]; /*Defined in spell.c*/
|
|
extern int wardMax[18]; /*Defined in engrave.c*/
|
|
extern char *sealNames[]; /*Defined in engrave.c*/
|
|
extern char *sealTitles[]; /*Defined in engrave.c*/
|
|
extern char *andromaliusItems[18]; /*Defined in sounds.c*/
|
|
extern long int_spirits; /*Defined in sounds.c*/
|
|
extern long wis_spirits; /*Defined in sounds.c*/
|
|
extern boolean barrage; /*Defined in dothrow.c*/
|
|
extern boolean onlykicks; /*Defined in dokick.c*/
|
|
#define Upolyd (u.umonnum != u.umonster)
|
|
|
|
#endif /* YOU_H */
|