#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;
struct momtalktype {
int n;
char **line;
};
#define PULSE_ZONE 300
#define PULSE_MOBILE 50
#define PULSE_VIOLENCE 25
#define WAIT_SEC 4
#define WAIT_ROUND 4
#define MAX_STRING_LENGTH 4095
#define MAX_INPUT_LENGTH 1024
#define MAX_MESSAGES 128
#define MAX_ITEMS 153
#define MAX_STAT 500
#define KBYTE 1023
#define MAX_META_SAMPLES 100 /* SLUG_CHANGE 11-9-96 # of ticks */
#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 200
#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_PILL 23
#define ITEM_RADIO 24
#define ITEM_CHARGE 25
#define ITEM_BOMB 26
#define ITEM_SHOVEL 27
#define ITEM_DISPENSER 28
#define ITEM_TOKEN 29
/* Bitvector For 'wear_flags' */
#define ITEM_TAKE 1
#define ITEM_WEAR_FINGER 2
#define ITEM_WEAR_NECK 4
#define ITEM_WEAR_BODY 8
#define ITEM_WEAR_HEAD 16
#define ITEM_WEAR_LEGS 32
#define ITEM_WEAR_FEET 64
#define ITEM_WEAR_HANDS 128
#define ITEM_WEAR_ARMS 256
#define ITEM_WEAR_SHIELD 512
#define ITEM_WEAR_ABOUT 1024
#define ITEM_WEAR_WAISTE 2048
#define ITEM_WEAR_WRIST 4096
#define ITEM_WIELD 8192
#define ITEM_HOLD 16384
#define ITEM_WEAR_RADIO 32768
#define ITEM_LIGHT_SOURCE 65536
#define ITEM_WEAR_FACE 131072
#define ITEM_WEAR_EARS 262144
#define ITEM_WEAR_RENT 524288
#define ITEM_WEAR_ANKLES 1048576
/* UNUSED, CHECKS ONLY FOR ITEM_LIGHT #define ITEM_LIGHT_SOURCE 65536 */
/* Bitvector for 'extra_flags' */
#define ITEM_GLOW 1
#define ITEM_HUM 2
#define ITEM_SFX 4
#define ITEM_LOCK 8
#define ITEM_CHEAP 16
#define ITEM_INVISIBLE 32
#define ITEM_MAGIC 64
#define ITEM_NODROP 128
#define ITEM_BLESS 256
#define ITEM_ANTI_GOOD 512 /* not usable by good people */
#define ITEM_ANTI_EVIL 1024 /* not usable by evil people */
#define ITEM_ANTI_NEUTRAL 2048 /* not usable by neutral people */
#define ITEM_PRIME 4096
#define ITEM_POOF 8192
#define ITEM_POOFSOON 16384
#define ITEM_VARIABLE 32768
#define ITEM_ANTIPRIME 65536
#define ITEM_NOKICK 131072
#define ITEM_MUTABLE 262144
#define ITEM_NO_PUT_IN 524288
/* 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_MILKSHAKE 8
#define LIQ_SLIME 9
#define LIQ_MILK 10
#define LIQ_TEA 11
#define LIQ_COFFE 12
#define LIQ_BLOOD 13
#define LIQ_DIETCOKE 14
#define LIQ_COKE 15
/* for containers - value[1] */
#define CONT_CLOSEABLE 1
#define CONT_PICKPROOF 2
#define CONT_CLOSED 4
#define CONT_LOCKED 8
#define CONT_COMBO 16
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 3
#define OBJ_NOTIMER -7000000
struct obj_flag_data
{
int value[4]; /* Values of the item (see list) */
byte type_flag; /* Type of item */
int wear_flags; /* Where you can wear it */
int extra_flags; /* If it hums,glows etc */
int weight; /* Weigt what else */
int cost; /* Value when sold (gp.) */
int rentlevel;
int timer; /* Timer for object */
long bitvector; /* To set chars bits */
};
struct obj_affected_type {
long location; /* Which ability to change (APPLY_XXX) */
long 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. */
struct extra_descr_data *ex_description; /* extra descriptions */
struct char_data *carried_by; /* Carried by :NULL in room/conta */
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 */
int oid;
};
/* ======================================================================= */
/* The following defs are for room_data */
#define JUST_DIED -2
#define NOWHERE -1 /* nil reference for room-database */
/* Bitvector For 'room_flags' */
#define DARK 1
#define NOSUMMON 2
#define NO_MOB 4
#define INDOORS 8
#define LAWFUL 16
#define NEUTRAL 32
#define TRICKY 64
#define NO_MAGIC 128
#define CONFUSING 256
#define PRIVATE 512
#define OFF_LIMITS 1024
#define RENT 2048
#define NORELOCATE 4096
#define NO_DIG 8192
#define MODROOM 16384
#define PK_ROOM 32768
#define UNOWNED 65536
/* 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_COMBO 64
/* 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
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[6]; /* Directions */
unsigned long room_flags; /* DEATH,DARK ... etc */
byte 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 */
};
/* ======================================================================== */
/* The following defs and structures are related to char_data */
/* For 'equipment' */
#define WEAR_LIGHT 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_WAISTE 13
#define WEAR_WRIST_R 14
#define WEAR_WRIST_L 15
#define WIELD 16
#define HOLD 17
#define WEAR_RADIO 18
#define WEAR_FACE 19
#define WEAR_EARS 20
#define WEAR_ANKLES 21
/* For 'char_player_data' */
#define MAX_WEAR 22
#define MAX_SKILLS 82
#define MAX_AFFECT 25 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
#define DRUNK 0
#define FULL 1
#define THIRST 2
/* Bitvector for 'affected_by' */
#define AFF_BLIND 1
#define AFF_INVISIBLE 2
#define AFF_DETECT_EVIL 4
#define AFF_DETECT_INVISIBLE 8
#define AFF_DETECT_MAGIC 16
#define AFF_SENSE_LIFE 32
#define AFF_HOLD 64
#define AFF_SANCTUARY 128
#define AFF_GROUP 256
#define AFF_CURSE 1024
#define AFF_REGEN 2048
#define AFF_POISON 4096
#define AFF_PROTECT_EVIL 8192
#define AFF_CLARITY 16384
#define AFF_INFRAVISION 32768
#define AFF_FARSEE 65536
#define AFF_SLEEP 131072
#define AFF_FEARLESSNESS 262144
#define AFF_SNEAK 524288
#define AFF_HIDE 1048576
#define AFF_FEAR 2097152
#define AFF_CHARM 4194304
#define AFF_FOLLOW 8388608
#define AFF_HASTE 16777216
#define AFF_HOLDALIGN 33554432
#define AFF_HYPERREGEN 67108864
#define AFF_STUPIDITY 134217728
#define AFF_NOSUMMON 268435456
/* 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_LEVEL 8
#define APPLY_AGE 9
#define APPLY_KICK 10
#define APPLY_SPELL_LEV 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_HITROLL 18
#define APPLY_DAMROLL 19
#define APPLY_SAVING_PARA 20
#define APPLY_SAVING_ROD 21
#define APPLY_SAVING_SUNBURST 22
#define APPLY_SAVING_BREATH 23
#define APPLY_SAVING_SPELL 24
#define APPLY_MAG_RES 25
#define APPLY_META_BONUS 26
#define APPLY_GUT 27
/* 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_FIGHTING 7
#define POSITION_STANDING 8
/* for mobile actions: specials.act */
#define ACT_SPEC 1 /* special routine to be called if exist */
#define ACT_SENTINEL 2 /* this mobile not to be moved */
#define ACT_SCAVENGER 4 /* pick up stuff lying around */
#define ACT_ISNPC 8 /* This bit is set for use with IS_NPC() */
#define ACT_NICE_THIEF 16 /* Set if a thief should NOT be killed */
#define ACT_AGGRESSIVE 32 /* Set if automatic attack on NPC's */
#define ACT_STAY_ZONE 64 /* MOB Must stay inside its own zone */
#define ACT_WIMPY 128 /* MOB Will flee when injured, and if */
/* aggressive only attack sleeping players */
#define ACT_HELPER 256 /* will come to the aid of other mobs */
#define ACT_HUNTER 512 /* will remember enemies */
#define ACT_SMART 1024 /* will pick on weakest opponent */
#define ACT_HEALER 2048 /* will heal self from poison and blindness */
#define ACT_WHATEVER 4096 /* can be ridden */
#define ACT_CHANGES 8192 /* changes special */
#define ACT_SEMIAGGR 16384 /* attack only higher level players */
#define ACT_SWIMMER 32768
#define ACT_CASTER 65536
#define ACT_KICKER 131072
#define ACT_CLONE 262144
#define ACT_TRIBBLE 524288
#define ACT_DUMPER 1048576
#define ACT_GUARD 2097152
/* For players : specials.act */
#define PLR_BRIEF 1
#define PLR_NOSHOUT 2
#define PLR_COMPACT 4
#define PLR_DONTSET 8 /* Dont EVER set */
#define PLR_NOTELL 16
#define PLR_BANISHED 32
#define PLR_CRIMINAL 64
#define PLR_WIZINVIS 128
#define PLR_EARMUFFS 256
#define PLR_NOSUMMON 512
#define PLR_TITLE 1024
#define PLR_VERYBRIEF 2048 /* No fight messages */
#define PLR_ECHO 4096
#define PLR_NORELO 8192
#define PLR_BUILDER 16384
#define PLR_AUTOCNVRT 32768
#define PLR_AUTOEXIT 65536
#define PLR_AUTOLOOT 131072
#define PLR_REPEAT 1 << 18 /* SLUG_CHANGE 11-9-96 echo say/tell/shouts */
struct time_info_data {
byte hours, day, month;
sh_int year;
};
struct time_data {
time_t birth;
time_t logon;
int played;
};
struct char_player_data {
short level;
char *name;
char *short_descr;
char *long_descr;
char *description;
char *title;
struct time_data time; /* PCs AGE in days */
byte xyzzy;
byte sex;
ubyte weight;
ubyte height;
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_ability_data {
short str;
short intel;
short wis;
short dex;
short con;
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_point_data {
int mana;
int max_mana;
int hit;
int max_hit;
int move;
int max_move;
int armor;
int gold;
int exp;
int hitroll;
int damroll;
int kills,deaths;
int metapts;
long long bank;
};
struct char_special_data {
struct char_data *fighting;
int holes;
long lastback;
long affected_by;
byte position;
byte default_pos;
byte it;
unsigned act;
int spells_to_learn; /* How many can you learn yet this level */
int carry_weight;
byte carry_items;
int timer; /* Timer for update */
sh_int was_in_room; /* storage of location for linkdead people */
sh_int apply_saving_throw[5];
int conditions[3]; /* Drunk full etc. */
int gut;
byte last_direction; /* The last direction the monster went */
long damnodice; /* The number of damage dice's */
long damsizedice; /* The size of the damage dice's */
int attack_type; /* The Attack Type Bitvector for NPC's */
int inbytes; /* SLUG_CHANGE 11-4-96 */
int outbytes; /* SLUG_CHANGE 11-4-96 */
int metabonus;
int spell_lev_bonus;
int alignment;
int magres, recall_room, xxx;
/* SLUG_CHANGE next few lines used for ranking */
long long metadata[MAX_META_SAMPLES+1]; /* xp/tick for last 100 ticks */
/* last value is index of queue head*/
int rooms; /* rooms passed through since login */
int bonks; /* walls hit */
int argles; /* mistyped commands */
int commands; /* successful commands */
int connect_time;
int connect_tics;
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_skill_data {
byte learned; /* % chance for success 0 = not learned */
unsigned char used; /* If you can recognise the scroll etc. */
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct affected_type {
sh_int duration; /* For how long its effects will last */
sbyte type; /* The type of spell that caused this */
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) */
struct affected_type *next;
};
struct follow_type {
struct char_data *follower;
struct follow_type *next;
};
struct alias_data {
char *in;
char *out;
struct alias_data *next;
};
struct char_data {
struct char_player_data player;
struct char_ability_data abilities;
struct char_ability_data tmpabilities;
struct char_point_data points;
struct char_special_data specials;
struct char_skill_data skills[MAX_SKILLS];
struct affected_type *affected;
struct obj_data *equipment[MAX_WEAR];
struct obj_data *carrying;
struct descriptor_data *desc;
struct char_data *next_in_room;
struct char_data *next;
struct char_data *next_fighting;
struct follow_type *followers;
struct char_data *master;
struct alias_data *alp;
sh_int nr,in_room;
};
#define SUN_DARK 0
#define SUN_RISE 1
#define SUN_LIGHT 2
#define SUN_SET 3
/* 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. */
};
struct char_file_u {
short level;
byte sex;
time_t birth;
int played;
ubyte weight,height;
char title[80];
char description[232];
int gut;
sh_int load_room;
struct char_ability_data abilities;
struct char_point_data points;
struct char_skill_data skills[MAX_SKILLS];
struct affected_type affected[MAX_AFFECT];
short spells_to_learn;
int alignment;
time_t last_logon;
unsigned act;
int kills,deaths;
char name[20];
char pwd[11];
int conditions[3];
};
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_LDEAD 11
#define CON_PWDNEW 12
#define CON_PWDNCNF 13
#define CON_PWDREP 14 /* SLUG_CHANGE 11-4-96 (next 3 lines) */
#define CON_REPCNF 15
#define CON_REPEXE 16
struct snoop_data {
struct char_data *snooping;
struct char_data *snoop_by;
};
struct descriptor_data {
int descriptor; /* file descriptor for socket */
char host[16]; /* hostname */
int ncmds,contime;
char pwd[12]; /* password */
int pos; /* position in player-file */
int connected; /* mode of 'connectedness' */
int wait; /* wait for how many loops */
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_STRING_LENGTH]; /* the last input */
struct txt_q output; /* q of strings to send */
struct txt_q input; /* q of unprocessed input */
struct char_data *character; /* linked to char */
struct char_data *original; /* original char */
struct snoop_data snoop; /* to snoop people. */
struct descriptor_data *next; /* link to next descriptor */
};
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. */
};