/* ************************************************************************ * File: structs.h Part of CircleMUD * * Usage: header file for central structures and contstants * * * * All rights reserved. See license.doc for complete information. * * * * Copyright (C) 1993 by the Trustees of the Johns Hopkins University * * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * ************************************************************************ */ /* Archipelago changes by Alastair J. Neil Copyright (C) 1993, 94, 95, 96 */ #include <sys/types.h> typedef signed char sbyte; typedef unsigned char ubyte; typedef signed short int sh_int; typedef unsigned short int ush_int; typedef char bool; typedef char byte; #define LEVEL_IMPL 227 #define LEVEL_ASS_IMPL 226 #define LEVEL_GRGOD 223 #define LEVEL_GOD 220 #define LEVEL_MBUILDER 215 #define LEVEL_BUILDER 210 #define LEVEL_IMMORT 210 #define LEVEL_FREEZE LEVEL_GRGOD #define SPEC_ARRIVE -1 #define SPEC_MOBACT -2 #define NUM_OF_DIRS 6 #define PULSE_ZONE 40 #define PULSE_MOBILE 40 #define PULSE_ROOM 32 #define PULSE_OBJECT 50 #define PULSE_VIOLENCE 6 #define WAIT_SEC 4 #define WAIT_ROUND 4 #define SMALL_BUFSIZE 1024 #define LARGE_BUFSIZE 32768 #define MAX_STRING_LENGTH 16284 #define MAX_INPUT_LENGTH 1024 #define MAX_MESSAGES 200 #define MAX_ITEMS 153 #define MAX_NAME_LENGTH 15 #define MAX_PWD_LENGTH 10 /* Used in char_file_u *DO*NOT*CHANGE* */ #define HOST_LEN 30 /* Used in char_file_u *DO*NOT*CHANGE* */ #define MESS_ATTACKER 1 #define MESS_VICTIM 2 #define MESS_ROOM 3 #define SECS_PER_REAL_MIN 60 #define SECS_PER_REAL_HOUR (60*SECS_PER_REAL_MIN) #define SECS_PER_REAL_DAY (24*SECS_PER_REAL_HOUR) #define SECS_PER_REAL_YEAR (365*SECS_PER_REAL_DAY) #define SECS_PER_MUD_HOUR 75 #define SECS_PER_MUD_DAY (24*SECS_PER_MUD_HOUR) #define SECS_PER_MUD_MONTH (35*SECS_PER_MUD_DAY) #define SECS_PER_MUD_YEAR (17*SECS_PER_MUD_MONTH) /* The following defs are for obj_data */ /* For 'type_flag' */ #define ITEM_LIGHT 1 #define ITEM_SCROLL 2 #define ITEM_WAND 3 #define ITEM_STAFF 4 #define ITEM_WEAPON 5 #define ITEM_FIREWEAPON 6 #define ITEM_MISSILE 7 #define ITEM_TREASURE 8 #define ITEM_ARMOR 9 #define ITEM_POTION 10 #define ITEM_WORN 11 #define ITEM_OTHER 12 #define ITEM_TRASH 13 #define ITEM_TRAP 14 #define ITEM_CONTAINER 15 #define ITEM_NOTE 16 #define ITEM_DRINKCON 17 #define ITEM_KEY 18 #define ITEM_FOOD 19 #define ITEM_MONEY 20 #define ITEM_PEN 21 #define ITEM_BOAT 22 #define ITEM_FOUNTAIN 23 #define ITEM_ROD 24 #define ITEM_CANTRIP 25 #define ITEM_PHILTRE 26 #define ITEM_EXLIXIR 27 #define ITEM_SRTLIGHT 28 #define ITEM_SCABBARD 29 #define ITEM_BELT 30 #define ITEM_VIS 31 /* Bitvector For 'wear_flags' */ #define ITEM_TAKE (1 << 0) #define ITEM_WEAR_FINGER (1 << 1) #define ITEM_WEAR_NECK (1 << 2) #define ITEM_WEAR_BODY (1 << 3) #define ITEM_WEAR_HEAD (1 << 4) #define ITEM_WEAR_LEGS (1 << 5) #define ITEM_WEAR_FEET (1 << 6) #define ITEM_WEAR_HANDS (1 << 7) #define ITEM_WEAR_ARMS (1 << 8) #define ITEM_WEAR_SHIELD (1 << 9) #define ITEM_WEAR_ABOUT (1 << 10) #define ITEM_WEAR_WAIST (1 << 11) #define ITEM_WEAR_WRIST (1 << 12) #define ITEM_WIELD (1 << 13) #define ITEM_HOLD (1 << 14) #define ITEM_THROW (1 << 15) #define ITEM_WEAR_EYES (1 << 16) #define ITEM_WEAR_EARS (1 << 17) #define ITEM_WEAR_MOUTH (1 << 18) #define ITEM_WEAR_BACK (1 << 19) #define ITEM_WEAR_SCABBARD (1 << 20) /* UNUSED, CHECKS ONLY FOR ITEM_LIGHT #define ITEM_LIGHT_SOURCE 65536 */ /* Bitvector for 'extra_flags' */ #define ITEM_GLOW (1 << 0) #define ITEM_HUM (1 << 1) #define ITEM_DARK (1 << 2) #define ITEM_LOCK (1 << 3) #define ITEM_EVIL (1 << 4) #define ITEM_INVISIBLE (1 << 5) #define ITEM_MAGIC (1 << 6) #define ITEM_NODROP (1 << 7) #define ITEM_BLESS (1 << 8) #define ITEM_ANTI_GOOD (1 << 9) /* not usable by good people */ #define ITEM_ANTI_EVIL (1 << 10) /* not usable by evil people */ #define ITEM_ANTI_NEUTRAL (1 << 11) /* not usable by neutral people */ #define ITEM_NORENT (1 << 12) /* not allowed to rent the item */ #define ITEM_NODONATE (1 << 13) /* not allowed to donate the item */ #define ITEM_NOINVIS (1 << 14) /* not allowed to cast invis on */ #define ITEM_2HANDED (1 << 15) /* 2-handed weapon flag */ #define ITEM_EQUIPED (1 << 16) /* equipedab flag */ #define ITEM_FRAGILE (1 << 17) /* item especially succeptible to damage */ #define ITEM_RESIZED (1 << 18) /* whether item has been resized or not*/ #define ITEM_FERROUS (1 << 19) /* is item made from iron.. */ #define ITEM_GODONLY (1 << 20) /* to flag god items */ #define ITEM_PULLABLE (1 << 21) /* item can be pulled like a cart */ #define ITEM_TEST_ONLY (1 << 22) /* item cannot be rented */ /* Some different kind of liquids */ #define LIQ_WATER 0 #define LIQ_BEER 1 #define LIQ_WINE 2 #define LIQ_ALE 3 #define LIQ_DARKALE 4 #define LIQ_WHISKY 5 #define LIQ_LEMONADE 6 #define LIQ_FIREBRT 7 #define LIQ_LOCALSPC 8 #define LIQ_SLIME 9 #define LIQ_MILK 10 #define LIQ_TEA 11 #define LIQ_COFFE 12 #define LIQ_BLOOD 13 #define LIQ_SALTWATER 14 #define LIQ_CLEARWATER 15 /* for containers - value[1] */ #define CONT_CLOSEABLE (1 << 0) #define CONT_PICKPROOF (1 << 1) #define CONT_CLOSED (1 << 2) #define CONT_LOCKED (1 << 3) #define CONT_SEETHRU (1 << 4) #define CONT_ONEWAY (1 << 5) /* event types */ #define EVENT_IGNORE 0 #define EVENT_COMBAT 1 #define EVENT_SPELL 2 #define EVENT_TELEPORT 3 #define EVENT_ARRIVE 4 #define EVENT_LEAVE 5 #define EVENT_CART_ARRIVE 6 #define EVENT_CART_LEAVE 7 #define EVENT_LOOT 8 #define EVENT_ROOM_DAMAGE 9 #define EVENT_OBJTIMER 10 #define EVENT_ATTACK 11 #define EVENT_REBOOT 12 struct event_type { int event; int info1; int info2; int info3; int info4; char *arg; void *subject; void *target; struct event_type *next;}; struct list_index_type { char *entry; int index; char* components; }; struct dual_list_type { char *singular; char *plural; }; struct color_list_type { char *low; char *high; }; struct extra_descr_data { char *keyword; /* Keyword in look/examine */ char *description; /* What to see */ struct extra_descr_data *next; /* Next in list */ }; #define MAX_OBJ_AFFECT 4 /* Used in OBJ_FILE_ELEM *DO*NOT*CHANGE* */ #define OBJ_NOTIMER -7000000 struct obj_flag_data { int value[8]; /* Values of the item (see list) */ byte type_flag; /* Type of item */ int wear_flags; /* Where you can wear it */ long extra_flags; /* If it hums,glows etc */ int weight; /* Weigt what else */ int cost; /* Value when sold (gp.) */ int cost_per_day; /* Cost to keep pr. real day */ int timer; /* Timer for object */ long bitvector; /* To set chars bits */ }; struct obj_flag2_data { sbyte light; /* how much light it produces */ byte aff_timer; /* timer for char affects */ byte no_use_timer; /* timer for object down time */ byte aff_dur; /* max duration of char affects */ byte no_use_dur; /* max duration of object down time */ long bitvector_aff; /* Store the bitvector here */ long perm_aff; /*permanant bitvector affects*/ }; /* Used in OBJ_FILE_ELEM *DO*NOT*CHANGE* */ struct obj_affected_type { byte location; /* Which ability to change (APPLY_XXX) */ sbyte modifier; /* How much it changes by */ }; /* ======================== Structure for object ========================= */ struct obj_data { sh_int item_number; /* Where in data-base */ sh_int in_room; /* In what room -1 when conta/carr */ struct obj_flag_data obj_flags;/* Object information */ struct obj_affected_type affected[MAX_OBJ_AFFECT]; /* Which abilities in PC to change */ char *name; /* Title of object :get etc. */ char *description ; /* When in room */ char *short_description; /* when worn/carry/in cont. */ char *action_description; /* What to write when used */ struct extra_descr_data *ex_description; /* extra descriptions */ struct char_data *carried_by; /* Carried by :NULL in room/conta */ struct char_data *worn_by; /* worn by :NULL in room/conta/invent*/ struct follow_type *pulled_by; /* pulled by: for carts */ struct obj_data *in_obj; /* In what object NULL when none */ struct obj_data *contains; /* Contains objects */ struct obj_data *next_content; /* For 'contains' lists */ struct obj_data *next; /* For the object list */ struct obj_flag2_data obj_flags2; /* new object stuff */ struct reset_com *reset; /* reset for objects */ }; /* ======================================================================= */ /* The following defs are for room_data */ #define NOWHERE -1 /* nil reference for room-database */ #define NOBODY -1 /* nil reference for mobile id's */ /* Bitvector For 'room_flags' */ #define DARK (1 << 0) #define DEATH (1 << 1) #define NO_MOB (1 << 2) #define INDOORS (1 << 3) #define SPIN (1 << 4) #define UNFINISHED (1 << 5) #define PAIN (1 << 6) #define NO_MAGIC (1 << 7) #define NO_AUTOFORMAT (1 << 8) #define PRIVATE (1 << 9) #define GODROOM (1 << 10) #define BFS_MARK (1 << 11) #define PEACEFULL (1 << 12) #define FAST_HP_GAIN (1 << 13) #define RECALL (1 << 14) #define FAST_MOVE_GAIN (1 << 15) #define HOT (1 << 16) #define COLD (1 << 17) #define WARM (1 << 18) #define COOL (1 << 19) #define NO_SCAN (1 << 20) #define SMALL (1 << 21) #define TINY (1 << 22) #define CLIMB_EASY (1 << 23) #define CLIMB_MODERATE (1 << 24) #define CLIMB_HARD (1 << 25) #define CLIMB_SEVERE (1 << 26) #define CLIMB_EXTREME (1 << 27) #define NO_EXITS (1 << 28) #define MOB_DEATH (1 << 29) #define RECALL_DISTORT (1 << 30) #define BFS_ERROR -1 #define BFS_ALREADY_THERE -2 #define BFS_NO_PATH -3 /* For 'dir_option' */ #define NORTH 0 #define EAST 1 #define SOUTH 2 #define WEST 3 #define UP 4 #define DOWN 5 #define EX_ISDOOR 1 #define EX_CLOSED 2 #define EX_LOCKED 4 #define EX_RSCLOSED 8 #define EX_RSLOCKED 16 #define EX_PICKPROOF 32 #define EX_SECRET 64 #define EX_DARK 128 /* For 'Sector types' */ #define SECT_INSIDE 0 #define SECT_CITY 1 #define SECT_FIELD 2 #define SECT_FOREST 3 #define SECT_HILLS 4 #define SECT_MOUNTAIN 5 #define SECT_WATER_SWIM 6 #define SECT_WATER_NOSWIM 7 #define SECT_FLY 8 #define SECT_UNDER_WATER 9 #define SECT_THICKET 10 #define SECT_FIRE 11 #define SECT_ICE 12 #define SECT_DESERT_HOT 13 #define SECT_DESERT_COLD 14 struct room_direction_data { char *general_description; /* When look DIR. */ char *keyword; /* for open/close */ sh_int exit_info; /* Exit info */ sh_int key; /* Key's number (-1 for no key) */ sh_int to_room; /* Where direction leeds (NOWHERE) */ }; /* ========================= Structure for room ========================== */ struct room_data { sh_int number; /* Rooms number */ sh_int zone; /* Room zone (for resetting) */ int sector_type; /* sector type (move/hide) */ char *name; /* Rooms name 'You are ...' */ char *description; /* Shown when entered */ struct extra_descr_data *ex_description; /* for examine/look */ struct room_direction_data *dir_option[NUM_OF_DIRS]; /* Directions */ long room_flags; /* DEATH,DARK ... etc */ int light; /* Number of lightsources in room */ int (*funct)(); /* special procedure */ struct obj_data *contents; /* List of items in room */ struct char_data *people; /* List of NPC / PC in room */ sh_int tele_to_room; /* room to teleport to */ sh_int tele_delay; /* delay b4 teleport */ char *tele_mesg1; /* message to teleportee */ char *tele_mesg2; /* message to room */ char *tele_mesg3; /* message to destination room */ struct obj_data *obj; /* pointer to object (for cart etc) */ }; /* ======================================================================== */ /* The following defs and structures are related to char_data */ /* For 'equipment' */ #define WEAR_SCABBARD 0 #define WEAR_FINGER_R 1 #define WEAR_FINGER_L 2 #define WEAR_NECK_1 3 #define WEAR_NECK_2 4 #define WEAR_BODY 5 #define WEAR_HEAD 6 #define WEAR_LEGS 7 #define WEAR_FEET 8 #define WEAR_HANDS 9 #define WEAR_ARMS 10 #define WEAR_SHIELD 11 #define WEAR_ABOUT 12 #define WEAR_WAIST 13 #define WEAR_WRIST_R 14 #define WEAR_WRIST_L 15 #define WIELD 16 #define HOLD 17 #define WEAR_EYES 18 #define WEAR_EARS_R 19 #define WEAR_EARS_L 20 #define WEAR_MOUTH 21 #define WEAR_BACK 22 #define WEAR_WAIST_2 23 /* For 'char_payer_data' */ #define MAX_TOUNGE 3 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */ #define MAX_SKILLS 528 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */ #define MAX_WEAR 24 #define MAX_AFFECT 32 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */ /* Predifined conditions */ #define DRUNK 0 #define FULL 1 #define THIRST 2 /* Bitvector for 'affected_by' */ #define AFF_BLIND (1 << 0) #define AFF_INVISIBLE (1 << 1) #define AFF_DETECT_EVIL (1 << 2) #define AFF_DETECT_INVISIBLE (1 << 3) #define AFF_DETECT_MAGIC (1 << 4) #define AFF_SENSE_LIFE (1 << 5) #define AFF_SPELLBOTCH (1 << 6) #define AFF_SANCTUARY (1 << 7) #define AFF_GROUP (1 << 8) #define AFF_CURSE (1 << 9) #define AFF_CONFUSION (1 << 10) #define AFF_POISON (1 << 11) #define AFF_PROTECT_EVIL (1 << 12) #define AFF_PARALYSIS (1 << 13) #define AFF_RESIST_HEAT (1 << 14) #define AFF_RESIST_COLD (1 << 15) #define AFF_SLEEP (1 << 16) #define AFF_DODGE (1 << 17) #define AFF_SNEAK (1 << 18) #define AFF_HIDE (1 << 19) #define AFF_FEAR (1 << 20) #define AFF_CHARM (1 << 21) #define AFF_FOLLOW (1 << 22) #define AFF_WIMPY (1 << 23) #define AFF_INFRARED (1 << 24) #define AFF_FLY (1 << 25) #define AFF_WATER_BREATH (1 << 26) #define AFF_FREE_ACTION (1 << 27) #define AFF_BASH (1 << 28) #define AFF_SLIPPY (1 << 29) #define AFF_HEALING (1 << 30) /* modifiers to char's abilities */ #define APPLY_NONE 0 #define APPLY_STR 1 #define APPLY_DEX 2 #define APPLY_INT 3 #define APPLY_WIS 4 #define APPLY_CON 5 #define APPLY_SEX 6 #define APPLY_RACE 7 #define APPLY_LEVEL 8 #define APPLY_AGE 9 #define APPLY_CHAR_WEIGHT 10 #define APPLY_CHAR_HEIGHT 11 #define APPLY_MANA 12 #define APPLY_HIT 13 #define APPLY_MOVE 14 #define APPLY_GOLD 15 #define APPLY_EXP 16 #define APPLY_AC 17 #define APPLY_ARMOR 17 #define APPLY_BODY_AC 17 #define APPLY_BODY_ARMOR 17 #define APPLY_HITROLL 18 #define APPLY_DAMROLL 19 #define APPLY_SAVING_PARA 20 #define APPLY_SAVING_ROD 21 #define APPLY_SAVING_PETRI 22 #define APPLY_SAVING_BREATH 23 #define APPLY_SAVING_SPELL 24 #define APPLY_CHR 25 #define APPLY_PER 26 #define APPLY_GUI 27 #define APPLY_LUC 28 #define APPLY_LEGS_AC 29 #define APPLY_ARMS_AC 30 #define APPLY_HEAD_AC 31 #define APPLY_BODY_STOPPING 32 #define APPLY_LEGS_STOPPING 33 #define APPLY_ARMS_STOPPING 34 #define APPLY_HEAD_STOPPING 35 #define APPLY_ALL_STOPPING 36 #define APPLY_POWER 37 #define APPLY_FOCUS 38 #define APPLY_DEVOTION 39 #define APPLY_ALL_AC 40 #define APPLY_ALL_SAVE 41 #define APPLY_HITROLL2 42 #define APPLY_DAMROLL2 43 /* 'class' for PC's */ #define CLASS_MAGIC_USER 1 #define CLASS_CLERIC 2 #define CLASS_THIEF 3 #define CLASS_WARRIOR 4 /* 'race' for PC's */ #define RACE_HUMAN 1 #define RACE_ELVEN 2 #define RACE_HALFLING 3 #define RACE_GIANT 4 #define RACE_GNOME 5 #define RACE_HALF_ELF 6 #define RACE_OGIER 7 #define RACE_DWARF 8 #define RACE_MERMAN 9 #define RACE_PIXIE 10 #define RACE_AMARYA 11 #define RACE_TROLL 12 /* 'class' for NPC's */ #define CLASS_UNDEAD 126 /* These are not yet used! */ #define CLASS_OTHER 1 /* But may soon be so */ #define CLASS_HUMANOID 2 /* Idea is to use general */ #define CLASS_ANIMAL 3 /* monster classes */ #define CLASS_DRAGON 4 /* Then for example a weapon */ #define CLASS_GIANT 5 /* of dragon slaying is pos. */ #define CLASS_PLANT 6 /* plants */ #define CLASS_EQUINE 7 /* horses etc. */ #define CLASS_ICHTHYOID 8 /* fish */ #define CLASS_ARTHOPOD 9 /* insects etc */ #define CLASS_DEMON 10 /* demons etc */ /* sex */ #define SEX_NEUTRAL 0 #define SEX_MALE 1 #define SEX_FEMALE 2 /* positions */ #define POSITION_DEAD 0 #define POSITION_MORTALLYW 1 #define POSITION_INCAP 2 #define POSITION_STUNNED 3 #define POSITION_SLEEPING 4 #define POSITION_RESTING 5 #define POSITION_SITTING 6 #define POSITION_STANDING 7 #define POSITION_FIGHTING 8 /* for mobile actions: specials.act */ #define MOB_SPEC (1 << 0) /* spec-proc to be called if exist */ #define MOB_SENTINEL (1 << 1) /* this mobile not to be moved */ #define MOB_SCAVENGER (1 << 2) /* pick up stuff lying around */ #define MOB_ISNPC (1 << 3) /* This bit is set for use with IS_NPC()*/ #define MOB_NICE_THIEF (1 << 4) /* Set if a thief should NOT be killed */ #define MOB_AGGRESSIVE (1 << 5) /* Set if automatic attack on NPC's */ #define MOB_STAY_ZONE (1 << 6) /* MOB Must stay inside its own zone */ #define MOB_WIMPY (1 << 7) /* MOB Will flee when injured, and if */ /* aggressive only attack sleeping players */ /* * For MOB_AGGRESSIVE_XXX, you must also set MOB_AGGRESSIVE. * These switches can be combined, if none are selected, then * the mobile will attack any alignment (same as if all 3 were set) */ #define MOB_AGGRESSIVE_EVIL (1 << 8) /* auto attack evil PC's only */ #define MOB_AGGRESSIVE_GOOD (1 << 9) /* auto attack good PC's only */ #define MOB_AGGRESSIVE_NEUTRAL (1 << 10) /* auto attack neutral PC's only */ #define MOB_MEMORY (1 << 11) /* remember attackers if struck first */ #define MOB_HELPER (1 << 12) /* attack chars attacking a PC in room */ #define MOB_CITIZEN (1 << 13) #define MOB_CAN_SPEAK (1 << 14) #define MOB_WILL_LOOT (1 << 15) /* mob will loot corpses */ #define MOB_MOODS (1 << 16) #define MOB_HAPPY (1 << 17) /* +700 to mood*/ #define MOB_SAD (1 << 18) /* -700 to mood*/ #define MOB_STAY_SECTOR (1 << 19) /* mob will stay in sector type*/ #define MOB_DOCILE (1 << 20) /* mob may be ridden without charm */ #define MOB_TETHERED (1 << 21) #define MOB_SPELL_CASTER (1 << 22) #define MOB_POISONOUS (1 << 23) /* For players : specials.act */ #define PLR_KILLER (1 << 0) #define PLR_THIEF (1 << 1) #define PLR_FROZEN (1 << 2) #define PLR_DONTSET (1 << 3) /* Dont EVER set (ISNPC bit) */ #define PLR_WRITING (1 << 4) #define PLR_MAILING (1 << 5) #define PLR_CRASH (1 << 6) #define PLR_SITEOK (1 << 7) #define PLR_NOSHOUT (1 << 8) #define PLR_NOTITLE (1 << 9) #define PLR_DELETED (1 << 10) #define PLR_LOADROOM (1 << 11) #define PLR_NOWIZLIST (1 << 12) #define PLR_NODELETE (1 << 13) #define PLR_INVSTART (1 << 14) #define PLR_CRYO (1 << 15) #define PLR_BUILDING (1 << 16) #define PLR_AFK (1 << 17) #define PLR_NEEDCRLF (1 << 18) /* for players: preference bits */ #define PRF_BRIEF (1 << 0) #define PRF_COMPACT (1 << 1) #define PRF_DEAF (1 << 2) #define PRF_NOTELL (1 << 3) #define PRF_DISPHP (1 << 4) #define PRF_DISPMANA (1 << 5) #define PRF_DISPMOVE (1 << 6) #define PRF_DISPAUTO (1 << 7) #define PRF_NOHASSLE (1 << 8) #define PRF_QUEST (1 << 9) #define PRF_SUMMONABLE (1 << 10) #define PRF_NOREPEAT (1 << 11) #define PRF_HOLYLIGHT (1 << 12) #define PRF_COLOR_1 (1 << 13) #define PRF_COLOR_2 (1 << 14) #define PRF_NOWIZ (1 << 15) #define PRF_LOG1 (1 << 16) #define PRF_LOG2 (1 << 17) #define PRF_NOAUCT (1 << 18) #define PRF_NOGOSS (1 << 19) #define PRF_NOGRATZ (1 << 20) #define PRF_ROOMFLAGS (1 << 21) #define PRF_NOBRAG (1 << 22) #define PRF_NOCOND (1 << 23) /* not see the condition on items */ #define PRF_DEBUG (1 << 24) /* see damage from spells and weapons */ #define BUILD_ZONE (1<<0) #define BUILD_SHOPS (1<<1) #define BUILD_MOBS (1<<2) #define BUILD_ROOMS (1<<3) #define BUILD_OBJS (1<<4) struct memory_rec_struct { long id; struct memory_rec_struct *next; }; typedef struct memory_rec_struct memory_rec; /* This structure is purely intended to be an easy way to transfer */ /* and return information about time (real or mudwise). */ struct time_info_data { byte hours, day, month; sh_int year; }; #define MAX_ALIASES 5 struct pc_stat_parameters { byte min, max; }; struct alias_data { char *alias; char *text; }; /* These data contain information about a players time data */ struct time_data { time_t birth; /* This represents the characters age */ time_t logon; /* Time of the last logon (used to calculate played) */ int played; /* This is the total accumulated time played in secs */ }; struct char_player_data { char *name; /* PC / NPC s name (kill ... ) */ char *short_descr; /* for 'actions' */ char *long_descr; /* for 'look'.. Only here for testing */ char *description; /* Extra descriptions */ char *title; /* PC / NPC s title */ char *prmpt; /* prompt string */ byte sex; /* PC / NPC s sex */ byte race; /* PC s race or NPC alignment */ ubyte level; /* PC / NPC s level */ int hometown; /* PC s Hometown (zone) */ bool talks[MAX_TOUNGE]; /* PC s Tounges 0 for NPC */ struct time_data time; /* PC s AGE in days */ sh_int weight; /* PC / NPC s weight */ sh_int height; /* PC / NPC s height */ long body_vector; }; /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */ struct char_ability_data { sbyte str; sbyte str_add; /* 000 - 100 if strength 18 */ sbyte intel; sbyte wis; sbyte dex; sbyte con; sbyte chr; sbyte per; sbyte gui; sbyte foc; sbyte dev; sbyte luc; }; /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */ struct char_point_data { sh_int mana; sh_int max_mana; /* Max move for PC/NPC */ sh_int sub_level; sh_int max_power; /* Max move for PC/NPC */ sh_int hit; sh_int max_hit; /* Max hit for PC/NPC */ sh_int move; sh_int max_move; /* Max move for PC/NPC */ sh_int armor[4]; /* Internal -100..100, external -10..10 AC */ sh_int stopping[4]; int gold; /* Money carried */ int bank_gold; /* Gold the char has in a bank account */ int exp; /* The experience of the player */ sbyte hitroll; /* Any bonus or penalty to the hit roll */ sbyte damroll; /* Any bonus or penalty to the damage roll */ }; /* char_special_data's fields are fields which are needed while the game is running, but are not stored in the playerfile. In other words, a struct of type char_special_data appears in char_data but NOT char_file_u. If you want to add a piece of data which is automatically saved and loaded with the playerfile, add it to char_special2_data. */ struct char_special_data { struct char_data *fighting; /* Opponent */ struct char_data *hunting; /* Hunting person.. */ long affected_by; /* Bitvector for spells/skills affected by */ byte position; /* Standing or ... */ byte default_pos; /* Default position for NPC */ int carry_weight; /* Carried weight */ byte carry_items; /* Number of items carried */ int timer; /* Timer for update */ sh_int was_in_room; /* storage of location for linkdeads*/ byte damnodice; /* The number of damage dice's */ byte damsizedice; /* The size of the damage dice's */ byte last_direction; /* The last direction the monster went */ int attack_type; /* The Attack Type Bitvector for NPC's */ char *poofIn; /* Description on arrival of a god. */ char *poofOut; /* Description upon a god's exit. */ sh_int mood; /* mood for mobs */ sbyte hitroll; sbyte damroll; memory_rec *memory; /* List of attackers to remember */ struct obj_data *cart; /* to allow mobs/pc to pull carts etc. */ struct char_data *mount; struct char_data *rider; struct char_data *carrying; struct char_data *carried_by; struct alias_data aliases[MAX_ALIASES+1]; }; struct char_special2_data { long idnum; /* player's idnum */ sh_int load_room; /* Which room to place char in */ int spells_to_learn; /* How many can you learn yet this level*/ int alignment; /* +-1000 for alignments */ long act; /* act flag for NPC's; player flag for PC's */ long pref; /* preference flags for PC's. */ int wimp_level; /* Below this # of hit points, flee! */ ubyte freeze_level; /* Level of god who froze char, if any */ ubyte bad_pws; /* number of bad password attemps */ sh_int apply_saving_throw[5]; /* Saving throw (Bonuses) */ sbyte conditions[3]; /* Drunk full etc. */ ubyte invis_level; ubyte rent_zone; ubyte spare2; ubyte spare3; ubyte spare4; ubyte spare5; ubyte spare6; ubyte spare7; ubyte spare8; ubyte spare9; ubyte spare10; ubyte spare11; long edit_zone; long builder_flag; long edit_zone2; long edit_zone3; long last_tell_id; /* idnum of last player to tell */ long fame; long spare18; long spare19; long spare20; long spare21; }; /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */ struct affected_type { int type; /* The type of spell that caused this */ sh_int duration; /* For howl ong its effects will last */ sbyte modifier; /* This is added to apropriate ability */ byte location; /* Tells which ability to change(APPLY_XXX)*/ long bitvector; /* Tells which bits to set (AFF_XXX) */ int level; struct affected_type *next; }; struct follow_type { struct char_data *follower; struct follow_type *next; }; /* ================== Structure for player/non-player ===================== */ struct char_data { sh_int nr; /* monster nr (pos in file) */ sh_int in_room; /* Location */ int light; struct char_player_data player; /* Normal data */ struct char_ability_data abilities; /* Abilities */ struct char_ability_data tmpabilities;/* The abilities we will use */ struct char_point_data points; /* Points */ struct char_special_data specials; /* Special plaing constants */ struct char_special2_data specials2; /* Additional special constants */ byte *skills; /* dynam. alloc. array of skills */ struct affected_type *affected; /* affected by what spells */ struct obj_data *equipment[MAX_WEAR]; /* Equipment array */ struct obj_data *inventory; /* Head of list */ struct descriptor_data *desc; /* NULL for mobiles */ struct char_data *next_in_room; /* For room->people - list */ struct char_data *next; /* For either monster or ppl-list */ struct char_data *next_fighting; /* For fighting list */ struct follow_type *followers; /* List of chars followers */ struct char_data *master; /* Who is char following? */ struct reset_com *reset; /* reset for mobiles */ }; /* ======================================================================== */ /* How much light is in the land ? */ #define SUN_DARK 0 #define SUN_RISE 1 #define SUN_LIGHT 2 #define SUN_SET 3 #define MOON_DARK 1 #define MOON_RISE 2 #define MOON_LIGHT 3 #define MOON_SET 4 #define MOON_NEW 0 #define MOON_QUART_WAX 1 #define MOON_HALF_WAX 2 #define MOON_3QUART_WAX 3 #define MOON_FULL 4 #define MOON_3QUART_WANE 5 #define MOON_HALF_WANE 6 #define MOON_QUART_WANE 7 #define MOON_BLUE 8 /* And how is the sky ? */ #define SKY_CLOUDLESS 0 #define SKY_CLOUDY 1 #define SKY_RAINING 2 #define SKY_LIGHTNING 3 struct weather_data { int pressure; /* How is the pressure ( Mb ) */ int change; /* How fast and what way does it change. */ int sky; /* How is the sky. */ int sunlight; /* And how much sun. */ int moonlight; /* How much moon. */ int moon_phase; }; /* *********************************************************************** * file element for player file. BEWARE: Changing it will ruin the file * *********************************************************************** */ struct char_file_u { byte sex; byte race; ubyte level; time_t birth; /* Time of birth of character */ int played; /* Number of secs played in total */ sh_int weight; sh_int height; long body_vector; char title[80]; char prmpt[240]; sh_int hometown; char description[240]; bool talks[MAX_TOUNGE]; struct char_ability_data abilities; struct char_point_data points; byte skills[MAX_SKILLS]; struct affected_type affected[MAX_AFFECT]; struct char_special2_data specials2; time_t last_logon; /* Time (in secs) of last logon */ char host[HOST_LEN+1]; /* host of last logon */ /* char data */ char name[20]; char pwd[MAX_PWD_LENGTH+1]; char poofin[240]; char poofout[240]; }; /* ************************************************************************ * file element for object file. BEWARE: Changing it will ruin rent files * ************************************************************************ */ struct obj_file_elem_0 { sh_int item_number; char name[80]; char description[960]; char short_description[80]; char action_description[1920]; byte bag[2]; int value[8]; long extra_flags; int weight; int timer; long bitvector; struct obj_affected_type affected[MAX_OBJ_AFFECT]; }; struct obj_file_elem_1 { sh_int item_number; char name[80]; char description[960]; char short_description[80]; char action_description[1920]; byte bag[2]; sbyte light; byte aff_timer; byte no_use_timer; int value[8]; long extra_flags; int weight; int timer; long bitvector; struct obj_affected_type affected[MAX_OBJ_AFFECT]; }; struct obj_file_elem { sh_int item_number; char name[80]; char description[960]; char short_description[80]; char action_description[1920]; byte bag[2]; sbyte light; byte aff_timer; byte no_use_timer; int value[8]; long extra_flags; int weight; int timer; long bitvector; int cost; /* Value when sold (gp.) */ int cost_per_day; /* Cost to keep pr. real day */ struct obj_affected_type affected[MAX_OBJ_AFFECT]; }; #define RENT_UNDEF 0 #define RENT_CRASH 1 #define RENT_RENTED 2 #define RENT_CRYO 3 #define RENT_FORCED 4 #define RENT_TIMEDOUT 5 /* header block for rent files */ struct rent_info { int time; int rentcode; int net_cost_per_diem; int gold; int account; int nitems; int version; int spare1; int spare2; int spare3; int spare4; int spare5; int spare6; int spare7; }; /* *********************************************************** * The following structures are related to descriptor_data * *********************************************************** */ struct txt_block { char *text; struct txt_block *next; }; struct txt_q { struct txt_block *head; struct txt_block *tail; }; /* modes of connectedness */ #define CON_PLYNG 0 #define CON_NME 1 #define CON_NMECNF 2 #define CON_PWDNRM 3 #define CON_PWDGET 4 #define CON_PWDCNF 5 #define CON_QSEX 6 #define CON_RMOTD 7 #define CON_SLCT 8 #define CON_EXDSCR 9 #define CON_QRACE 10 #define CON_LDEAD 11 #define CON_PWDNQO 12 #define CON_PWDNEW 13 #define CON_PWDNCNF 14 #define CON_CLOSE 15 #define CON_DELCNF1 16 #define CON_DELCNF2 17 #define CON_QSTAT 18 #define CON_QSTATS 19 #define CON_QSTATI 20 #define CON_QSTATW 21 #define CON_QSTATD 22 #define CON_QSTATC 23 #define CON_QSTATH 24 #define CON_QSTATP 25 #define CON_QSTATG 26 #define CON_MOTD 27 #define CON_QALIGN 28 #define CON_QCOLOR 29 #define CON_QSTATDE 30 #define CON_QSTATF 31 #define CON_QBANCON1 32 #define CON_QBANCON2 33 struct snoop_data { struct char_data *snooping; /* Who is this char snooping */ struct char_data *snoop_by; /* And who is snooping this char */ }; #define MAX_USER_ID 12 struct descriptor_data { int descriptor; /* file descriptor for socket */ unsigned short int port; /* remote port id */ char *name; /* ptr to name for mail system */ char host[50]; /* hostname */ long addr; char user_id[MAX_USER_ID]; char pwd[MAX_PWD_LENGTH+1]; /* password */ byte bad_pws; /* number of bad pw attemps this login */ int pos; /* position in player-file */ int connected; /* mode of 'connectedness' */ int wait; /* wait for how many loops */ int desc_num; /* unique num assigned to desc */ long login_time; /* when the person connected */ char *showstr_head; /* for paging through texts */ char *showstr_point; /* - */ char **str; /* for the modify-str system */ int max_str; /* - */ int prompt_mode; /* control of prompt-printing */ char buf[MAX_STRING_LENGTH]; /* buffer for raw input */ char last_input[MAX_INPUT_LENGTH];/* the last input */ char small_outbuf[SMALL_BUFSIZE]; /* standard output bufer */ char *output; /* ptr to the current output buffer */ int bufptr; /* ptr to end of current output */ int bufspace; /* space left in the output buffer */ int stat_points; bool color; struct txt_block *large_outbuf; /* ptr to large buffer, if we need it */ struct txt_q input; /* q of unprocessed input */ struct char_data *character; /* linked to char */ struct char_data *original; /* original char if switched */ struct snoop_data snoop; /* to snoop people */ struct descriptor_data *next; /* link to next descriptor */ struct char_data *mob_edit; /* pointer to mob proto being edited */ int medit_mode; struct obj_data *obj_edit; /* pointer to obj proto being edited */ int oedit_mode; struct room_data *room_edit; /* pointer to room being edited */ int redit_mode; struct shop_data *shop_edit; /* pointer to shop being edited */ int shedit_mode; struct zone_data *zone_edit; int zedit_mode; time_t last_logon; int virtual; /* virtual number of mob/object */ bool cpyextras; int iedsc; int ex_i_dir; int ia_flag; int r_dir; int to_room; int iaff; int level; int n_att; int isave; int iloc; char *replace; char *with; struct list_index_type *list; }; struct msg_type { char *attacker_msg; /* message to attacker */ char *victim_msg; /* message to victim */ char *room_msg; /* message to room */ }; struct message_type { struct msg_type die_msg; /* messages when death */ struct msg_type miss_msg; /* messages when miss */ struct msg_type hit_msg; /* messages when hit */ struct msg_type sanctuary_msg;/* messages when hit on sanctuary */ struct msg_type god_msg; /* messages when hit on god */ struct message_type *next; /* to next messages of this kind. */ }; struct message_list { int a_type; /* Attack type */ int number_of_attacks; /* How many attack messages to chose from. */ struct message_type *msg; /* List of messages. */ }; struct dex_skill_type { sh_int p_pocket; sh_int p_locks; sh_int traps; sh_int sneak; sh_int hide; }; struct dex_app_type { sh_int reaction; sh_int miss_att; sh_int defensive; }; struct str_app_type { sh_int tohit; /* To Hit (THAC0) Bonus/Penalty */ sh_int todam; /* Damage Bonus/Penalty */ int carry_w; /* Maximum weight that can be carrried */ sh_int wield_w; /* Maximum weight that can be wielded */ }; struct wis_app_type { byte bonus; /* how many bonus skills a player can */ /* practice pr. level */ }; struct int_app_type { byte learn; /* how many % a player learns a spell/skill */ }; struct con_app_type { sh_int hitp; sh_int shock; };