nexus/defs.h

3482 lines
83 KiB
C

#ifndef __DEFS_H
#define __DEFS_H
// MACROS
#define MAXOF(a,b) (a > b ? a : b)
// #define PRACTICETIME 15 // #attempts it takes to learn new weapon skill
// Probabilities
#define ONEIN_FOUNTAINDRYUP 3
#define PCTCH_PILLAR 5
// Defaults
#define DEF_AIFOLLOWTIME (50) // if target lf is out of view
// for this many turns, abandon chase
#define DEF_ANIMDELAY (1000000 / 50) // 1/100 of a second
#define DEF_RESTHEALTIME (3)
#define DEF_SCREENW 80
#define DEF_SCREENH 24
#define DEF_SHOPIDENTPRICE (50) // cost to identify a just-purchased item
#define DEF_VAULTMARGIN (3)
#define DEF_VISRANGE (7)
// Map building defaults
#define DEF_LOOPPCT 95
#define DEF_SPARSENESS 20
#define DEF_TURNPCT 40
#define DEF_WINDOWPCT 5
// lifeform defaults
#define DEF_HITDICE "1d4"
// getrandomemptycell() params
#define WE_WALKABLE 1
#define WE_EMPTY 2
#define WE_PORTAL 3
#define WE_NOTWALL 4
#define WE_NOLF 5
// Booleans
#define B_FALSE (0)
#define B_TRUE (-1)
#define B_ONPURPOSE (-1)
#define B_CHANGEDIR (-1)
#define B_VIS (1)
#define B_UNKNOWN (0)
#define B_NOVIS (-1)
#define B_KEEPLOF (-1)
#define B_MALE (0)
#define B_FEMALE (-1)
#define B_MAYCHASE (-1)
#define B_NODOORS (0)
#define B_DONTKILL (-1)
#define B_APPENDYOU (-1)
#define B_SPLATTER (-1)
#define B_FROMINJURY (-2)
#define B_KEEPDIR (-2)
#define B_VERT (0)
#define B_HORZ (1)
//#define B_TEMP (-1)
//#define B_PERM (-2)
//#define B_NOT (-3)
#define B_DIEONFAIL (-1)
#define B_BLUNTONFAIL (-2)
#define B_COVETS (-1)
#define B_ANY (0)
#define B_SINGLE (0)
#define B_MULTI (-1)
#define B_MULTIPLE (-1)
#define B_NOOBS (0)
#define B_WITHOBS (-1)
#define B_UNKNOWN (0)
#define B_KNOWN (-1)
#define B_TRIED (1)
#define B_NOBADMOVES (0)
#define B_BADMOVESOK (1)
#define B_NOSTACK (0)
#define B_STACK (-1)
#define B_STACKOK (-1)
#define NOOWNER (NULL)
#define NOLOC (NULL)
#define NOOB (NULL)
#define B_NOTSOLID (0)
#define B_EMPTY (0)
#define B_SOLID (-1)
#define B_OPAQUE (0)
#define B_TRANSPARENT (-1)
#define B_TRANS (-1)
#define B_ALLOWEXPAND (-1)
#define B_NOEXPAND (0)
#define B_IFACTIVATED (-1)
#define B_BIG (-1)
// Limits
#define MAXCANDIDATES 400 // must be >= max # of spells/abilities
#define MAXCHOICES 400
#define MAXDEPTH 25 // max dungeon depth
#define MAXDIR_ORTH 4
#define MAXDIR_COMPASS 8
#define MAXFLAGS 500
#define MAXFOLLOWLFS 15 // max # of lfs who will follow you up/down stairs
#define MAXHISTORY 20 // max lines of history to keep
#define MAX_MAPW 80
#define MAX_MAPH 20
#define MAXPILEOBS 52
#define MAXRANDOMOBCANDIDATES 100
#define MAXRANDOMLFCANDIDATES 100
#define MAXRETCELLS 80
#define MAXSPELLLEV 6
#define MAXVISRANGE 10 // max visible range in full light
#define MAXVISLIMIT (MAXVISRANGE*8)
#define MAX_EYEADJ 20
#define MINCLEARINGRADIUS 2
#define MAXCLEARINGRADIUS 5
#define MINROOMS 5
#define MAXROOMS 10
#define MIN_ROOMH 4
#define MIN_ROOMW 4
#define MAX_ROOMW (MAX_MAPW / 3)
#define MAX_ROOMH (MAX_MAPH / 3)
// askobject options
#define AO_NONE 0
#define AO_INCLUDENOTHING 1
#define AO_ONLYEQUIPPED 2
#define AO_EDIBLE 4
#define AO_NOTIDENTIFIED 8
#define AO_WEARABLE 16
#define AO_OPERABLE 32
#define AO_POURABLE 64
#define AO_EQUIPPEDNONWEAPON 128
#define AO_WEILDABLE 256
#define AO_SPECIFIED 512
#define AO_READABLE 1024
#define AO_ARMOUR 2048
#define AO_NOTKNOWN 4096
#define AO_DAMAGED 8192
#define AO_DRINKABLE 16384
// askcoords target types
#define TT_NONE 0
#define TT_MONSTER 1
#define TT_OBJECT 2
#define TT_DOOR 4
#define TT_PLAYER 8
#define TT_ALLY 16
#define TT_IMPASSABLE 32
// target requirements
#define TR_NONE 0
#define TR_NEEDLOS 1
#define TR_NEEDLOF 2
// CONTROLLERS
#define C_AI 0
#define C_PLAYER 1
// speeds
#define SP_GODLIKE 1
#define SP_ULTRAFAST 5
#define SP_VERYFAST 10
#define SP_FAST 15
#define SP_NORMAL 20
#define SP_SLOW 25
#define SP_VERYSLOW 30
#define SP_ULTRASLOW 35
#define SP_SLOWEST 40
#define SPEEDUNIT 5
// experience
#define SKILLXPPERPOINT 250
// speed settings (lower is faster)
#define SPEED_ATTACK SP_NORMAL
#define SPEED_DEAD 50
#define SPEED_ACTION SP_NORMAL
#define SPEED_MOVE SP_NORMAL
#define SPEED_DROP SP_FAST
#define SPEED_PICKUP SP_FAST
#define SPEED_THROW SP_FAST
#define SPEED_WAIT SP_NORMAL
#define SPEED_READ SP_NORMAL
#define SPEED_DRINK SP_FAST
// DIRECTION TYPES
#define DT_ORTH 0
#define DT_COMPASS 1
// DIRECTIONS
#define D_NONE -1
#define D_UNKNOWN -2
#define D_ALL -3
// Orthogonal directions
#define D_N 0
#define D_E 1
#define D_S 2
#define D_W 3
// Compass directions
#define DC_N 4
#define DC_NE 5
#define DC_E 6
#define DC_SE 7
#define DC_S 8
#define DC_SW 9
#define DC_W 10
#define DC_NW 11
// altitude directions
#define D_UP 12
#define D_DOWN 13
#define D_IN 14
#define MAXDIR_MAP 15
// relative directions
enum RELATIVEDIR {
RD_FORWARDS,
RD_BACKWARDS,
RD_SIDEWAYS,
};
///////////////////////////////////////
// STRINGS
///////////////////////////////////////
// String buffer lengths
#define BUFLENTINY 10
#define BUFLENSMALL 64
#define BUFLEN 256
#define BIGBUFLEN 512
#define HUGEBUFLEN 1024
#define MAXPNAMELEN 12 // max player name length
// file i/o
#define DATADIR "data"
#define MAPDIR "data/maps"
#define SAVEDIR "data/save"
#define VAULTDIR "vaults"
// rank, score, name, job, killer
#define HISCOREFORMAT "%-5s%-7s%-10s%-23s%s"
// game strings
#define MORESTRING "--More--"
#define MSGMORESTRING "^n--More--"
#define SOLDOUTSTRING "--SOLD OUT--"
// COMMAND CHARACTERS
#define CH_TURN_W (8) // ctrl-h
#define CH_TURN_N (10) // ctrl-j
#define CH_TURN_S (11) // ctrl-k
#define CH_TURN_E (12) // ctrl-l
#define CH_TURN_NW (25) // ctrl-y
#define CH_TURN_NE (21) // ctrl-u
#define CH_TURN_SW (2) // ctrl-b
#define CH_TURN_SE (14) // ctrl-n
#define CH_HISTORY (16) // ctrl-p
#define CH_BREAK (3) // ctrl-c
// SPECIAL NUMBERS/CONSTANTS
#define DUMMYCELLTYPE 0xabcd
#define UNLIMITED (-9876)
#define ALL (-9875)
#define NA (-9874)
#define NOBODY (-1)
#define ALLCONFERRED (-9873)
#define PCT (65432) // must be POSITIVE
#define RANDOM (-2610)
#define AUTO (-7654)
#define HEAVYWEPKG (5)
// how quickly the game clock increments
// 1 = roughly 30 secs per turn
#define TIMECONST (3)
// hunger constant - this is how many turns
// it will take to go from 'normal' to 'peckish' etc
// ... try to make this roughly 4 hours (check TIMECONST.
#define HUNGERCONST 500
#define STAMREGEN (0.3) // base amount of stamina to regain each turn
#define STAMTOATTACK ((float)STAMREGEN+0.2) // base amount of stamina to attack
// Time periods
#define TM_DRUNKTIME (10) // how long it takes for alcohol to wear off
#define TM_WETTIME (10) // how long it takes for things to dry
#define TM_SCENT (30) // how long scents take to fade
#define TM_FOOTPRINT (35) // how long footprints take to fade
// object conditions for random objects
#define RO_NONE 0
#define RO_DAMTYPE 1
#define RO_OBCLASS 2
#define RO_HOLDABLE 3
// flag lifetimes
#define PERMENANT (-9873)
#define FROMSPELL (-9863)
#define FROMPOISON (-9862)
// flag lifetimes - external sources (ie. don't kill them)
#define FROMEXTERNAL_HIGH (-7000)
#define FROMRACE (-7872)
#define FROMJOB (-7871)
#define FROMOBEQUIP (-7870)
#define FROMOBHOLD (-7869)
#define FROMOBACTIVATE (-7868)
#define FROMMAT (-7867)
#define FROMBLESSING (-9866)
#define FROMBRAND (-7865)
#define FROMOBMOD (-7864)
#define FROMSKILL (-7863)
#define FROMGODGIFT (-7862)
#define FROMEXTERNAL_LOW (-7999)
#define LEVABILITYDONE (-8000)
#define IFKNOWN (-9772) // used by f_xxconfer. only confer a flag if item is known.
#define IFACTIVE (-9771) // used by f_prodeuceslight. only does so if object is activated
// Misc constants
#define ANYROOM (-9770)
#define FALLTHRU (-8765) // for walkdambp
#define TICK_INTERVAL (20)
#define DAYSECS (86400) // # seconds in a day
// ncurses colours
#define C_NONE (-1)
enum COLOUR {
C_BLACK = 0,
C_RED = 1,
C_GREEN = 2,
C_BROWN = 3,
C_BLUE = 4,
C_MAGENTA = 5,
C_CYAN = 6,
C_GREY = 7,
// bolded colours
C_YELLOW = 8,
C_WHITE = 9,
C_BOLDCYAN = 10,
C_BOLDBLUE = 11,
C_BOLDMAGENTA = 12,
C_ORANGE = 13,
C_BOLDGREEN = 14,
C_DARKGREY = 15,
};
#define BLUEBG 50
enum CASTTYPE {
CT_NORMAL = 0,
CT_GAZE,
CT_EYESPIT
};
enum DRAINTYPE {
DR_NONE = 0,
DR_FROMBITE,
DR_FROMWEP
};
enum GODANGERREASON {
GA_ATTACKALLY,
GA_ATTACKHELPLESS, // attacked someone who was sleeping etc
GA_ATTACKOBJECT, // attacked or broke an object
GA_ASSAULT, // attacked someone peaceful
GA_EAT, // ate something the god doesn't like
GA_HERESY, // blessed or cursed an object
GA_MERCY, // allowed something to flee
GA_MONEY, // paid money to someone
GA_MURDER, // killed someone peaceful
GA_POISON, // used poison
GA_PRAY, // pestering through constant prayer
GA_SPELL, // cast a spell from the wrong school
};
enum NOISECLASS {
NC_NONE = 0,
NC_MOVEMENT = 1,
NC_SPEECH = 2,
NC_OTHER = 3,
};
enum QUADRANT {
Q_NONE = -1,
Q_NNE = 0,
Q_ENE = 1,
Q_ESE = 2,
Q_SSE = 3,
Q_SSW = 4,
Q_WSW = 5,
Q_WNW = 6,
Q_NNW = 7,
};
enum SAYPHRASE {
SP_ALLY_ATTACK,
SP_ALLY_INPAIN,
SP_ALLY_TARGETKILL,
SP_BEG,
SP_BEGATTACK,
SP_BEGTHANKS,
SP_DRUNK,
SP_PAYWARN,
SP_PAYTHREAT,
SP_PAYTHANKS,
SP_RECRUIT_ACCEPT,
SP_RECRUIT_ASKPRICE,
SP_RECRUIT_DECLINE,
SP_RECRUIT_DECLINE_CANTPAY,
SP_RECRUIT_DECLINE_WONTPAY,
SP_SORRY
};
enum SPEECHVOL {
SV_SILENT = 0,
SV_WHISPER = 1,
SV_TALK = 2,
SV_SHOUT = 3,
SV_ROAR = 4,
SV_BELLOW = 5,
};
enum SKILL {
SK_NONE = 0,
SK_ARMOUR = 1,
SK_ATHLETICS,
SK_BACKSTAB,
SK_CARTOGRAPHY,
SK_CHANNELING,
SK_CLIMBING,
SK_COOKING,
SK_EVASION,
SK_FIRSTAID,
SK_LISTEN,
SK_LOCKPICKING,
SK_METALWORK,
SK_PERCEPTION,
SK_RANGED,
SK_SEWING,
SK_SHIELDS,
SK_SPEECH,
SK_STEALTH,
SK_SWIMMING,
SK_TECHUSAGE,
SK_THIEVERY,
SK_THROWING,
SK_TRAPS,
SK_TWOWEAPON,
// knowledge
SK_LORE_ARCANA,
SK_LORE_DEMONS,
SK_LORE_DRAGONS,
SK_LORE_HUMANOID,
SK_LORE_NATURE,
SK_LORE_UNDEAD,
// weaponry
SK_AXES,
SK_CLUBS,
SK_EXOTICWEPS,
SK_LONGBLADES,
SK_POLEARMS,
SK_SHORTBLADES,
SK_STAVES,
SK_UNARMED,
// spell schools
SK_SS_ALLOMANCY,
SK_SS_MENTAL,
SK_SS_NATURE,
SK_SS_AIR,
SK_SS_DEATH,
SK_SS_DIVINATION,
SK_SS_ENCHANTMENT,
SK_SS_FIRE,
SK_SS_COLD,
SK_SS_GRAVITY,
SK_SS_LIFE,
SK_SS_MODIFICATION,
SK_SS_SUMMONING,
SK_SS_TRANSLOCATION,
SK_SS_WILD,
};
#define MAXSKILLS 54
// proficiency levels
enum SKILLLEVEL {
PR_INEPT = 0,
PR_NOVICE = 1,
PR_BEGINNER = 2,
PR_ADEPT = 3,
PR_SKILLED = 4,
PR_EXPERT = 5,
PR_MASTER = 6,
};
#define MAXSKILLLEVEL 7
enum GAMEMODE {
GM_FIRST,
GM_INIT,
GM_VALIDATION,
GM_LOADING,
GM_LOADED,
GM_CHARGEN,
GM_GAMESTARTED,
GM_GAMEOVER,
};
enum ATTRIB {
A_NONE = -1,
A_STR = 0,
A_AGI = 1,
A_WIS = 2,
A_IQ = 3,
A_CON = 4,
A_CHA = 5,
};
#define MAXATTS 6
enum CHECKTYPE {
SC_STR,
SC_DEX,
SC_IQ,
SC_CON,
SC_CHA,
SC_WIS,
//////////
SC_CLIMB,
SC_DISARM,
SC_DODGE,
SC_SHIELDBLOCK,
SC_FALL,
SC_SLIP,
SC_LEARNMAGIC,
SC_LISTEN,
SC_MORALE,
SC_OPENLOCKS,
SC_POISON,
SC_RESISTMAG,
SC_SEARCH,
SC_STEAL,
SC_STEALTH,
SC_TUMBLE,
SC_WILL,
};
enum BURDENED {
BR_NONE = 0,
BR_BURDENED = 1,
BR_STRAINED = 2,
BR_OVERLOADED = 3,
};
enum LFCONDITION {
C_DEAD = 0,
C_CRITICAL = 1,
C_SERIOUS = 2,
C_WOUNDED = 3,
C_HURT = 4,
C_HEALTHY = 5,
};
enum SENSE {
S_HEARING,
S_SIGHT,
S_SMELL,
S_TASTE,
S_TOUCH,
};
enum FLAGCONDITION {
FC_NOCONDITION = 0,
FC_IFPLAYER,
FC_IFMONSTER,
};
enum MSGCHARCOL {
CC_VBAD,
CC_BAD,
CC_NORMAL,
CC_GOOD,
CC_VGOOD,
};
enum MODTYPE {
M_PCT,
M_VAL,
};
// line of fire args
enum LOFTYPE {
LOF_DONTNEED = 0,
LOF_WALLSTOP = 2,
LOF_LFSSTOP = 4,
LOF_NEED = 6, // walls AND lfs block
};
// Cell types
enum CELLTYPE {
CT_NONE = 0,
// walls
CT_WALL,
CT_WALLGLASS,
CT_WALLMETAL,
CT_WALLWOOD,
CT_ROOMWALL,
// empty
CT_CORRIDOR,
CT_DIRT,
CT_VILLAGEGROUND,
CT_FAKE,
CT_FLOORSHOP,
CT_FLOORWOOD,
CT_GRASS,
CT_LOOPCORRIDOR,
CT_LOWFLOOR,
// rooms
CT_ROOM,
};
enum SPELLSCHOOL {
SS_NONE,
SS_DIVINE,
SS_ABILITY,
SS_ALLOMANCY,
SS_AIR,
SS_DEATH,
SS_DIVINATION,
SS_ENCHANTMENT,
SS_FIRE,
SS_COLD,
SS_GRAVITY,
SS_LIFE,
SS_MODIFICATION,
SS_MENTAL,
SS_NATURE,
SS_SUMMONING,
SS_TRANSLOCATION,
SS_WILD,
SS_LAST,
};
enum ATTRBRACKET {
AT_RANDOM = -99,
AT_EXLOW = -4,
AT_VLOW = -3,
AT_LOW = -2,
AT_LTAVERAGE = -1,
AT_AVERAGE = 0,
AT_GTAVERAGE = 1,
AT_HIGH = 2,
AT_VHIGH = 3,
AT_EXHIGH = 4,
};
#define IQ_MINDLESS AT_EXLOW
#define IQ_ANIMAL AT_VLOW
// damage type
enum DAMTYPE {
DT_ALL = -1,
DT_PIERCE = 0,
DT_SLASH = 1,
DT_FIRE = 2,
DT_COLD = 3,
DT_BASH = 4,
DT_BITE = 5,
DT_CHOP = 6,
DT_PROJECTILE = 7,
DT_HOLY = 8,
DT_WATER = 9,
DT_ACID = 10,
DT_MELT = 11,
DT_DIRECT = 12, // eg. from f_obhpdrain flag
DT_ELECTRIC = 13,
DT_EXPLOSIVE = 14,
DT_DECAY = 15,
DT_MAGIC = 16,
DT_TOUCH = 17,
DT_POISONGAS = 18,
DT_UNARMED = 19,
DT_LIGHT = 20,
DT_CRUSH = 21,
DT_FALL = 22,
DT_PETRIFY = 23,
DT_POISON = 24,
DT_NECROTIC = 25,
DT_SONIC = 26,
DT_HEAT = 27,
DT_NONE = 28, // for direclty dealt damage, not really any type
};
#define MAXDAMTYPE 29
// Object Classes
enum OBCLASS {
OC_NONE,
OC_ABILITY,
OC_ARMOUR,
OC_BOOK,
OC_CORPSE,
OC_DFEATURE,
OC_EFFECT,
OC_FLORA,
OC_FOOD,
OC_FURNITURE,
OC_GODSTONE,
OC_MISC,
OC_MISSILE,
OC_MONEY,
OC_POTION,
OC_RING,
OC_ROCK,
OC_SCROLL,
OC_TECH,
OC_TERRAIN,
OC_TOOLS,
OC_TRAP,
OC_SPELL,
OC_WAND,
OC_WEAPON,
OC_NULL = -999
};
enum BLESSTYPE {
B_UNCURSED = 0,
B_BLESSED = 1,
B_CURSED = -1
};
#define RARITYVARIANCELF (1)
#define RARITYVARIANCEOB (10)
enum RARITY {
RR_UNIQUE = 6,
RR_NEVER = 5,
RR_VERYRARE = 4,
RR_RARE = 3,
RR_UNCOMMON = 2,
RR_COMMON = 1,
RR_NONE = 0,
};
// for genericising weapons, etc
enum GOODNESS {
G_NA = 0,
G_AVERAGE,
G_GOOD,
G_GREAT,
G_EXCELLENT,
};
enum RACECLASS {
RC_ANY, // not actually ever defined
RC_ANIMAL,
RC_AQUATIC,
RC_DEMON,
RC_DRAGON,
RC_GOD,
RC_HUMANOID,
RC_INSECT,
RC_SLIME,
RC_MAGIC,
RC_OTHER,
RC_PLANT,
RC_UNDEAD,
};
#define R_GODFIRST R_GODPURITY
#define MAXGODS 4
enum RACE {
R_NONE = 0,
R_RANDOM, R_SPECIFIED,
// unique monstesr
R_JAILER,
// playable races
R_AVIAD,
R_CYBORG,
R_DWARF,
R_ELF,
R_HUMAN,
// human monsters
R_BANDITLDR,
R_BANDIT,
R_BEGGAR,
R_DRUNK,
R_PRISONER,
R_TOWNGUARD,
// gods
R_GODPURITY, // amberon - R_FIRSTGOD
R_GODTHIEVES, // felix
R_GODDEATH, // hecta
R_GODMERCY, // yumi
// monsters
R_BEHOLDER,
R_BUGBEAR,
R_COCKATRICE,
R_CREEPINGCLAW,
R_DARKMANTLE,
R_EYEBAT,
R_GIANTHILL,
R_GIANTFIRE,
R_GIANTFIREFC,
R_GIANTFIRETITAN,
R_GNOLL,
R_GNOLLHM,
R_GOBLIN,
R_GOBLINWAR,
R_GOBLINSHOOTER,
R_GOBLINHEXER,
R_HOBGOBLIN,
R_HOBGOBLINWAR,
R_KOBOLD,
R_LEPRECHAUN,
R_LIZARDMAN,
R_MINOTAUR,
R_OGRE,
R_OGREWARHULK,
R_OOZEGREY,
R_ORC,
R_ORCWARRIOR,
R_ORK,
R_PEGASUS,
R_POLTERGEIST,
R_SATYR,
R_SHADOWCAT,
R_SPRITEFIRE,
R_SPRITEICE,
R_TROGLODYTE,
R_TROLL,
R_VAMPIRE,
R_XAT,
// fish
R_CRAB,
R_MERLOCH,
R_PIRANHA,
R_PIRANHAKING,
R_EELELEC,
R_EELGIANT,
// plants
R_CACTUS,
R_DREAMFUNGUS,
R_SAWGRASS,
// animals
R_ANT,
R_ANTS,
R_ANTLION,
R_BAT,
R_BATMUTATED,
R_BATVAMPIRE,
R_BEAR,
R_BEARCUB,
R_BEARGRIZZLY,
R_CHICKEN,
R_DOG,
R_DOGBLINK,
R_DOGDEATH,
R_DOGWAR,
R_HAWK,
R_HAWKYOUNG,
R_HAWKBLOOD,
R_HAWKFROST,
R_LEECH,
R_NEWT,
R_PORCUPINE,
R_RAT,
R_SNAKE,
R_SNAKECARPET,
R_SNAKECOBRABLACK,
R_SNAKECOBRAGOLDEN,
R_SNAKECONSTRICTOR,
R_SNAKETREE,
R_SNAKEWATER,
R_SPIDER,
R_SPIDERFUNNELWEB,
R_SPIDERREDBACK,
R_WOLF,
R_WOLFYOUNG,
// dragons
R_DRAGONBLUE,
R_DRAGONBLUEY,
R_DRAGONBLUEA,
R_DRAGONRED,
R_DRAGONREDY,
R_DRAGONREDA,
R_DRAGONWHITE,
R_DRAGONWHITEY,
R_DRAGONWHITEA,
// insects
R_BUTTERFLY,
R_CENTIPEDE,
R_GLOWBUG,
R_GIANTFLY,
R_GIANTBLOWFLY,
R_STIRGE,
// demons
R_DRETCH,
R_LURKINGHORROR,
R_QUASIT,
// undead
R_GHAST,
R_GHOST,
R_GHOUL,
R_SKELETON,
R_ZOMBIE,
// special
R_DANCINGWEAPON,
R_FLOATINGDISC,
R_GASCLOUD,
};
enum JOB {
J_NONE,
J_GOD,
J_ADVENTURER,
J_ALLOMANCER,
J_WARRIOR,
J_COMMANDO,
J_DRUID,
J_MECHANIC,
J_MONK,
J_NINJA,
J_PIRATE,
J_PRINCE,
J_ROGUE,
J_SHOPKEEPER,
J_WIZARD,
};
#define J_RANDOM J_NONE
enum MATSTATE {
MS_SOLID,
MS_LIQUID,
MS_GAS,
MS_OTHER,
};
// Object Materials
enum MATERIAL {
MT_NOTHING = 0,
MT_BONE = 1,
MT_STONE = 2,
MT_FIRE = 3,
MT_PLASTIC = 4,
MT_METAL = 5,
MT_GLASS = 6,
MT_FLESH = 7,
MT_WOOD = 8,
MT_GOLD = 9,
MT_PAPER = 10,
MT_WETPAPER = 11,
MT_ICE = 12,
MT_WATER = 13,
MT_BLOOD = 14,
MT_LEATHER = 15,
MT_CLOTH = 16,
MT_FOOD = 17,
MT_RUBBER = 18,
MT_MAGIC = 19,
MT_GAS = 20,
MT_SLIME = 21,
MT_WAX = 22,
MT_ACID = 23,
MT_SILK = 24,
MT_OIL = 25,
MT_PLANT = 26,
MT_WIRE = 27,
MT_SILVER = 28,
MT_DRAGONWOOD = 29,
};
// Object Types
enum OBTYPE {
OT_NONE,
// dungeon features
OT_BOULDER,
OT_ICICLE,
OT_STATUE,
OT_DOORWOOD,
OT_DOORIRON,
OT_FENCEWOOD,
OT_FOUNTAIN,
OT_GATEIRON,
OT_GATEWOOD,
OT_SIGN,
OT_HOLYCIRCLE,
OT_PENTAGRAM,
OT_HOLEINGROUND,
OT_HOLEINROOF,
OT_STAIRSDOWN,
OT_STAIRSUP,
OT_VENDINGMACHINE,
OT_PORTAL,
// terrain
OT_WATERDEEP,
// traps
OT_TRAPALARM,
OT_TRAPARROW,
OT_TRAPARROWP,
OT_TRAPEBLAST,
OT_TRAPFIRE,
OT_TRAPGAS,
OT_TRAPMINE,
OT_TRAPNEEDLEP,
OT_TRAPPIT,
OT_TRAPROCK,
OT_TRAPSUMMON,
OT_TRAPTELEPORT,
OT_TRAPTRIP,
OT_TRAPWIND,
// rocks
OT_STONE,
OT_ASH,
OT_ASHEXPLODE,
OT_ASHCONCEAL,
OT_ASHSLEEP,
OT_GEMOFSEEING,
// gems
OT_AQUAMARINE,
OT_AMETHYST,
OT_DIAMOND,
OT_EMERALD,
OT_OPAL,
OT_PEARL,
OT_RUBY,
OT_SAPPHIRE,
OT_TOPAZ,
// money
OT_GOLD,
// godstones
OT_GODSTONEJ,
// flora
OT_FLOWER,
OT_LEAF,
OT_MISTLETOE,
OT_SHRUB,
OT_STUMP,
OT_TREE,
// food
OT_APPLE,
OT_BANANA,
OT_BANANASKIN, // not really food
OT_BERRY,
OT_BREADFRESH,
OT_BREADGARLIC,
OT_BREADSTALE,
OT_CACFRUIT,
OT_CAKEFRUIT,
OT_CARROT,
OT_CHEESE,
OT_CHOCOLATE,
OT_CLOVER,
OT_GARLIC,
OT_HOTDOG,
OT_JERKY,
OT_MUSHROOMSHI,
OT_MUSHROOMTOAD,
OT_NUT,
OT_ROASTMEAT,
OT_RUMBALL,
OT_SALT,
OT_SANDWICHCHEESE,
OT_SANDWICHPB,
OT_SUGAR,
OT_TOMATO,
// corpses
OT_CORPSE,
OT_FINGER,
OT_HEAD,
// potions
OT_POT_ACID,
OT_POT_ACROBATICS,
OT_POT_AMBROSIA,
OT_POT_BLOOD,
OT_POT_BLOODC,
OT_POT_CANINETRACKING,
OT_POT_COFFEE,
OT_POT_COMPETENCE,
OT_POT_ELEMENTIMMUNE,
OT_POT_ETHEREALNESS,
OT_POT_EXPERIENCE,
OT_POT_GASEOUSFORM,
OT_POT_HEALING,
OT_POT_HEALINGMIN,
OT_POT_HEALINGMAJ,
OT_POT_INVIS,
OT_POT_INVULN,
OT_POT_LEVITATION,
OT_POT_MAGIC,
OT_POT_OIL,
OT_POT_POISON,
OT_POT_POLYMORPH,
OT_POT_RESTORATION,
OT_POT_RUM,
OT_POT_SANCTUARY,
OT_POT_SLEEP,
OT_POT_SPEED,
OT_POT_WATER,
OT_POT_JUICE,
// soup from recipes
OT_POT_SOUPMUSHROOM,
OT_POT_SOUPTOMATO,
OT_POT_STROGONOFF,
// scrolls
OT_MAP,
OT_GRAPHPAPER,
OT_SCR_AWARENESS,
OT_SCR_NOTHING,
OT_SCR_CREATEMONSTER,
OT_SCR_DETECTAURA,
OT_SCR_DETECTLIFE,
OT_SCR_DETECTOBS,
OT_SCR_DETECTMAGIC,
OT_SCR_FLAMEPILLAR,
OT_SCR_FLAMEBURST,
OT_SCR_IDENTIFY,
OT_SCR_KNOCK,
OT_SCR_LIGHT,
OT_SCR_MAPPING,
OT_SCR_MENDING,
OT_SCR_MINDSCAN,
OT_SCR_PERMENANCE,
OT_SCR_ENCHANT,
OT_SCR_FREEZEOB,
OT_SCR_REMOVECURSE,
OT_SCR_TELEPORT,
OT_SCR_TURNUNDEAD,
OT_SCR_WISH,
// BOOKS
OT_MANUAL,
OT_SPELLBOOK,
// spells
// -- allomancy
OT_S_ABSORBMETAL,
OT_S_ACCELMETAL,
OT_S_ANIMATEMETAL,
OT_S_EXPLODEMETAL,
OT_S_HEATMETAL,
OT_S_PULLMETAL,
OT_S_MAGSHIELD,
OT_S_METALHEAL,
// -- death
OT_S_ANIMATEDEAD,
OT_S_COMMANDUNDEAD,
OT_S_DRAINLIFE,
OT_S_FEAR,
OT_S_PAIN,
OT_S_PARALYZE,
OT_S_INFINITEDEATH,
OT_S_WEAKEN,
OT_S_FEEBLEMIND,
OT_S_BLINDNESS,
OT_S_POISONBOLT,
OT_S_POSSESSION,
OT_S_SMITEGOOD,
OT_S_STENCH,
// -- divination
OT_S_AWARENESS,
OT_S_CANINETRACKING,
OT_S_DETECTAURA,
OT_S_DETECTLIFE,
OT_S_DETECTOBS,
OT_S_DETECTMAGIC,
OT_S_IDENTIFY,
OT_S_LOCATEOBJECT,
OT_S_LORE,
OT_S_MAPPING,
OT_S_REVEALHIDDEN,
OT_S_SEEINVIS,
OT_S_SIXTHSENSE,
// -- elemental - air
OT_S_JOLT,
OT_S_AIRBLAST,
OT_S_CHAINLIGHTNING,
OT_S_CLOUDKILL,
OT_S_GUSTOFWIND,
OT_S_MIST,
OT_S_SHATTER,
OT_S_TAILWIND,
OT_S_WINDSHIELD,
// -- elemental - fire
OT_S_BLADEBURN,
OT_S_BURNINGWAVE,
OT_S_FIREDART,
OT_S_FIREBALL,
OT_S_FLAMEPILLAR,
OT_S_FLAMEBURST,
OT_S_PYROMANIA,
OT_S_SPARK,
// -- elemental - ice
OT_S_ABSOLUTEZERO,
OT_S_CHILL,
OT_S_COLDBURST,
OT_S_COLDRAY,
OT_S_CRYSTALARM,
OT_S_CRYSTALSHIELD,
OT_S_FREEZEOB,
OT_S_FROSTBITE,
OT_S_GLACIATE,
OT_S_ICECRUST,
OT_S_ICICLE,
OT_S_SLIDE,
OT_S_SHARDSHOT,
OT_S_SNAPFREEZE,
OT_S_SNOWBALL,
OT_S_WALLOFICE,
// -- gravity
OT_S_FLIGHT,
OT_S_FORCESPHERE,
OT_S_GRAVLOWER,
OT_S_GRAVBOOST,
OT_S_HASTE,
OT_S_LEVITATION,
OT_S_SLOW,
OT_S_TRUESTRIKE,
// -- life / cleric
OT_S_HEALING,
OT_S_HEALINGMIN,
OT_S_HEALINGMAJ,
OT_S_HOLYAURA,
OT_S_SMITEEVIL,
OT_S_SPEAKDEAD,
OT_S_TURNUNDEAD,
// -- mental / psionic
OT_S_BAFFLE,
OT_S_CHARM,
OT_S_DISORIENT,
OT_S_HUNGER,
OT_S_LETHARGY,
OT_S_LOWERMETAB,
OT_S_MINDSCAN,
OT_S_PACIFY,
OT_S_PSYARMOUR,
OT_S_SLEEP,
OT_S_STUN,
OT_S_STUNMASS,
OT_S_TELEKINESIS,
// -- modification
OT_S_DARKNESS,
OT_S_ENCHANT,
OT_S_GASEOUSFORM,
OT_S_GREASE,
OT_S_HOLDPORTAL,
OT_S_INSCRIBE,
OT_S_INVISIBILITY,
OT_S_KNOCK,
OT_S_LIGHT,
OT_S_MENDING,
OT_S_PASSWALL,
OT_S_PETRIFY,
OT_S_POLYMORPH,
OT_S_POLYMORPHRND,
// nature / enviromancy
OT_S_BARKSKIN,
OT_S_CALLLIGHTNING,
OT_S_CALLWIND,
OT_S_CALMANIMALS,
OT_S_CALMINGSCENT,
OT_S_CHARMANIMAL,
OT_S_CUREPOISON,
OT_S_DETECTPOISON,
OT_S_DIG,
OT_S_EARTHQUAKE,
OT_S_EVAPORATE,
OT_S_WEB,
OT_S_ENDUREELEMENTS,
OT_S_ENTANGLE,
OT_S_FLOOD,
OT_S_HAILSTORM,
OT_S_LIGHTNINGBOLT,
OT_S_LIGHTNINGSTORM,
OT_S_PURIFYFOOD,
OT_S_QUENCH,
OT_S_LESSENPOISON,
OT_S_REPELINSECTS,
OT_S_SATEHUNGER,
OT_S_SLEETSTORM,
OT_S_SOFTENEARTH,
OT_S_STICKTOSNAKE,
OT_S_SUMMONANIMALSSM,
OT_S_SUMMONANIMALSMD,
OT_S_SUMMONANIMALSLG,
OT_S_SUMMONDEMON,
OT_S_THORNS,
OT_S_WARPWOOD,
OT_S_WATERJET,
// -- summoning
OT_S_FLOATINGDISC,
OT_S_GLYPHWARDING,
OT_S_CLEARLEVEL,
OT_S_CREATEMONSTER,
OT_S_SUMMONWEAPON,
// -- translocation
OT_S_APPORTATION,
OT_S_BLINK,
OT_S_BLINKASS,
OT_S_DISPERSAL,
OT_S_GATE,
OT_S_INSTANTDISROBE,
OT_S_PLANESHIFT,
OT_S_SUCK,
OT_S_TELEPORT,
OT_S_TWIDDLE,
// -- wild
OT_S_ALARM,
OT_S_MANASPIKE,
OT_S_DETONATE,
OT_S_ENERGYBOLT,
OT_S_ENERGYBLAST,
OT_S_FLASH,
// -- divine powers
OT_S_CREATEVAULT,
OT_S_GIFT,
OT_S_WISH,
OT_S_WISHLIMITED,
OT_A_BLINDALL,
OT_S_CONFISCATE,
OT_A_DEBUG,
OT_A_ENHANCE,
OT_A_LEARN,
OT_A_LEVELUP,
// abilities
OT_A_AIMEDSTRIKE,
OT_A_CHECKSTAIRS,
OT_A_CLIMB,
OT_A_COOK,
OT_A_DARKWALK,
OT_A_DISARM, // disarm a trap
OT_A_DISARMLF, // disarm an opponent
OT_A_FEIGNDEATH,
OT_A_FLIP,
OT_A_FLURRY,
OT_A_GRAB,
OT_A_CHARGE,
OT_A_COMBOSTRIKE,
OT_A_CRUSH,
OT_A_JUMP,
OT_A_PRAY,
OT_A_RAGE,
OT_A_REPAIR,
OT_A_SHIELDBASH,
OT_A_SONICBOLT,
OT_A_SPRINT,
OT_A_STUDYSCROLL,
OT_A_STINGACID, // need to define dam in f_canwill
OT_A_SUCKBLOOD,
OT_A_SWOOP,
OT_A_TRIPLF, // trip an opponent
OT_A_EMPLOY,
OT_A_HEAVYBLOW,
OT_A_HIDE,
OT_A_INSPECT,
OT_A_HURRICANESTRIKE,
OT_A_POLYREVERT,
OT_A_PREPARECORPSE,
OT_A_QUIVERINGPALM,
OT_A_STEAL,
OT_A_THRUST, // attack up to 2 cells away with a piercing weapon.
OT_A_TRAIN,
OT_A_TUMBLE,
OT_A_WARCRY, // uses F_NOISETEXT -> N_WARCRY if it is there.
// otherwise 'shouts a blood-curdling war cry'
// wands
OT_WAND_COLD,
OT_WAND_DETONATION,
OT_WAND_DIGGING,
OT_WAND_DISPERSAL,
OT_WAND_FIRE,
OT_WAND_FIREBALL,
OT_WAND_HASTE,
OT_WAND_INVIS,
OT_WAND_KNOCK,
OT_WAND_LIGHT,
OT_WAND_POLYMORPH,
OT_WAND_REVEALHIDDEN,
OT_WAND_SLOW,
OT_WAND_TURNUNDEAD,
OT_WAND_WEAKNESS,
OT_WAND_WONDER,
// tools - unique
OT_ORBDUNGEONEXIT,
// tools
OT_BAGOFHOLDING,
OT_BAGOFHOLDINGLARGE,
OT_BAGOFHOLDINGHUGE,
OT_BANDAGE,
OT_BLANKET,
OT_BLINDFOLD,
OT_BUGLAMP,
OT_CANDLE,
OT_FRIDGE,
OT_GUNPOWDER,
OT_LAMPOIL,
OT_LANTERNOIL,
OT_LOCKPICK,
OT_PANPIPES,
OT_PICKAXE,
OT_ROPE,
OT_SACK,
OT_SACKLARGE,
OT_SACKHUGE,
OT_SAFEBOX,
OT_TORCH,
OT_TOWEL,
// tech l0
OT_CREDITCARD,
OT_PAPERCLIP,
OT_SLEEPINGBAG,
// tech l1
OT_POCKETWATCH,
OT_DIGITALWATCH,
OT_INSECTICIDE,
OT_LANTERNLED,
OT_TENT,
OT_SOLDERINGIRON,
// tech l2
OT_C4,
OT_FLASHBANG,
OT_GRENADE,
OT_GRENADESMOKE,
OT_MOTIONSCANNER,
OT_NVGOGGLES,
OT_STYPTIC,
// tech l3
OT_INFOVISOR,
OT_LOCKHACKER,
OT_PORTLADDER,
// tech l4
OT_JETPACK,
// tech l5
OT_TELEPAD,
OT_XRAYGOGGLES,
// tech l6
// none yet.
// furniture
OT_CANDELABRUM,
OT_COFFIN,
OT_FIREPLACE,
OT_WEAPONRACK,
OT_WOODENTABLE,
OT_WOODENBARREL,
OT_WOODENSTOOL,
// misc objects
OT_BONE,
OT_CHEST,
OT_EMPTYFLASK,
OT_EMPTYVIAL,
OT_CALTROP,
OT_BROKENGLASS,
OT_ICECHUNK,
OT_ICESHEET,
OT_MUDPOOL,
OT_PUDDLEOIL,
OT_SPLASHWATER,
OT_PUDDLEWATER,
OT_PUDDLEWATERL,
OT_ACIDSPLASH,
OT_ACIDPUDDLE,
OT_ACIDPOOL,
OT_SLIMEPOOL,
OT_VOMITPOOL,
OT_BLOODSTAIN,
OT_BLOODSPLASH,
OT_BLOODPOOL,
OT_BLOODCSPLASH,
OT_MELTEDWAX,
OT_SOGGYPAPER,
OT_FLESHCHUNK,
// trail objects
OT_FOOTPRINT,
OT_SCENT,
// effects
OT_DUSTCLOUD,
OT_DUSTPUFF,
OT_FIRELARGE,
OT_FIREMED,
OT_FIRESMALL,
OT_HAILSTORM,
OT_ICEWALL,
OT_MAGICBARRIER,
OT_STEAMCLOUD,
OT_STEAMPUFF,
OT_SLEETSTORM,
OT_MIST,
OT_SMOKECLOUD,
OT_SMOKEPUFF,
OT_POISONCLOUD,
OT_POISONPUFF,
OT_VINE,
OT_WEB,
// armour - multipart
OT_WETSUIT,
// armour - body
OT_ARMOURDEMON,
OT_ARMOURLEATHER,
OT_ARMOURRING,
OT_ARMOURSCALE,
OT_ARMOURCHAIN,
OT_ARMOURSPLINT,
OT_ARMOURPLATE,
OT_FLAKJACKET,
OT_OVERALLS,
OT_COTTONSHIRT,
OT_SILKSHIRT,
OT_ROBE,
OT_VELVETROBE,
// armour - shoulders
OT_CLOAK,
// armour - waist
OT_BELTLEATHER,
// armour - legs
OT_CLOTHTROUSERS,
OT_COMBATPANTS,
OT_GREAVES,
OT_RIDINGTROUSERS,
// armour - feet
OT_SANDALS,
OT_SHOESLEATHER,
OT_BOOTSLEATHER,
OT_BOOTSMETAL,
OT_BOOTSRUBBER,
OT_BOOTSSPIKED,
// armour - hands
OT_GLOVESCLOTH,
OT_GLOVESLEATHER,
OT_GAUNTLETS,
// armour - head
OT_SUNHAT,
OT_PIRATEHAT,
OT_POINTYHAT,
OT_BALACLAVA,
OT_CAP,
OT_HELM,
OT_GASMASK,
OT_GOLDCROWN,
OT_HELMBONE,
OT_HELMFOOTBALL,
// armour - ears
OT_EARPLUGS,
// armour - eyes
OT_SAFETYGLASSES,
OT_SPECTACLES,
OT_EYEPATCH,
OT_SUNGLASSES,
// armour - shields
OT_BUCKLER,
OT_SHIELD,
OT_SHIELDHIDE,
OT_SHIELDLARGE,
OT_SHIELDTOWER,
// rings
OT_RING_ENDURANCE,
OT_RING_INVIS,
OT_RING_INVULN,
OT_RING_LUCK,
OT_RING_CONTROL,
OT_RING_CON,
OT_RING_DEX,
OT_RING_HUNGER,
OT_RING_IQ,
OT_RING_STR,
OT_RING_MANA,
OT_RING_MIRACLES,
OT_RING_MPREGEN,
OT_RING_PROTFIRE,
OT_RING_PROTCOLD,
OT_RING_REGENERATION,
OT_RING_RESISTMAG,
OT_RING_SIGHT,
OT_RING_WOUNDING,
// innate / animal weapons
OT_BEAK,
OT_CLAWS,
OT_FISTS,
OT_HOOKHAND, // for pirate
OT_STING,
OT_BUTT,
OT_HOOF,
OT_TAIL,
OT_TEETH,
OT_TEETHSM,
OT_TENTACLE,
OT_ZAPPER,
// monster weapons
OT_ACIDATTACK,
OT_TOUCHCHILL,
OT_TOUCHPARALYZE,
OT_TOUCHPARALYZE2,
// missiles / ammo
OT_ARROW,
OT_BOLT,
OT_DART,
OT_DARTNANO,
OT_DARTTRANQ,
OT_MANRIKI,
OT_NEEDLE,
OT_NET,
OT_JAVELIN,
OT_BULLET,
OT_RUBBERBULLET,
OT_SHURIKEN,
// axes
OT_AXE,
OT_HANDAXE,
OT_HATCHET,
OT_BATTLEAXE,
OT_GREATAXE,
OT_WARAXE,
// short blades
OT_COMBATKNIFE,
OT_DAGGER,
OT_FORK,
OT_KNIFE,
OT_ORNDAGGER,
OT_QUICKBLADE,
OT_RAPIER,
OT_SAI,
OT_SHORTSWORD,
OT_STEAKKNIFE,
OT_SICKLE,
// long swords
OT_BASTARDSWORD,
OT_FALCHION,
OT_GREATSWORD,
OT_KATANA,
OT_LONGSWORD,
OT_ORNSWORD,
OT_SCIMITAR,
OT_CUTLASS,
// polearms
OT_GLAIVE,
OT_GUISARME,
OT_HALBERD,
OT_LANCE,
OT_RANSEUR,
OT_SCYTHE,
OT_SPEAR,
OT_TRIDENT,
// staves
OT_QUARTERSTAFF,
OT_BAMBOOSTAFF,
OT_IRONSTAFF,
OT_BLADEDSTAFF,
OT_WIZARDSTAFF,
OT_WIZARDSTAFF2,
OT_WIZARDSTAFF3,
OT_WIZARDSTAFF4,
OT_WIZARDSTAFF5,
OT_WIZARDSTAFF6,
// clubs
OT_CLUB,
OT_FLAIL,
OT_FLAILHEAVY,
OT_GREATCLUB,
OT_MACE,
OT_MORNINGSTAR,
OT_NUNCHAKU,
OT_SHILLELAGH,
OT_SPANNER,
OT_STICK,
// projectile weapons
OT_BOW,
OT_CROSSBOW,
OT_CROSSBOWHAND,
OT_LONGBOW,
OT_REVOLVER,
OT_SHOTGUN,
OT_SLING,
// special weapons
OT_ENERGYBLADE,
OT_HANDOFGOD,
OT_ICEARMOUR,
OT_ICEBOOTS,
OT_ICEGLOVES,
OT_ICEHELMET,
OT_ICESHIELD,
// special obs
OT_PLAYERSTART,
};
#define BP_NONE (-1)
enum BODYPART {
BP_WEAPON = 0,
BP_SECWEAPON,
BP_EARS,
BP_EYES,
BP_HEAD,
BP_SHOULDERS,
BP_BODY,
BP_HANDS,
BP_WAIST,
BP_LEGS,
BP_FEET,
BP_RIGHTFINGER,
BP_LEFTFINGER,
};
#define MAXBODYPARTS (13)
// depth on a human
#define DP_MAX DP_OVERHEAD4
#define DP_FIRST DP_TOE
enum DEPTH {
/*
DP_HEAD = 4,
DP_SHOULDERS = 3,
DP_WAIST = 2,
DP_FEET = 1,
DP_NONE = 0,
*/
DP_OVERHEAD4 = 15,
DP_OVERHEAD3 = 14,
DP_OVERHEAD2 = 13,
DP_OVERHEAD = 12,
DP_HEAD = 11,
DP_SHOULDERS = 10,
DP_CHEST = 9,
DP_BELLY = 8,
DP_WAIST = 7,
DP_THIGH = 6,
DP_KNEE = 5,
DP_CALF = 4,
DP_FEET = 3,
DP_ANKLE = 2,
DP_TOE = 1,
DP_NONE = 0,
};
enum NOISETYPE {
N_GETANGRY,
N_WALK,
N_FLY,
N_LOWHP,
N_FRUSTRATED,
N_SONICBOLT,
N_WARCRY,
};
enum LFSIZE {
SZ_ANY = -2,
SZ_MIN = -1,
SZ_MINI = 0, // ie. fly
SZ_TINY = 1, // ie. mouse
SZ_SMALL = 2, // ie. cat
SZ_MEDIUM = 3, // ie. wolf/dog
SZ_HUMAN = 4, // ie. human-sized
SZ_LARGE = 5, // ie. bear/horse
SZ_HUGE = 6, // ie. elephant, dragon, giant
SZ_ENORMOUS = 7, // ie. ??? kraken, titan
SZ_MAX = 100
};
enum ALLEGIENCE {
AL_HOSTILE, // will attack you on sight
AL_PEACEFUL, // won't attack you on sight
AL_FRIENDLY, // will help you fight
};
enum ALIGNMENT {
AL_NONE,
AL_GOOD,
AL_NEUTRAL,
AL_EVIL,
};
enum POISONSEVERITY {
PS_DISEASE,
PS_POISON,
};
enum POISONTYPE {
P_COLD,
P_FOOD,
P_GAS,
P_VENOM,
P_WEAKNESS,
};
enum RANGEATTACK {
RA_NONE = 0,
RA_GUN,
RA_THROW,
RA_WAND,
};
enum SLEEPTYPE {
ST_ASLEEP = 0,
ST_MEDITATING,
ST_KO,
};
enum FLAG {
F_NONE = 0, // dummy flag
// map flags
F_MAPCOORDS, // v0+v1 are x/y coords for this map area
F_ROOMEXIT, // there is an exit from room v0 at x=v1,y=v2
F_NEWWATERDEPTH, // temp flag for the spread of f_deepwater obs.
// v0+1 are x/y, v2 is new depth.
// object flags
F_BADOBJECT, // this object is dangerous. ie. potion of poison,
// potion of sleep, etc.
F_BEINGUSED, // this object is currently being used
F_DEAD, // object will be removed
F_ONEPERCELL, // only one of these objects can exist per cell
F_CREATEDBY, // object was made by lf id v0, text=real lfname
F_CREATEDBYSPELL, // object was made by spell id v0
F_ENCHANTABLE, // object can get +1/-1 ect
F_GODGIFT, // this was a gift form god with race v0.
F_NOSHATTER, // object will not shatter, even if it's material should.
F_STACKABLE, // can stack multiple objects togethr
F_NO_PLURAL, // this obname doesn't need an 's' for plurals (eg. gold, money)
F_NO_A, // this obname doesn't need to start with 'a' for singular (eg. gold)
F_CONTAINSOB, // for vending machiens. v0 is ob letter
// text is an object it contains.
F_MAPTO, // this object is a map to the world map at xy=v0/v1.
// optional v2 = obtypeid of target
// text = what this is a map to ie. "the nearest village"
F_SIGNTEXT, // for 'sign' objects. f->text is what is says.
F_IDWHENUSED, // fully identify an object when worn/weilded/operated/etc
F_STARTBLESSED, // v0 = b_blessed or b_cursed
F_REPELBLESSED, // v0 = b_blessed or b_cursed. repels other obejcts
// of this blesstype.
F_TRAIL, // this object denotes the trail left by a lf.
// v0 = raceid of lf who left it
// v1 = direction the lf moved out of this cell
// v2 = enum sense used to see this (ie. s_smell, s_sight)
// (optional) text = lfid of lf who left this.
// should only be used for SCENT, not footprints.
F_NOFEEL, // when blind, don't show "you can feel xxx"
F_FEELTEXT, // when blind, show "you can feel"+f->text
// for items in shops
F_VENDITEM, // causes vending machine to show this item as identified
F_SHOPITEM, // v0 is object value.
// v1 is the shop it is from
// causes shops to show (worth $xx) after the ob's name.
// also used for detecting theft!
F_VALUE, // how much an item is worth (over its base weight+material)
F_NOPOINTS, // object is worth 0 points (but might still have a
// monetary value)
// for object brands
F_ONLYFOROBTYPE, // brand can only go on obtype v0
F_ONLYFORDAMTYPE, // brand can only go on obs with damtype v0
F_ONLYFORWEPSKILL, // brand can only go on obclass v0
// weapon/armour flags
F_EQUIPPED, // val0 = where it is equipped. CLEAR WHEN OB MOVED!
F_GOESON, // val0 = where it can be equipped.
F_GOESONMULTI, // ob is equipped on _ALL_ F_GOESON flags, rather than
// equipped on _ONE OF_ the.
F_BONUS, // val0=bonus/penalty to damage/armour. ie. +1 sword
F_THROWMISSILE, // weapon would make a good thrown missle - used by AI
F_UNIQUE, // only one may appear
F_GLYPH, // override the glyph with the first char of text.
// v0 is either NA (white) or colourid (C_xxx).
F_NOGLYPH, // this object doesn't appear normally
F_COSMETIC, // this object is mostly cosmetic, don't say 'you see xx'
F_NOPICKUP, // cannot pick this up
F_ATTACKABLE, // can attack this with 'A'
F_IMPASSABLE, // cannot walk past this if your size is between v0 and v1
// (inclusive)
F_REALLYIMPASSABLE, // even gaseous form etc won't let you get through
// this.
F_CRUSHABLE, // if you are bigger than size v0, walking on this crushes it
F_CAUSESCOUGH, // being in this ob's cell will make you cough unless
// immune to gas.
// v0 = con skillcheck difficulty.
F_BLOCKSVIEW, // if v0 = true, cannot see past this
// if v0 > 0, reduces your vision by v0.
F_BLOCKSLOF, // this object interrupts line of fire
F_THEREISHERE, // announce "there is xx here!", not "you see xx here"
// text[0] is punctuation to use.
F_OBDIETEXT, // text when the object dies
F_DIECONVERTTEXT, // text when the object converts. eg. "melts"
F_DIECONVERTTEXTPL, // text when the object converts, if there are more than 1. eg. "melt"
F_DIECONVERT, // text = what this turns into when dying
// v0 = radius to scatter new object in (0 or NA means
// just convert the object)
F_NOBLESS, // can't be blessed or cursed
F_NOQUALITY, // can't be masterwork / shoddy
F_CORPSEOF, // this is a corpse of montype val0.
// text is how it died.
F_DTCONVERT, // damtype val0 converts this to f->text
F_DTCREATEOB, // damtype val0 creates object f->text here
// v1 = radius to burst in
// v2 = dirtype
F_NODTCONVERT, // overrides DTCONVERT .
F_NOMATCONVERT, // overrides MATCONVERT .
F_MATCONVERT, // touching material id val0 converts this to f->text
F_MATCONVERTTEXT, // description when F_MATCONVERT happens. ie. "is consumed in flame"
F_MATCONVERTTEXTPL, // plural for matconverttext.
F_DTIMMUNE, // immune to damtype val0
F_DTRESIST, // half dam from damtype val0
F_DTVULN, // double dam from damtype val0
// if dam=0, set dam to textfield dice (eg.text="2d6")
F_MATIMMUNE, // immune to damage from obs with material 'v0'
F_MATVULN, // vulnarable to damage from obs with material 'v0'
// v1 = this % of damage is done. ie. 110%
F_DAMAGABLE, // this ob can be damaged via takedamage()
F_TINTED, // when worn on eyes, protects against bright lights
F_HASBRAND, // has the object mod v0 (ie. OM_FLAMESTRIKE)
F_HOLDCONFER, // gives flag v0+v1 when carried. v2 specifies if it must be id'd.
F_EQUIPCONFER, // gives flag v0+v1 when weilded/worn. v2 specifies if it must be id'd.
F_ACTIVATEPREFIX, // when activated, prefix this objects name with
// text
F_ACTIVATECONFER, // gives flag v0+v1 when activated. v2 specifies if it must be id'd.
F_CRITKNOCKDOWN, // lf knocks down victims on a critical hit
F_HITCONFER, // hitting with this gives flagid=v0
// with timeleft = text ("min-max")
// unless you pass a val1 skillcheck, diff val2
// MUST ALSO HAVE HITCONFERVALS.
F_HITCONFERVALS,// specifies values for conferred flag.
F_ACTIVATED, // val0 = is this object turned on?
F_GRENADE, // this object will drain charge when activated, then die
F_EXPLODEONDEATH, // explodes when it dies, deals TEXT damage.
// val1 = BIG means hit surrounding cells
// val2 = ifactivated, only explodes if activated.
F_EXPLODEONDAM, // explodes when it is damaged, deals TEXT damage.
// v0 = damage type which makes it explode.
// NA means 'any damage type'
// val1 = BIG means hit surrounding cells
// val2 = ifactivated, only explodes if activated.
F_FLASHONDEATH, // produce a bright flash when it dies,v0=range
F_FLASHONDAM, // produces a bright flash when it is damaged,v0=range,v2=ifacctivated
F_LASTDAMTYPE, // object equivilant of lf->lastdamtype
F_OPERONOFF, // operating this will just turn it on/off
F_OPERUSECHARGE, // operating this will use 1 charge
F_OPERNEEDTARGET, // need to ask for a target of type val0 when opering
// v1 is bitmask of:
// TR_NEEDLOS, TR_NEEDLOF, TR_NONE
// text is prompt
F_OPERNEEDDIR, // need to ask a direction when operating this. text is prompt
// tool flags
F_LIGHTSOURCE, // a light source like a torch, lantern etc
F_CHARGELOWMSG, // text = msg when charges are nearly out
F_CHARGEOUTMSG, // text = msg when charges are gone
F_HELPSCLIMB, // object gives v0 bonus to sc_climb checks.
// technology flags
F_TECHLEVEL, // v0 is a PR_xxx enum for tech usage skill
// what can you do with this object?
F_TAINTED, // will give food poisoning if you eat/drink it
F_PREPARED, // raw meat has been prepared using cooking skill
F_EDIBLE, // you can eat this. val1 = nutrition. 100 = a meal
// -1 means "nutrition is weight x abs(val1)"
// v2 = nutrition left when partially eaten
F_DRINKABLE, // you can drink this. val1 = nutrition. 100 = a meal
// -1 means "nutrition is weight x abs(val1)"
// if v2=DONTKILL, this object does NOT die when drunk.
F_OPERABLE, // can operate?
F_OPERWITHOUTID, // can operate without knowing what it is?
F_NOTRIED, // don't show '[tried]' or update knowledge
// after you have tried this object.
F_POURABLE, // can pour?
F_PUSHABLE, // can push this object
F_PICKLOCKS, // can pick locks? val0=% change,
// val1=b_false, f_dieonfail, f_bluntonfail
F_LOCKABLE,// this object can be locked
F_CANBEDIFFMAT, // v0 is different material id which this ob could be
// v1 is the chance of it being this material
F_CANBETRAPPED, // this object might start with a trap
// v0 = base pct chance
// v1 = extra pct chance every 5 levels
// v2 = max trap chance
F_TRAPPED, // this object HAS a trap.
// v0 is the trap object type
// v1 - 'curtime' when this trap was last triggered
// v2 = TRUE means we've spotted this.
F_TRAP, // this object _IS_ a trap. v0 is sc_disarm/sc_spot difficulty.
// (NA = impossible)
// if v1 = true, trap will go off if you fail your 2nd disarm
// check.
// v2 = sc_dodge difficulty
F_OBJECTTRAP, // this trap can go onto an object (door, chest, etc)
F_SMELLY, // lfs with enhacned scent can smell this object
// doors
F_DOOR, // this object is a door - ie. can open it
// v0 and v1 are like F_IMPASSABLE
F_OPEN, // is this door open?
F_LOCKED,// door is locked
// v1 is difficulty to disarm
F_JAMMED, // is this door jammed? v0 is # turns it'll take to open it.
F_SECRET, // this object is secret. v0 is sc_search difficulty
// to find it.
// NA means 'can never find this'
// stairs / teleporters / portals
F_CLIMBABLE, // this is a stiarcase, v0 = up/down/in
// also use this for portals
// OPTIONAL v1 = id of region to link to.
F_PIT, // this is a pit which we can fall down.
// v0 = up/down
//F_STAIRDIR//, // val0 = direcion
F_OPPOSITESTAIRS, // val0 = opposite kind of stairs
F_MAPLINK, // val0 = map id to link to.
// v1/v2 = x/y
// OR
// text = obid to link to
// ob interaction flags
F_REDUCEMOVEMENT, // time to move off here is multiplied by v0.
F_RESTRICTMOVEMENT, // must pass a diff=v0 STR check to move off it.
// if v1 is B_TRUE, then it takes 1 damage if you fail.
// if v2 is TRUE, it affects flying creatures
//
// for multiple objects, each one adds half its difficulty
F_RODSHAPED, // for sticks-to-snakes
F_SHARP, // does damage when you step on it. v0/1 are min/max dam
F_SCARY, // gives other lfs a penalty to morale checks against you,
// v0 = penalty amt.
F_SLIPPERY, // you might slip when stepping on it. v0 is amt
F_SLIPMOVE, // if someone slips on this, it will move to an adj cell
F_FLAMMABLE, // object will catch alight if burnt (ie fire damage)
// v0 = how long it will burn for
// text (optional) = what it will convert to
// instead of just being set alight
F_CANGETWET, // object will get F_WET if hit by water
// v0 = enum WETNESS. v1 = how long
F_WATERPROOF, // object doesn't get wet. note: overrides CANGETWET!
F_WET, // object is wet
F_RUSTED, // object is rusty
// v0 = enum RUSTINESS.
// object mods/effects
F_ONFIRE, // burning, also deals extra fire damage
// option text = xdx amount of damage.
F_ENCHANTED, // weapon also deals 'text' extra fire damage
F_HEADLESS, // for corpses. can go on LFs too.
F_MASTERWORK, // weps do higher damager, armour protects better
F_SHODDY, // weps do less damage, armour protects less.
// weapon flags
F_ATTACKVERB, // text=verb for attacking. ie. "hit" "slash" "sting" etc
// if v0/v1 are set, only use this text if dam pct is
// between v0 and v1.
// should always be singular
F_KILLVERB, // text=verb for a fatal attacking. ie. "kill" "behead"
// if v0/v1 are set, only use this text if dam pct is
// between v0 and v1.
// should always be singular
F_OBATTACKDELAY, // how long weapon takes to attack
F_USESSKILL, // weapon needs skill sk_v0
F_MAGICBOOST, // boost power of all spells by v0
F_CANHAVEOBMOD, // weapon can have obmod om_v0 applied
// optional: v1 is chance of randomly having it
F_ATTREQ, // requires attrib v0 to be at least v1
//F_DAMTYPE, // val0 = damage type
F_CRITCHANCE, // v0 = %chance of critical hit with this weapon
F_CRITPROTECTION, // v0 = %chance of preventing critical hits
//F_DAM, // v0 = damtype, text = 1d1+1
F_DAM, // v0 = damtype,
// v1=DR (this takes precedence)
F_MISSILEDAM, // val0 = dam if it hits (without speed multiplier)
F_TANGLEMISSILE, // this object will trip anyone it is thrown at
// (if it hits), unless they pass a SC_SLIP
// check of difficulty v0
// if V1/V2 are set, then F_RESTRICTMOVEMENT
// v1->v0, v2->v1 is added to this object after it hits.
F_ACCURACY, // 100 - val0 = modify to tohit% (ie. higher is better)
F_UNARMEDWEP, // this is not a real weapon, ie. claws, teeth etc
F_ARMOURPIERCE, // goes through armour
F_TWOHANDED, // weapon uses two hands to weild
F_NEEDSSPACE, // weapon needs space to swing - 75% chance of hitting
// a wall if used with < 3 empty cells around you
// gun flags
F_FIREARM, // this weapon is equipped in bp_secweapon, not _weapon.
F_FIRESPEED, // how fast this weapon shoots projectiles
F_AMMOOB, // v0 = what object this weapon fires. can have multiple types.
F_AMMOCAPACITY, // v0 = max ammo that can be loaded
F_RANGE, // range of projectile firing weapon
F_FIRETURNS, // # actions it takes to fire this gun
F_RELOADTURNS, // # actions it takes to reload this gun
// end gun flags
F_FLAMESTRIKE, // causes fires where you hit
F_BALANCE, // heals target if their maxhp < your maxhp
F_MERCIFUL, // puts to sleep instead of killing.
F_REVENGE, // causes damage based on your hp
F_HELPSREST, // makes you heal mp/hp faster when using 'R'
// reduces skillcheck difficulty by v0.
// optional v1 = how many less turns between
// skillchecks. should not go more than
// DEFAULTRESTHEALTIME.
// tech flags
F_RNDCHARGES, // ob starts with between val0 and val1 charges
// this will cause F_CHARGES to be filled in
F_CHARGES, // generally the number of uses left,v0=min, v1=max
F_DONTSHOWCHARGES, // don't show 'xx charges left' when id'd
F_RECHARGEWHENOFF, // get power back when you turn it off
F_RECHARGE, // get v0 charges back each turn.
F_REFILLWITH, // pour obj id val0 onto this to refill its charges
//
F_POWDER, // this item is a powder
// ob appearance flags
F_SHINY,
// armour flags
F_ARMOURRATING, // val0 * 2 = pct of damage reduced
F_SHIELD, // this is a shield - use special bodyhitchance code
F_OBHP, // val0 = object health, val1 = object maxhealth
F_OBHPDRAIN, // val0 = amt hp to lose each second. val1 = NA or damtype
// if no damtype specified, it will be DT_DIRECT
F_NOOBDAMTEXT, // don't anounce damage to this object
F_NOOBDIETEXT, // don't anounce destruction of this object
F_NODIECONVERTTEXT, // don't anounce when this object changes
// misc flags
F_LINKOB, // val0 = linked object id
F_LINKRACE, // val0 = linked race id
// scroll flags
F_LINKSPELL, // val0 = spell this scroll will cast when read
// v1 = spell power
// book flags
F_MANUALOF, // val0 = skill this book trains
F_LINKSCHOOL, // val0 = spellschool this book has spells from
// ob identification flags
F_HASHIDDENNAME, // whether this object class has a hidden name
// text is the name if you don't know what it is
F_IDENTIFIED, // whether this object is fully identified
F_KNOWNBAD, // you know this object is somehow bad
// bad flags
F_DEEPWATER, // v0 = depth.
F_WALKDAM, // val0 = damtype, text = dam per sec
F_WALKDAMBP, // v0 = bodypart, v1 = damtype, text = dam per sec
// if v2 == FALLTHRU, damage falls through to lf if
// no armour is there.
// abilities
F_NEEDSGRAB, // this ability needs to to grab someone first.
F_NOANNOUNCE, // don't announce when you gain/lose this ability
// magic
F_SPELLSCHOOL, // val0 = SPELLSCHOOL enum
F_SPELLLEVEL, // val0 = difficulty level of spell
F_VARPOWER, // can cast this spell at variable power level
// for spells with this flag, the MP cost goes up
// based on the power level.
F_MAXPOWER, // val0 = max power of this spell (1-10)
F_MPCOST, // v0=mp cost of spell. if missing, mpcost is splev^2
F_STAMCOST, // v0=stamina cost of ability. default is 0.
F_ONGOING, // this spell has an ongoing cost
F_CASTINGTIME, // this spell takes v0 turns to cast
F_EXTRADESC, // extra descriptions for this object
// v0 is the order in which these are displayed (0-5)
//F_SPELLLETTER, // text[0] = letter to cast this spell
F_AICASTTOFLEE, // AI can cast this spell to help flee/heal
// v0 is who to target
// v1 is pct chance of using this
F_AICASTTOATTACK, // AI can cast this spell to attack
// v0 is who to target
// v1 is pct chance of using this
F_AIBOOSTITEM, // ai will use this item to boost/buff itself.
// if using this on wands, update aiobok() !
F_AIHEALITEM, // ai will use this item when low on hp
F_AIFLEEITEM, // ai will use this item when fleeing
// if using this on wands, update aiobok() !
// object AND lifeform flags
F_NOSTRDAMMOD, // this object/lf does not have attacks modified
// using their strength
F_HARDNESS, // must do >= v0 damage to hurt this
// player only flags
F_DONEDARKMSG, // tells the game not to say 'it is very dark here'
F_DONELISTEN, // supress further 'you hear xx' messages this turn.
// lifeform flags / lf flags / monster flags
F_ALIGNMENT, // v0 = al_good, al_neutral, al_evil. default neutral.
F_PIETY, // for god lifeforms - tracks player's piety with them
F_MOVED, // lf purposely moved in their last turn.
F_PRAYEDTO, // player has prayed to this god before.
F_GAVEMONEY, // v0 tracks how much money we gave away this turn
// used for r_godgreed anger effects.
F_CLIMBING, // lf is currently climbing a wall
F_COUNTER, // generic counter flag for race abilities.
F_DEBUG, // debugging enabled
F_ACCURACYMOD, // modify your accuracy by val0
F_PLAYABLE, // player can select to be this race.
F_RACESLAY, // deal 4x damage to creatures of raceclass v0
F_VAMPIRIC, // when on a lf:
// successful bite attacks form this lf will heal it
// when on an object
// successful attacks with this weapon will heal lf
F_VEGETARIAN, // this lf will not eat meat.
F_PARTVEGETARIAN,// this lf will only eat if hunger >= 'hungry'
F_CARNIVORE, // this lf will only eat meat.
F_SHIELDPENALTY, // lower your acc/ev by val0 due to a cumbersome
// shield. lowered by sk_shield skill.
// v0 is accuracy penalty, v1 is evasion penalty.
F_ARMOURPENALTY, // lower your acc/ev by val0 due to cumbersome
// armour. lowered by sk_armour skill.
// v0 is accuracy penalty, v1 is evasion penalty.
F_LEVRACE, // at level v0, this race is promoted to race v1
// must apply this to the BASE race.
F_JOBATTRMOD, // add v1 to attr v0. only used in jobs.
F_ATTRMOD, // modify attribute val0 by val1. ie. 0=A_STR,1=-3
F_ATTRSET, // forces attribute val0 to be val1. ie. 0=A_STR,1=18
F_SIZE, // val0 = lf size (enum LFSIZE)
F_USEDPOISON, // this lf used a poisoned weapon to attack
F_RANDOMTALKPCT, // v0 = chance of randomly saying something each turn
F_RANDOMTALK, // EITHER:
// v0 = sp_xxx for what to say when we randomly talk.
// v1/v2 are min/max volume
// OR
// text = what to say
// v1/v2 are min/max volume
//
// can have multiple of these flags, if so then
// randomly select one each time.
F_RESTCOUNT, // val0 = how long you've been resting for
F_RESTHEALTIME, // val0 = how long to rest before healing hp
F_RESTHEALAMT, // val0 = how many hp to gain after resting x turns
F_RESTHEALMPAMT, // val0 = how many MP to gain after resting x turns
F_HOMEOB, // when this monster is auto generated on a level, place
// this object underneath them.
// text = object name
F_HOMELEVOB, // when this monster is auto generated on a level, place
// between v0 and v1 objects of type 'text' somewhere on
// the level.
F_SNEAK, // moving slowly on purpose to avoid slipping.
F_AUTOCMD, // val0 = how many times to repeat this
F_LASTCMD, // text[0] = last command performed, v0/1 = x/y of cell, v2=various
F_CANLEARN, // lf is able to learn skill val0
// v1 = max lev
F_STARTOB, // val0 = %chance of starting with it, text = ob name
// val1,2 = min/max amounts. if NA, min=max=1.
F_STARTOBDT, // val0 = %chance of starting with damtype val1
// option val2 = addition to map depth for rarity
// calculation
F_STARTOBCLASS, // val0 = %chance of starting with obclass val1
// option val2 = addition to map depth for rarity
// calculation
F_STARTOBRND, // val0 = %chance of starting with a random ob
// v1 = depth modifier. can use 'RANDOM'
F_CONTAINER, // this object is a container - you can use 'o'
// to take stuff out or put it in.
F_HOLDING, // this container is a xxx of holding and makes objects
// inside become weightless
F_STARTJOB, // val0 = %chance of starting with it, v1 = jobid
F_STARTSKILL, // val0 = skill id
F_STARTATT, // val0 = A_xxx, val0 = start bracket (ie. IQ_GENIUS)
// if text is set, it overrides val0.
// text can be:
// x (single number)
// x-y (range)
F_STARTASLEEPPCT, // v0=pct chance this mosnter starts off asleep
F_STARTHIDDENPCT, // val0 = pct chance auto-generated monster will
// start off hidden
F_CORPSETYPE, // text field specifies what corpse obtype to leave
F_CORPSEFLAG, // add flag v0 to our corpse.
// v1->v0, v2->v1, text->text
F_MYCORPSE, // text field contains obid of my corpse.
// (for ghosts)
F_NOCORPSE, // monster's body crumbles to dust after death
F_NOCTURNAL, // monster sleeps during the day
F_DIURNAL, // monster sleeps at night
F_LFSUFFIX, // text = suffix. eg. "skeleton"
F_VISRANGE, // how far you can see (in the light)
F_VISRANGEMOD, // modifications to visrange
F_NIGHTVISRANGEMOD, // modifications to nightvisrange
F_GUNTARGET, // current projectile weapon target
F_CASTINGSPELL, // set while the player is casting a spell
// for instant spells:
// v0 is spell id
// for noninstant spells:
// v0 is spell id
// v1 is spell power
// v2 is counter until casting
// text is: "targlfid;targobid;mapid;cellx;celly;"
F_AVOIDOB, // for AI - they will avoid walking on obid 'text'
// (text is a long)
// if v0 is not NA, then only avoid it if its blessed
// value == v0.
F_AVOIDOBTYPE, // AI won't walk on top of obtype v0.
// if v1 == B_TRUE, then avoid lfs weilding this
// object too.
F_AVOIDCELL, // AI won't walk on top of cell x/y = v0/v1
F_STAYINHABITAT, // lf will not walk onto a cell of a different
// habitat
F_STAYINROOM, // lf will not walk out of roomid v0
// if v0 is not set, we won't leave our current room.
// if v1 is set (not NA), then we are allowed to chase
// our targets out of the room.
F_FALLDISTANCE, // how many floors this lf has fallen through.
// ABILITY/SPELL FLAGS / ability flags / spell flags
F_FAILEDINSPECT, // lf has failed an inspect check for item id v0
F_TARGETTEDSPELL, // this spell needs you to specify a target cell
// v0 is the tt_targettype
F_BOOSTSPELL, // v0 is active boost spell, v1 is ongoing mpcost, v2 is power
F_SWOOPRANGE, // v0 = how far a flying creature can swoop
F_LOSLOF, // v0 = whether this spell needs line of sight
// v1 = whether this spell needs line of fire
// MONSTER AI FLAGS
F_CASTCHANCE, // this lf has v0% chance of using spell/abil
// (default is 15%)
F_DEMANDSBRIBE, // lf will demand gold from the player.
F_NOSWAP, // other mosnters won't swap with this one.
// cleared at start of turn.
F_VARLEVEL, // lf is generated with random level between
// 1 and its map dificulty/depth.
// if v0 is set, this is the max level.
F_MINION, // v0=lfid of minion
F_NOSCORE, // denotes that the player received 0 points.
// ie. cheating or they quit.
F_XPVAL, // force xp val for killing this lf to v0
// ...OR if applied to an ability...
// monsters with this abil/spell are worth
// v0 more xp.
F_XPMULTIPLY, // multiply xp val for killing this lf by v0
F_HIRABLE, // this job/lf can be recruited
F_HIREPRICE, // how much it costs to hire this lf.
F_NOHIRE, // this lf will not be hired.
F_NOJOBTEXT, // this lf's name is 'a xxx', not 'a xxx wizard' etc
F_LASTDIR, // this is the last direction we moved.
//F_OWNERLASTDIR, // for pets, this it the last dir our owner moved
// when we could see them.
F_ISPRISONER, // this lf wants to escape to the surface
F_PETOF, // this lf is a pet of lfid v0
// v1/2 = last known location of my owner.
// optional text is last known movement dir.
// note: can also go on corpse objects to show that this
// is the corpse of a pet.
F_SUMMONEDBY, // this lf was summoned by lfid v0. if they die, we
// vanish.
// v1 is lifetime left. this decrements each turn.
// when at zero, lf vanishes.
F_OWNSSHOP, // v0 is roomid of the shop which this shopkeeper owns.
F_GUARD, // this lf is a guard, who can be called by shopkeepers
F_HATESRACE, // lf will attack lfs with race=v0 or baseid=v0 on
// sight
F_HARMLESS, // it is safe to rest around this lf
F_RNDHOSTILE, // v0% chance of being hostile.
F_HOSTILE, // lf will attack the player if in sight
F_FRIENDLY, // lf will attack all non-players if in sight
F_WANTS, // lf will try to pick up object type val0. if
// val1 = B_COVETS, will even abandon attacks
// for it!
F_WANTSOBFLAG, // lf will look for obs with this flag. val1=covets
F_WANTSBETTERWEP, // lf will look for better weapons, val1=covets
F_WANTSBETTERARM, // lf will look for better armour, val1=covets
F_FLEEONDAM, // lf will run away instead of counterattacking
F_FLEEONHPPCT, // lf will run away if its hp drop to v0% or lower
F_NOFLEE, // lf will not run away
F_ATTACKRANGE, // v0/v1 = min/max celldist to stay away
// from f_targetlf (ie. lf we are attacking)
F_FOLLOWRANGE, // v0/v1 = min/max celldist to stay away
// from pet's master
F_TARGETLF, // lf will attack lfid v0. lastknown x/y is v1/v2
// optional text is last known movement dir.
F_IGNORECELL, // won't accept targetcells of v0=x v1=y
// this is cleared at start of turn.
F_TARGETCELL, // lf will go towards this place. val0=x,val1=y
// optional: v2 = mr_lf or mr_ob. text=lf or ob id.
F_STABBEDBY, // lf has been stabbed by lfid v0. can't be stabbed
// by them again until they go out of sight.
F_FLEEFROM, // lf will run away from this lf id
F_NOFLEEFROM, // lf can not get f_fleefrom lfid v0
// TEMP FLAGS
F_KILLEDBYPLAYER, // did the player kill this lf?
// monster noise flags
F_NOISETEXT, // val0 is a enum NOISETYPE
// val1 is the volume of the noise
// text is "verb^noun"
// eg. "shouts^a shout"
// if this flag occurs more than once with
// the same v0, a random one is selected.
F_SPELLCASTTEXT, // text is announcement for spellcast
// if text is empty, then don't announce
// this lf's spell casting at all.
// if v0 is set, only use text for spellid v0
// if v2 is 'appendyou' " at xxx" will
// be appended.
F_NODEATHANNOUNCE, // don't say 'the xx dies' if this lf dies
F_BEHEADED, // use special corpse drop code
F_MOVESPEED, // override default move speed
F_ACTIONSPEED, // override default action speed
F_SPELLSPEED, // override default spellcast speed (ie. movespeed)
F_RARITY, // val[0] = habitat, val[1] = rarity%
// val[2] = commonality (enum RARITY RR_xxx)
// NA means rr_common
F_NUMAPPEAR, // when randomly appearing, can have > 1. val[0] = min, val[1] = max
F_MINIONS, // val0 % chance of appearing with v1-v2 lf of type text
F_HITDICE, // text = xdy+z to roll for maxhp per level.
F_MAXHPMOD, // maxhp = pctof(v0, maxhp)
F_MPDICE, // val0: # d4 to roll for maxmp per level. val1: +xx
F_JOB, // val0 = player's class/job
F_GODOF, // text = what this lf is the god of. use capitals.
// if v0 is b_true, means this is a goddess
F_GODLIKES, // text = something this god likes (ie. incs piety)
F_GODDISLIKES, // text = something this god likes (ie. decs piety)
// for all sacrifice flags:
// v2: amt of piety for each sacrifice
// text: "the xxx disappears in yyyy"
// (yyyy is text)
// IS is replaced with "is" or "are"
// OB is replace with object name
F_SACRIFICEOBWITHFLAG, // v0 = can sacrifice obs with flag v0 to this go
F_SACRIFICEOB, // v0 = can sacrifice obtype v0 to this god
F_SACRIFICEOBCLASS, // v0 = can sacrifice obclass v0 to this god
F_NAME, // text = lf's name
F_XPMOD, // add/subtract this much from calculated xpval
F_BLOODOB, // text = type of object to drop for blood
F_DIESPLATTER, // this lf will splatter objcets of type 'text'
// when it dies.
// v0 = max distance to splatter (or UNLIMITED)
// text = type of object to splatter
F_OBESE, // double base weight for race!
F_ORIGRACE, // original player race (if you polymorphed)
F_ORIGJOB, // original player job (if you polymorphed)
F_POLYMORPHED, // lf has been polymorphed
F_RETAINHPONPOLY, // don't take on hp/mp of what you polymorph
// into
F_SHORTCUT, // spell keyboard shortcut.
// v0=slot (0-9)
// text=spell text
// for monsters
F_MPMOD, // this race gains/loses v0 mp each level
F_DOESNTMOVE, // this race doesn't move (but can still attack)
F_AQUATIC, // this race can attack normally in water and suffers no
// movement penalties
F_BODYPARTNAME, // for this race, bodypart v0 is called 'text'
F_HUMANOID, // this race can wear armour / use weapons
F_INSECT, // this race is classed as an insect
F_UNDEAD, // this race is classed as undead
F_COLDBLOOD, // this race is coldblooded
F_NOARMOURON, // this race can't wear armour on bodypart v0
// obviously doesn't make sense to have both this
// and f_nobodypart for the same body part.
F_NOBODYPART, // this race doesn't have bodypart val0
// if v0 is true or b_frominjury, you can regrow it
// via a healing potion.
F_NOINJURIES, // this race cannot sustain injuries.
F_NOPACK, // this race cannot hold objects
F_NOSPELLS, // this race cannot cast spells
F_INDUCEFEAR, // causes fear when you attack it
F_POISONCORPSE, // lf's corpse will be poisonous
F_AUTOCREATEOB, // produces obtype 'text' wherever it walks, v0=radius
// (only if ob of that type not already there)
F_PACKATTACK, // deal v0 extra damage of type v1 if there are
// v2 or more monsters of the same baseid
// next to the attacker
F_PHALANX, // gain v0 AR if v2 or more adj monsters matching f->text
F_MORALE, // gain +v0 in morale checks.
F_SPOTTED, // you have spotted hiding lf id v0. you lsoe this if they
// go out of sight.
F_TIMID, // monster will only move close if behind its target.
// special attack flags
F_AIMEDSTRIKE, // next attack is an aimed strike
F_COMBOSTRIKE, // lf is performing a combination strike
F_HEAVYBLOW, // next attack is a heavy blow
F_QUIVERINGPALM, // your next strike will be a quivpalm attack
F_TKTHROW, // when you throw an object, use your
// attrib = v0 and skilltype = v1
// rather than AGI and SK_THROWING like normal
F_TRUESTRIKE, // your attacks ALWAYS hit. turnsleft=v0
F_HURRICANESTRIKE, // lf is performing a hurricane strike
// INTRINSICS
F_MAGICARMOUR,// armour is magically boosted. f->text is the description
// ie 'magic armour', 'force field'
// v0 is power left.
F_ASLEEP, // lf is asleep.
// v1 is enum sleeptype st_xxx
// if v2 is set, means we are sleeping on
// purpose and will wake up when at full hp/mp/etc.
// ie. "resting"
F_ATTACHEDTO, // you are attached to lf id v0, and will move with it
F_AWARENESS, // you can see 360 degrees around yourself
F_BEINGSTONED,// turn to stone when v0 drops to zero. (drops 1/turn)
F_BLIND, // cannot see anything
F_CONFUSED, // move randomly about
F_DEAF, // cannot hear
F_NEEDOBFORSPELLS, // lf can only cast spells if it has object v0
F_CASTTYPE, // lf uses enum CASTTYPE v0 for spells
// optional v1 is colour for casttype-based animations
// (ie. spit spells)
F_CAFFEINATED, // can't sleep.
F_CANCAST, // can cast the spell val0 (need MP)
F_CANHEARLF, // you can hear lifeform id v0 (show their glyph)
// this flag does not get announced.
F_BLEEDABIL, // will automatically use the ability v0 when
// this lf starts bleeding.
F_BREATHWATER, // can breath normally underwater
F_CANWILL, // can cast the spell/ability val0 without using MP
// v1 is counter untiluse
// v2 is what you need to use it
// ie. when v1 == v2, ability is ready.
// text is other options, semicolon seperated:
// pw:xx; cast the spell at power xx
// dam:xdy+b; damage
// needgrab:xx; do you need to grab first?
// range:xx;
// gaze (this is a gaze spell)
F_CHARMEDBY,// you've been charmed by lf id v0
F_CONTROL,// you control polymorphs, teleports and createmonsters
F_DETECTAURAS, // autodetect bless/curse
F_DETECTLIFE, // autodetect nearby lifeforms in orthogonal dist v0
// if v1 is true, actual lf glyphs are shown.
// otherwise just an indicative size is shown
F_DETECTMAGIC, // autodetect magic/special objects
F_DETECTMETAL, // autodetect nearby metal
F_DETECTOBS, // autodetect nearby obs of type v1 in orthog dist v0
// v1 = NA means everything.
F_DISEASEIMMUNE, // lf can't be diseased
F_DRUNK, // v1 is drunknness - 1-5.
F_ENHANCESEARCH, // gives v0 bonus on search checks.
F_ENHANCESMELL, // can 'see' scents with v0 range.
F_EXTRADAM, // do 'text' extra damage of damtype v0 when you hit
// if v1 is TRUE, also deal extra damage based on
// the flagpile's F_BONUS flag.
F_EXTRAINFO, // knows extra info
F_EXTRALUCK, // lf gets +v0 to all skill checks!
// higher chance of rare objects
// lower chance of rare monsters
F_EXTRAMP, // lf has +v0 % extra maxmp
F_FEIGNINGDEATH, // lf is pretending to be dead
F_FLYING, // lf is flying
F_FASTACT, // modifier for action speed
F_FASTMETAB, // hunger counter increases faster, poison cures faster.
// v0 is multiplier.
F_FASTMOVE, // modifier for move speed
F_FASTACTMOVE, // modifier for action and move speed
F_POISONED, // has poisoning. v0 = poison type,
// v1 = power
// text = what from.eg'a bad egg'
F_FREEZINGTOUCH,// next thing touched turns to ice!
// v1 = power
// v2 is save difficulty
F_GRABBEDBY,// you've been grabbed by lf id v0
F_GRABBING, // you are grabbing lf id v0
F_HIDING, // lifeform is hiding. v0 is modifier to stealth checks.
F_ICESLIDE, // lf has "slide" spell active.
// v0 = timeleft (since 'lifetime' is used for FROMSPELL)
F_INJURY, // v0 = enum injury, v1 = where (enum bp), v2 = damtype
// text is desc, ie "rib is cracked"
F_INVISIBLE, // lifeform is invisible
F_INVULNERABLE,// immune to most damage
// this can apply to objects too!
F_QUICKBITE, // deals v0 d d1 + d2 damage when you hit a bleeding victim
// (bypasses armour)
F_GRAVBOOSTED,// cannot walk or throw stuff
F_GRAVLESSENED,// knockback maeks you go further, can jump further
F_MEDITATES, // meditates instead of sleeping.
F_NEEDSWATER, // cannot survive out of deep water
F_PAIN, // take damage if you walk. v0=damtype,text is damage (xdy+z).
// if text not set, default dam is 1d2
F_PARALYZED,// cannot do anything
F_PRONE, // lying on the ground
F_FROZEN, // made of ice
F_HOLYAURA, // holy aura - attacks deal holy damage to vulnerable
// enemies.
F_LEVITATING, // like flying but uncontrolled
F_MAGSHIELD,// magnetic shield
F_NAUSEATED, // lf has a stench penalty of v0 (-v0*10 to hit).
F_NONCORPOREAL,// can walk through walls
// when this comes from the passwall spell, 'obfrom'
// be set to the ot_s_passwall.
F_OMNIPOTENT, // knows extra info
F_PHOTOMEM, // you don't forget your surroundings
F_REGENERATES, // regenerate HP at val0 per turn
F_RESISTMAG, // immunity to magic effects. v0=amt (1-20)
F_MPREGEN, // regenerate MP at val0 per turn
F_RAGE, // you are enraged. v0/v1 will be set to player's old hp/maxhp
F_RETALIATE, // deal damage to anyone who hits you
// v0=ndice, v1=dsides, v2=damtype, text=obname
// text must have at least TWO words
F_RISEASGHOST, // become a ghost when you die.
F_SEEINDARK, // nightvis range is val0
F_SEEINVIS, // can see invisible things
F_SILENTMOVE, // lf makes no noise when walking/flying
F_STABILITY, // doesn't slip over
F_STAMREGEN, // boost stamina regeneration at 'text' per turn
// (this is a float)
F_STENCH, // creatures within v0 gain f_nauseated = v1
F_STUNNED, // cannot attack or cast spells
F_TREMORSENSE, // doesn't need eyes to see, can see in dark with v0
F_PRODUCESLIGHT, // produces light of val0 radius.
// (but not for obs in pack)
// if val2 is true, will only make light if ob
// is activated!
F_SLOWACT, // modifier for action speed
F_SLOWMETAB, // hunger counter increases slower, poison cures slower.
F_SLOWMOVE, // modifier for move speed
F_SLOWACTMOVE, // modifier for move and action speed
F_XRAYVIS, //val0=num of walls we can see through
F_CANSEETHROUGHMAT, //val0=kind of material you can see through
F_SPRINTING, // you are sprinting.
F_WINDSHIELD,// has a windshield protecting against missiles of speed
// v0 or lower.
F_DODGES, // you dodge missed attacks
F_NOTIME, // this lf's actions don't take time
F_PERCEPTION, // v0 = 0-20. perception level.
// skills
F_HASSKILL, // lf has skill v0 at level v1
F_PRACTICINGSKILL, // lf is pract skill v0
// COMBAT
F_MAXATTACKS, // v0 = min # attacks this lf can make per round
// v1 = max # attacks this lf can make per round
F_HASATTACK, // v0 = obid to use when attacking unarmed
// if v1 is set, it overrides DR(damagerating)
// if text is set, it overrides the damage
F_EVASION, // % chance of evading an attack
// healing/resting/training
F_HASNEWLEVEL, // we have a new xp lev, but haven't trained yet.
F_STATGAINREADY, // ready to increase str/int etc. v2 is how many times
// we can do it.
F_INTERRUPTED, // somethign interrupted our rest. stop!
F_EATING, // lf is eating obid v0
F_TRAINING, // are we training? cleared on any action other than rest.
// v2 = if not NA, it is the training counter.
// when it hits 0, you finish trainign.
F_RESTUNTILBETTER, // resting until we have full mp/hp/stam
//F_RESTUNTILHP, // resting until we have full hp
//F_RESTUNTILMP, // resting until we have full mp
F_RESTUNTILALLIES, // resting until allies have full hp
//
F_RUNNING, // are we running? (shift+dir)
// v0 is last dir moved.
// v1 is whether we have turned yet.
// nutrition
F_HUNGER, // val0 = hunger, higher = hungrier
// for jobs (job flags)
F_SELECTWEAPON, // this job gets to pick their starting weapon
F_NOPLAYER, // players can't pick this job
F_HASPET, // this job starts with a pet of race f->text
//F_IFPCT, // only add the NEXT job flag if rnd(1,100) <= v0.
//F_ELSE,
//F_IFPLAYER,
//F_IFMONSTER,
//F_ENDIFPLAYER,
//F_ENDIFMONSTER,
F_LEVSKILL, // at level v0, this job gains 1 point in skill v1
F_LEVABIL, // at level v0, this job gains f_canwill v1.
// v2 = how often you can do it (or NA for unlimited)
// text = options
F_LEVSPELL, // at level v0, this job gains f_cancast v1.
F_LEVSPELLSCHOOL, // at level v0, this job gains f_cancast for a spell
// of their choice from school v1. if v1 is SS_NONE, they can
// pick from any school they are skilled in.
// if v0 is >100, this triggers every (v0-100) levels.
F_LEVFLAG, // at level v0, this job gains flagid v1, flagval0=v2,
// flagtext = text
// vault flags
F_AUTODOORS, // automatically create at least one door
// v0 is pct chance of door (as opposed to empty
// doorway with no door).
F_AUTOPOPULATE, // fill this vault with obs/mons/pillars like normal rooms
F_NORANDOM, // this vault does not randomly appear
// OR this spell doesn't apear in books
F_VAULTATOB, // v0/1=x/y, v2=pctchance, text=obname
F_VAULTATLF, // v0/1=x/y, v2=pctchance, text=lfname
F_VAULTATCELL, // v0/1=x/y, v2=pctchance, text=cellname
F_VAULTATONEOF, // v0=thingtype, v1 = pctchance
// text=(x,y)(x,y)(x,y)...(x,y) thingname
F_VAULTBOX, // v0=thingtype, v1=pctchance, v2=fill?, text=x1,y1,x2,y2,thingname
F_VAULTENTERTEXT, // text = what to show when player enters
F_VAULTDLEVMIN, // v0 = mininum map depth/difficulty for this vault
F_VAULTDLEVMAX, // v0 = maximum map depth/difficulty for this vault
F_VAULTEXIT, // v0/1=x,y for exit.
F_VAULTGOESIN, // this vault randomly appears in habitat type v0.
// can be repeated multiple times
// if a vault doesnt have this flag, it can go anywhere
F_VAULTISPLAYERSTART, // player can start in this vault
F_VAULTISSHOP, // this vault is a shop, so add f_shopitem to objects
// here.
F_VAULTISSHRINE, // this vault is a godstone shrine
F_VAULTRARITY, // v0=rr_xxx
F_VAULTSCATTER, // v0=thingtype, v1=pctchance
// text=x1,y1,x2,y2,mincount-maxcount,thingname
// if maxcount is PCT, mincount is a percentage
// of the total space.
F_VAULTMAYROTATE, // may rotate this vault in 90degree increments.
F_VAULTRANDOMMAP, // v0=minwidth, v1=minheight. this vault's map is
// v0/1 can be NA.
// just a normal random room
F_KEEPMARGIN, // this vault must be at least v0 from e/w of map
// and at least v1 from n/s of map
F_NULL = -1
};
// move reasons
enum MOVEREASON {
MR_OTHER,
MR_LF,
MR_OB,
};
// hunger levels
enum HUNGER {
H_STUFFED = -2,
H_FULL = -1,
H_NONE = 0,
H_PECKISH = 1,
H_HUNGRY = 2,
H_VHUNGRY = 3,
H_STARVING = 4,
H_STARVED = 5
};
// injuries
enum INJURY {
IJ_NONE,
// bashing
IJ_ANKLESWOLLEN,
IJ_HANDSWOLLEN,
IJ_BLACKEYE,
IJ_CONCUSSION,
IJ_FINGERBROKEN,
IJ_LEGBROKEN,
IJ_LEGBRUISE,
IJ_NOSEBROKEN,
IJ_RIBBROKEN, // can be from explosive too
IJ_RIBCRACKED, // can be from explosive too
IJ_SHOULDERDISLOCATED,
IJ_TORSOBRUISED,
IJ_TORSOBRUISEDBAD,
IJ_WINDED,
IJ_WINDPIPECRUSHED,
// slashing
IJ_ARTERYPIERCE,
IJ_CHESTBLEED,
IJ_HAMSTRUNG,
IJ_HANDBLEED,
IJ_LEGBLEED,
IJ_TENDONCUT,
IJ_FINGERMISSING,
IJ_EYELIDSCRAPED,
IJ_EYEDESTROYED,
// explosive
IJ_EARSRINGING,
IJ_HANDMISSING,
IJ_LUNGCOLLAPSED,
};
#define PIETYPRAYLOSS 75
#define PIETY_MIN -200
#define PIETY_MAX 400
enum PIETYLEV {
PL_ENRAGED = -4,
PL_FURIOUS = -3,
PL_ANGRY = -2,
PL_TOLERATED = -1,
PL_INDIFFERENT = 0,
PL_PLEASED = 1,
PL_DELIGHTED = 2,
PL_ECSTATIC = 3,
};
enum LIGHTLEV {
L_PERMDARK = -1,
L_NOTLIT = 0,
L_TEMP = 1,
L_PERMLIGHT = 2,
};
// spell targets
enum SPELLTARGET {
ST_VICTIM, // cast at victim
ST_ADJVICTIM, // cast at victim who is next to us
ST_SELF, // cast at myself
ST_ADJSELF, // cast at self, while next to victim
ST_ANYWHERE, // cast anywere
ST_SPECIAL, // spell targetting will be hardcoded
};
// errors
enum ERROR {
E_OK = 0,
E_WALLINWAY = 1,
E_LFINWAY,
E_NOSPACE,
E_BADCLIMBDIR,
E_STOPCLIMBING,
E_SELNOTHING,
E_ALREADYUSING,
E_WEARINGSOMETHINGELSE,
E_NOUNARMEDATTACK,
E_NOTEQUIPPED,
E_NOPICKUP,
E_STUCK,
E_MONSTERNEARBY,
E_NOEFFECT,
E_FAILED,
E_WRONGCELLTYPE,
E_OBINWAY,
E_TOOHEAVY,
E_TOOHARD,
E_NOHANDS,
E_NOPACK,
E_INSUBSTANTIAL,
E_WRONGOBTYPE,
E_CURSED,
E_NOLOS,
E_NOLOF,
E_IMPOSSIBLE,
E_NOTARGET,
E_NOAMMO,
E_GRAVBOOSTED,
E_NOMP,
E_NOSTAM,
E_AVOIDOB,
E_FROZEN,
E_TOOBIG,
E_NOTREADY,
E_BLIND,
E_GRABBEDBY,
E_CANTMOVE,
E_NOTKNOWN,
E_TOOPOWERFUL,
E_NEEDGRAB,
E_DOORINWAY,
E_NOCANNIBUL,
E_LOWCON,
E_LOWDEX,
E_LOWIQ,
E_LOWSTR,
E_LOWCHA,
E_LOWWIS,
E_WONT,
E_OFFMAP,
E_STUNNED,
// charm failure reasons
// LOWIQ
E_UNDEAD,
E_DRUNK,
//
E_NOBP,
E_DOESNTFIT,
E_VEGETARIAN,
E_PARTVEGETARIAN,
E_CARNIVORE,
E_NOOB,
E_LEVITATING,
E_PRONE,
E_PENTAGRAM,
E_SWIMMING,
E_CLIMBING,
E_DANGEROUS,
E_INJURED,
};
enum COMMAND {
CMD_AIM,
CMD_CLOSE,
CMD_COMMS,
CMD_DOWN,
CMD_DROP,
CMD_DROPMULTI,
CMD_EAT,
CMD_FIRE,
CMD_FIRENEW,
CMD_FORCEATTACK,
CMD_HELP,
CMD_INFOARMOUR,
CMD_INFOKNOWLEDGE,
CMD_INFOPLAYER,
CMD_INV,
CMD_LOOKAROUND,
CMD_LOOKHERE,
CMD_MAGIC,
CMD_MEMMAGIC,
CMD_MSGHIST,
CMD_OFFER,
CMD_OPERATE,
CMD_PICKLOCK,
CMD_PICKUP,
CMD_POUR,
CMD_QUAFF,
CMD_QUIT,
CMD_READ,
CMD_REST,
CMD_RESTFULL,
CMD_SAVEQUIT,
CMD_TAKEOFF,
CMD_THROW,
CMD_UP,
CMD_WEAR,
CMD_WEILD,
};
typedef struct npcname_s {
char *name;
int valid;
} npcname_t;
typedef struct coord_s {
int x,y;
} coord_t;
// command types
typedef struct command_s {
enum COMMAND id;
char ch;
char *desc;
struct command_s *next, *prev;
} command_t;
enum REGIONTYPE {
RG_WORLDMAP,
RG_FIRSTDUNGEON,
RG_HEAVEN,
RG_PIT,
};
enum HABITAT {
H_DUNGEON = 1,
H_FOREST = 2,
H_HEAVEN = 3,
H_PIT = 4,
H_VILLAGE = 5,
H_ALL = 999
};
typedef struct regiontype_s {
enum REGIONTYPE id;
enum HABITAT defaulthabitat;
char *name;
int maxdepth;
int stairsperlev;
int deeperdir;
int majorbranch;
struct regiontype_s *next, *prev;
} regiontype_t;
enum REGIONTHING {
RT_HABITAT, // val is habitat
RT_REGIONLINK, // val is enum regiontype to link to.
// what is stair object type
RT_VAULT, // what is vaultname
RT_RNDVAULTWITHFLAG, // val is wantedflag
};
typedef struct regionthing_s {
int depth; // only need depth OR x,y
int x,y;
enum REGIONTHING whatkind;
int value;
char *what;
} regionthing_t;
#define MAXOUTLINETHINGS 60
typedef struct regionoutline_s {
int id;
regiontype_t *rtype;
regionthing_t thing[MAXOUTLINETHINGS];
int nthings;
struct regionoutline_s *next, *prev;
} regionoutline_t;
// a region is a link of a regiontype and an outline
typedef struct region_s {
int id;
regiontype_t *rtype;
regionoutline_t *outline;
struct region_s *parentregion;
int nthings; // is this used???
struct region_s *next, *prev;
} region_t;
typedef struct habitat_s {
enum HABITAT id;
char *name;
int randthingpct; // % chance each empty cell has something
int randobpct; // % chance that 'something' is an ob rather than monster
int randvaultpct; // % chance that a room will be a vault
int maxvisrange;
enum CELLTYPE emptycelltype,solidcelltype;
struct habitat_s *next, *prev;
} habitat_t;
typedef struct room_s {
int id;
int x1,y1,x2,y2;
struct vault_s *vault;
int exitslinked; // don't need to save this.
} room_t;
typedef struct map_s {
int id;
region_t *region;
int depth;
int lit;
struct room_s room[MAXROOMS];
int nrooms; // how many rooms on this map
char *name; // name of this map
habitat_t *habitat;
long lastplayervisit;
unsigned int seed;
int w,h; // width/height of this map
struct cell_s *cell[MAX_MAPW*MAX_MAPH]; // list of cells in this map
int nextmap[MAXDIR_MAP]; // which map is in each direction
int beingcreated;
int nfixedrooms; // used for map creation only, not saved.
struct lifeform_s *lf,*lastlf;
struct flagpile_s *flags;
struct map_s *next, *prev;
} map_t; //////////////// remember to modify save/load for new props!!
#define MAXVAULTARGS 10
enum VAULTSTATE {
VS_ALLOCATED,
VS_NOID,
VS_LOADING,
VS_LOADINGMAP,
VS_LOADINGLEGEND,
VS_LOADINGFLAGS,
};
enum VAULTTHING {
VT_NONE,
VT_EXIT,
VT_OB,
VT_LF,
VT_CELL,
};
typedef struct vlegend_s {
char ch;
enum VAULTTHING tt;
char *what;
int pct;
struct vault_s *vault;
struct vlegend_s *next, *prev;
} vlegend_t;
// in map[0], data is the real data
// in others, data is an index into map[0]
typedef struct vaultmap_s {
int data[MAX_MAPW*MAX_MAPH];
int mlen;
int w,h;
} vaultmap_t;
typedef struct vault_s {
char *filename;
char *id;
int numid;
int valid;
int state;
struct vaultmap_s map[4];
int nmaps;
struct vlegend_s *legend, *lastlegend;
struct vault_s *next, *prev;
struct flagpile_s *flags;
} vault_t;
typedef struct glyph_s {
int ch;
int colour;
} glyph_t;
typedef struct hiddennamewithcol_s {
char *name;
enum COLOUR col;
} hiddennamewithcol_t;
typedef struct cell_s {
map_t *map; // pointer back to map
int x,y; // map coords
struct room_s *room;
struct celltype_s *type;
struct obpile_s *obpile;
enum LIGHTLEV lit;
enum LIGHTLEV origlit; // for timed light
enum LIGHTLEV lastlit;
habitat_t *habitat;
int origlittimer;
int littimer;
char *writing;
int writinglifetime;
// lifeform pile
struct lifeform_s *lf;
// known to player?
int known;
struct glyph_s knownglyph;
int knowntime;
// FOR CONSTRUCTION
int visited;
int filled;
} cell_t;
typedef struct celltype_s {
int id; // eg. dungeonfloor, wall, door
struct glyph_s glyph;
/*
char glyph; // how to display it
int colour; // which colour?
*/
char *name; // name of cell type
int solid; // can you walk through it?
int transparent; // can you see through it?
int floorheight; // 0 is default. <0 is low.
struct material_s *material;
struct flagpile_s *flags;
struct celltype_s *next, *prev;
} celltype_t;
typedef struct raceclass_s {
enum RACECLASS id;
char *name;
char *pluralname;
enum SKILL skill;
struct raceclass_s *next, *prev;
} raceclass_t;
typedef struct race_s {
enum RACE id;
enum RACE baseid;
struct raceclass_s *raceclass;
struct material_s *material;
char *name;
char *desc;
struct glyph_s glyph;
float weight;
struct flagpile_s *flags;
// speed modifiers
// hit dice
struct race_s *next, *prev;
} race_t;
typedef struct lifeform_s {
int id;
int controller;
struct race_s *race;
int level;
int newlevel;
long xp,skillxp;
int skillpoints;
int hp,maxhp;
int mp,maxmp;
float stamina;
int alive;
char *lastdam;
char *killverb;
struct material_s *material;
enum DAMTYPE lastdamtype;
int timespent;
int sorted;
int att[MAXATTS];
int baseatt[MAXATTS];
float forgettimer;
struct obpile_s *pack;
struct flagpile_s *flags;
int created; // set to TRUE once lf creation is done.
int polyrevert; // about to revert form a polymorph?
int turnsskipped; // don't need to save this
// for loading
long oblist[MAXPILEOBS];
int x,y;
int facing; // which way are we facing
int losdirty;
int nlos;
cell_t **los;
int *viscell;
int visw;
int visrange;
int eyeadjustment; // have your eyes adjusted to the dark?
// your nightvision is increased by eyeadj / 10
// max is MAX_EYEADJ
// set to TRUE after lf has being created
int born;
// for ai movement - don't need to save.
struct cell_s *prevcell[2];
struct cell_s *cell;
struct lifeform_s *next, *prev;
} lifeform_t;
typedef struct obpile_s {
lifeform_t *owner;// } Only one of
cell_t *where; // } these should be
struct object_s *parentob; // } filled in
struct object_s *first,*last;
// for loading
long oblist[MAXPILEOBS];
} obpile_t;
typedef struct flagpile_s {
lifeform_t *owner;
struct object_s *ob;
struct flag_s *first,*last;
struct flag_s *item[MAXFLAGS];
int nitems;
} flagpile_t;
typedef struct altflagval_s {
enum FLAG id;
int val[3];
char *text;
} altflagval_t;
typedef struct flag_s {
enum FLAG id;
int nvals;
int val[3];
char *text;
struct altflagval_s *altval; // don't need to save this.
enum FLAGCONDITION condition;
int chance;
long obfrom; // for conferred flags, link to object->id. -1 if not conferred.
// also used for godgifts, in which case it is thr race->id of
// the god who gifted you this flag.
//
int known;
int lifetime;
struct flagpile_s *pile;
struct flag_s *next, *prev;
} flag_t;
typedef struct material_s {
enum MATERIAL id;
char *name;
float weightrating;
struct flagpile_s *flags;
struct material_s *next,*prev;
} material_t;
typedef struct skill_s {
enum SKILL id;
char *name;
char *desc;
enum SKILLLEVEL skilldesclev[MAXSKILLLEVEL*2];
char *skilldesctext[MAXSKILLLEVEL*2];
int skilldescmsg[MAXSKILLLEVEL*2];
int nskilldesc;
int traintime;
struct skill_s *next, *prev;
} skill_t;
typedef struct hiddenname_s {
enum OBCLASS obclass;
char *text;
int used;
struct hiddenname_s *next, *prev;
} hiddenname_t;
#define MAXRECIPEINGREDIENTS 5
typedef struct recipe_s {
int ningredients;
enum OBTYPE ingredient[MAXRECIPEINGREDIENTS];
int count[MAXRECIPEINGREDIENTS];
int consume[MAXRECIPEINGREDIENTS];
enum OBTYPE result;
struct recipe_s *next, *prev;
} recipe_t;
typedef struct knowledge_s {
enum OBTYPE id;
char *hiddenname;
int known;
struct knowledge_s *next, *prev;
} knowledge_t;
typedef struct job_s {
enum JOB id;
char *name;
char *desc;
flagpile_t *flags;
struct job_s *next, *prev;
} job_t;
#define MAXOCNOUNS 5
typedef struct objectclass_s {
enum OBCLASS id;
enum RARITY rarity;
char *name;
char *desc;
char *noun[MAXOCNOUNS];
int nnouns;
glyph_t glyph;
struct flagpile_s *flags;
struct objectclass_s *next, *prev;
} objectclass_t;
typedef struct objecttype_s {
enum OBTYPE id;
char *name;
char *desc;
struct objectclass_s *obclass;
material_t *material;
enum LFSIZE size;
float weight; // in kilograms
struct flagpile_s *flags;
struct objecttype_s *next, *prev;
} objecttype_t;
typedef struct object_s {
long id; // unique for every ob in the game!
struct objecttype_s *type;
struct obpile_s *pile; // reverse pointer back to pile
// these variables are initially
// inherited from objecttype:
material_t *material;
float weight; // in kilograms
// flags
// these variables are NOT inherited
char *inscription;
char letter;
enum BLESSTYPE blessed;
int blessknown;
int amt; // for stackable objects
long birthtime;
flagpile_t *flags;
struct obpile_s *contents;
struct object_s *next, *prev;
} object_t;
// wetness
enum WETNESS {
W_DRY = 0,
W_DAMP = 1,
W_WET = 2,
W_SOAKED = 3,
};
enum RUSTINESS {
R_RUSTY = 1,
R_VRUSTY = 2,
R_TRUSTY = 3,
};
enum OBMOD {
OM_BLOODSTAINED,
OM_ENCHANTED,
OM_FLAMING,
OM_FROZEN,
OM_HEADLESS,
OM_MASTERWORK,
OM_POISONED,
OM_SHODDY,
OM_WET1,
OM_WET2,
OM_WET3,
OM_RUSTY1,
OM_RUSTY2,
OM_RUSTY3,
};
#define MAXOBMODS 4
enum BRAND {
BR_BALANCE,
BR_MERCY,
BR_NIMBLENESS,
BR_FEEBLENESS,
BR_FLIGHT,
BR_GIANTSTRENGTH,
BR_HEALTH,
BR_IMPACT,
BR_THINKING,
BR_KNOWLEDGE,
BR_LEVITATION,
BR_LIFESUCK,
BR_FEATHERFALL,
BR_ANTIMAG,
BR_CONCEALMENT,
BR_SHARPNESS,
BR_PYROMANIA,
BR_REVENGE,
BR_SHADOWS,
BR_SLOTH,
BR_SPEED,
BR_STEALTH,
BR_POWER,
BR_SWIFTNESS,
BR_TELEKINESIS,
BR_TELEPATHY,
BR_WEAKNESS,
BR_SLAY_ANIMAL,
BR_SLAY_DRAGON,
BR_SLAY_MAGIC,
BR_SLAY_PLANT,
BR_SLAY_UNDEAD,
};
typedef struct brand_s {
enum BRAND id;
char *description;
char *suffix;
flagpile_t *flags;
enum BODYPART bp;
struct brand_s *next, *prev;
} brand_t;
typedef struct obmod_s {
enum OBMOD id;
char *prefix;
flagpile_t *flags;
struct obmod_s *next, *prev;
} obmod_t;
typedef struct choice_s {
char ch;
char *text; // what you type to select this one
char *desc; // what is displayed on the screen
char *longdesc; // what to display once you've selected this
void *data;
int heading;
int valid; // used in askchoicestr
} choice_t;
#define MAXPROMPTQUESTIONS 5
typedef struct prompt_s {
char *q[MAXPROMPTQUESTIONS];
int nqs;
int whichq;
void *result;
choice_t choice[MAXCHOICES];
int selection;
int nchoices;
int maycancel;
} prompt_t;
#endif