AwakeMUD-0.51Beta/area/
AwakeMUD-0.51Beta/doc/
AwakeMUD-0.51Beta/lib/
AwakeMUD-0.51Beta/lib/etc/
AwakeMUD-0.51Beta/lib/fixer_data/
AwakeMUD-0.51Beta/lib/misc/
AwakeMUD-0.51Beta/lib/plrobjs/
AwakeMUD-0.51Beta/lib/plrobjs/A-E/
AwakeMUD-0.51Beta/lib/plrobjs/K-O/
AwakeMUD-0.51Beta/lib/plrobjs/U-Z/
AwakeMUD-0.51Beta/lib/plrspells/A-E/
AwakeMUD-0.51Beta/lib/plrtext/A-E/
AwakeMUD-0.51Beta/lib/world/
AwakeMUD-0.51Beta/lib/world/mob/
AwakeMUD-0.51Beta/lib/world/obj/
AwakeMUD-0.51Beta/lib/world/qst/
AwakeMUD-0.51Beta/lib/world/shp/
AwakeMUD-0.51Beta/lib/world/wld/
AwakeMUD-0.51Beta/lib/world/zon/
/* *************************************************************************/
/*   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, 94 by the Trustees of the Johns Hopkins University */
/*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               */
/************************************************************************ */

#ifndef _STRUCTS_H_
#define _STRUCTS_H_

#include <sys/types.h>
#include "awake.h"
#include "list.h"
/* #include "shop.h" */

#define NOWHERE    -1      /* nil reference for room-database   */
#define NOTHING    -1      /* nil reference for objects         */
#define NOBODY     -1    /* nil reference for mobiles           */

#define SPECIAL(name) \
   int (name)(struct char_data *ch, void *me, int cmd, char *argument)
#define WSPEC(name) \
   int (name)(struct char_data *ch, struct char_data *vict, struct obj_data \
              *weapon, int dam)

/***********************************************************************
 * Structures                                                          *
 **********************************************************************/


typedef signed char             sbyte;
typedef unsigned char           ubyte;
typedef signed short int        sh_int;
typedef unsigned short int      ush_int;
// typedef char                 bool;           already defined?
typedef char                    byte;

typedef sh_int  room_num;
typedef sh_int  obj_num;

/* Extra description: used in objects, mobiles, and rooms */
struct extra_descr_data {
  char *keyword;                 /* Keyword in look/examine          */
  char *description;             /* What to see                      */
  struct extra_descr_data *next; /* Next in list                     */

  extra_descr_data() :
    keyword(NULL), description(NULL), next(NULL) {}
};

/* Use description: used in rooms for use command */
struct use_descr_data {
  char *keyword;
  char *description1;
  char *description2;
  struct use_descr_data *next;

  use_descr_data() :
    keyword(NULL), description1(NULL), description2(NULL), next(NULL) {}
};

/* object-related structures ******************************************/

/* object flags; used in obj_data */
struct obj_flag_data {
  int value[10];       /* 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 cost_per_day;    /* Cost to keep pr. real day          */
  int timer;           /* Timer for object                   */
  long bitvector;      /* To set chars bits                  */
  byte material;       /* Type of material item is made from */
  byte barrier;        // barrier rating of object if any
  byte condition;      // current barrier rating of the object
  long quest_id;
};

/* 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              */
};

/* ================== Memory Structure for Objects ================== */
struct obj_data {
  obj_num item_number;         /* Where in data-base                   */
  room_num 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];  /* affects */

  char *name;                     /* Title of object :get etc.        */
  char *description;              /* When in room                     */
  char *short_description;        /* when worn/carry/in cont.         */
  char *long_description;         /* long description when examined   */
  struct extra_descr_data *ex_description; /* extra descriptions     */
  struct use_descr_data *use_description;  /* use descriptions       */
  struct char_data *carried_by;   /* Carried by :NULL in room/conta   */
  struct char_data *worn_by;      /* Worn by?                         */
  sh_int worn_on;                 /* Worn where?                      */

  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             */

  obj_data() :
    name(NULL), description(NULL), short_description(NULL),
    long_description(NULL), ex_description(NULL), use_description(NULL),
    carried_by(NULL), worn_by(NULL), in_obj(NULL), contains(NULL),
    next_content(NULL) {}
};
/* ======================================================================= */

/* ====================== File Element for Objects ======================= */
/*                 BEWARE: Changing it will ruin rent files                */
struct obj_file_elem {
  obj_num item_number;
  sh_int locate;

  int  value[10];
  int extra_flags;
  int weight;
  int timer;
  long bitvector;
  byte material;
  byte condition;
  struct obj_affected_type affected[MAX_OBJ_AFFECT];
};

/* header block for rent files.  BEWARE: Changing it will ruin rent files  */
struct rent_info {
  int time;
  int rentcode;
  int net_cost_per_diem;
  int gold;
  int account;
  int nitems;
};
/* ======================================================================= */

/* room-related structures ************************************************/

struct room_direction_data {
  char *general_description;       /* When look DIR.                   */

  char *keyword;               /* for open/close                       */

  sh_int exit_info;            /* Exit info                            */
  obj_num key;                 /* Key's number (-1 for no key)         */
  room_num to_room;            /* Where direction leads (NOWHERE)      */
  sh_int key_level;            /* Level of electronic lock             */
  byte hidden;                 /* target number for exit if hidden     */
  byte material;               /* material                             */
  byte barrier;                /* barrier rating                       */
  byte condition;      // current barrier rating
  room_num to_room_vnum;       /* the vnum of the room. Used for OLC   */

  room_direction_data() :
    general_description(NULL), keyword(NULL) {}
};

/* ================== Memory Structure for room ======================= */
struct room_data {
  room_num number;             /* Rooms number (vnum)                */
  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 */
  int room_flags;              /* DEATH,DARK ... etc                 */
  int condition;               /* condition of room, ie fog, ice, etc */
  byte spec;            // auto-assigns specs
  sbyte rating;                 // rating of room for various things
  char *msp_trigger;    // Mud Sound Protocol trigger

  byte light;                  /* Number of lightsources in room     */
  SPECIAL(*func);

  struct obj_data *contents;   /* List of items in room              */
  struct char_data *people;    /* List of NPC / PC in room           */

  room_data() :
    name(NULL), description(NULL), ex_description(NULL), msp_trigger(NULL),
    func(NULL), contents(NULL), people(NULL) {}
};
/* ====================================================================== */

/* char-related structures ************************************************/

typedef struct spell_data
{
  char *name;                           // spell name
  sh_int physical;                      // is spell mana or physical spell
  u_char category;                      // category of spell
  u_char force;                         // force of spell
  sh_int target;                        // spell targets
  sh_int drain;                         // drain addition and level of spell
  sh_int damage;                        // damage level of spell
  sh_int type;                          // type for determing spell mesg
  sh_int effect;                        // element, etc
  struct spell_data *next;              // pointer to next spell in list

  spell_data() :
    name(NULL), next(NULL) {}
} spell_t;

typedef struct train_data {
  int vnum;
  int attribs;
  byte is_newbie;
} train_t;

typedef struct teach_data {
  int vnum;
  sh_int s1, s2, s3, s4, s5, s6, s7, s8;
  char *msg;
  sh_int type;
} teach_t;

typedef struct adept_data {
  int vnum;
  sh_int skills[5];
  byte is_newbie;
} adept_t;

typedef struct master_data {
  int vnum;
  sh_int spell1, force1;
  sh_int spell2, force2;
  byte is_hermetic;
  byte is_newbie;
} master_t;

/* memory structure for characters */
struct memory_rec_struct {
  long id;
  struct memory_rec_struct *next;

  memory_rec_struct() :
    next(NULL) {}
};

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 minute, hours, day, month, weekday;
  sh_int year;
};

/* 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 */
};

/* general player-related info, usually PC's and NPC's */
struct char_player_data {
  char passwd[MAX_PWD_LENGTH+1];     /* character's password         */
  char *name;                /* PC / NPC s name (kill ...  )         */
  char *short_descr;         /* for NPC 'actions'                    */
  char *long_descr;          /* for 'look'                               */
  char *description;         /* Extra descriptions                   */
  char *title;               /* PC / NPC's title                     */
  char *pretitle, *whotitle; /* PC's pre/whotitles                   */
  char *prompt;              /* PC's customized prompt               */
  char *poofin, *poofout;    /* PC's poofin/poofout                  */
  char *mname, *msdesc, *mdesc, *mldesc; /* PC's matrix descriptions */
  char *aname, *asdesc, *adesc, *aldesc; /* PC's astral descriptions */
  byte sex;                  /* PC / NPC's sex                       */
  byte level;                /* PC / NPC's level                     */
  int last_room;              /* PC s Hometown (zone)                 */
  struct time_data time;     /* PC's AGE in days                     */
  ushort weight;              /* PC / NPC's weight                    */
  ushort height;              /* PC / NPC's height                    */
  byte race;                 /* PC / NPC's race                      */
  byte tradition;            /* PC / NPC's tradition                       */

  char_player_data() :
    name(NULL), short_descr(NULL), long_descr(NULL), description(NULL),
    title(NULL), pretitle(NULL), whotitle(NULL), prompt(NULL), poofin(NULL),
    poofout(NULL), mname(NULL), msdesc(NULL), mdesc(NULL), mldesc(NULL),
    aname(NULL), asdesc(NULL), adesc(NULL), aldesc(NULL) {}
};

/* Char's abilities.  Used in char_file_u *DO*NOT*CHANGE* */
struct char_ability_data {
  sbyte bod;
  sbyte qui;
  sbyte str;
  sbyte cha;
  sbyte intel;
  sbyte wil;
  sh_int mag;
  sh_int bod_index;
  sbyte rea;
  sh_int ess;
  sh_int astral_pool;
  sh_int defense_pool;
  sh_int combat_pool;
  sh_int hacking_pool;
  sh_int magic_pool;
  sh_int offense_pool;
};

/* Char's points.  Used in char_file_u *DO*NOT*CHANGE* */
struct char_point_data {
  sh_int mental;
  sh_int max_mental;   /* Max move for PC/NPC                     */
  sh_int physical;
  sh_int max_physical; /* Max hit for PC/NPC                      */
  sh_int move;
  sh_int max_move;     /* Max move for PC/NPC                     */

  sh_int ballistic;    /* Ballistic armor class for bullets and such */
  sh_int impact;       /* Impact armor class for clubs and such   */
  int nuyen;           /* Money carried */
  int bank;           /* Nuyen the char has in a bank account */
  int karma;            /* The experience of the player */
  int rep;              /* the reputation of the player */

  sbyte init_dice;     /* Bonuses for initiative dice             */
  sbyte init_roll;     /* Total of init roll                      */

  ubyte sustained;     /* total of sustained spells               */
};

/*
 * char_special_data_saved: specials which both a PC and an NPC have in
 * common, but which must be saved to the playerfile for PC's.
 *
 * WARNING:  Do not change this structure.  Doing so will ruin the
 * playerfile.  If you want to add to the playerfile, use the spares
 * in player_special_data.
 */
struct char_special_data_saved {
  int alignment;              /* +-1000 for alignments                */
  byte left_handed;
  byte wielded[2];
  byte cur_lang;         /* # of language char is currently speaking */
  long idnum;                  /* player's idnum; -1 for mobiles       */
  long act;                    /* act flag for NPC's; player flag for PC's */

  long affected_by;            /* Bitvector for spells/skills affected by */
  byte skills[MAX_SKILLS+1];   /* array of skills plus skill 0         */
};

/* Special playing constants shared by PCs and NPCs which aren't in pfile */
struct char_special_data {
  struct char_data *fighting;  /* Opponent                             */
  struct char_data *hunting;   /* Char hunted by this char             */

  struct spell_data *spell_q;  /* queue of spells                      */

  // these two lists are used primarily for combat reasons--the fightList
  // contains a list of all the folks this char is fighting, and the
  // defend list contains all the folks this person is defending against
  // class List<struct char_data *> fightList;
  // class List<struct char_data *> defendList;

  byte position;               /* Standing, fighting, sleeping, etc.   */
  int target_mod;

  int carry_weight;           /* Carried weight                       */
  byte carry_items;            /* Number of items carried              */
  sh_int foci;
  sh_int last_healed;
  int timer;                  /* Timer for update                     */
  int mag_create;             /* Variable for spell creation menus    */
  int spell_create;           /* Variable for current spell being created */

  struct char_special_data_saved saved; /* constants saved in plrfile  */

  char_special_data() :
    fighting(NULL), hunting(NULL), spell_q(NULL) {}
};

/*
 *  If you want to add new values to the playerfile, do it here.  DO NOT
 * ADD, DELETE OR MOVE ANY OF THE VARIABLES - doing so will change the
 * size of the structure and ruin the playerfile.  However, you can change
 * the names of the spares to something more meaningful, and then use them
 * in your new code.  They will automatically be transferred from the
 * playerfile into memory when players log in.
 */
struct player_special_data_saved {
  int wimp_level;              /* Below this # of hit points, flee!    */
  byte freeze_level;           /* Level of god who froze char, if any  */
  sh_int invis_level;          /* level of invisibility                */
  room_num load_room;          /* Which room to place char in          */
  long pref;                   /* preference flags for PC's.           */
  ubyte bad_pws;               /* number of bad password attemps       */
  sbyte conditions[3];         /* Drunk, full, thirsty                 */

  ubyte allergy;               /* player allergy                       */
  ubyte severity;              /* severity of player allergy           */
  ubyte reaction;              /* have current reaction from allergy?  */
  ubyte totem;                 /* totem player chooses                 */
  int att_points;              /* attrib points for when you first create */
  int skill_points;            /* starting skill points                   */
  int zonenum;
};

/*
 * Specials needed only by PCs, not NPCs.  Space for this structure is
 * not allocated in memory for NPCs, but it is for PCs and the portion
 * of it labelled 'saved' is saved in the playerfile.  This structure can
 * be changed freely; beware, though, that changing the contents of
 * player_special_data_saved will corrupt the playerfile.
 */
struct player_special_data {
  struct player_special_data_saved saved;

  struct alias *aliases;       /* Character's aliases                  */
  char *gname;
  long last_tell;              /* idnum of last tell from              */
  void *last_olc_targ;         /* olc control                          */
  int last_olc_mode;           /* olc control                          */
  sh_int  questnum;
  sh_int  timeleft;
  sh_int *obj_complete;
  sh_int *mob_complete;

  player_special_data() :
    aliases(NULL), gname(NULL), last_tell(0),
    last_olc_targ(NULL), last_olc_mode(0), questnum(0), timeleft(0),
    obj_complete(NULL), mob_complete(NULL) {}
};

/* Specials used by NPCs, not PCs */
struct mob_special_data {
  byte last_direction;     /* The last direction the monster went     */
  int attack_type;         /* The Attack Type Bitvector for NPC's     */
  byte default_pos;        /* Default position for NPC                */
  sh_int mood;
  memory_rec *memory;      /* List of attackers to remember           */
  sh_int storage;          /* Used for personas in matrix             */
  sh_int loadspeed;        /* Used for personas in matrix             */
  sh_int mob_skills[10];   /* loaded up skills, I gues this is acceptable */
  sh_int iospeed;          /* Used for personas in matrix             */
  sh_int active;           /* Used for personas in matrix             */
  int wait_state;          /* Wait state for bashed mobs              */
  char *leave;             // leave keywords 'mob flies south'
  char *arrive;            // arrive keywords
  int quest_id;
  sh_int spare1, spare2;

  mob_special_data() :
    memory(NULL), leave(NULL), arrive(NULL) {}
};

/* An affect structure.  Used in char_file_u *DO*NOT*CHANGE* */
struct affected_type {
  sh_int type;          /* The type of spell that caused this      */
  sh_int duration;      /* For how long 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)       */
  long sustained_by;    /* id number of who is sustaining spell    */
  bool caster;          /* caster or receiver of spell             */

  struct affected_type *next;

  affected_type() :
    type(0), duration(0), modifier(0), location(0), bitvector(0),
    sustained_by(0), caster(0), next(NULL) {}
};

/* Structure used for chars following other chars */
struct follow_type {
  struct char_data *follower;
  struct follow_type *next;

  follow_type() :
    follower(NULL), next(NULL) {}
};


/* ================== Structure for player/non-player ===================== */
struct char_data {
  int pfilepos;                         /* playerfile pos                */
  sh_int nr;                            /* Mob's rnum                    */
  room_num in_room;                     /* Location (real room number)   */
  room_num was_in_room;                 /* location for linkdead people  */

  struct char_player_data player;       /* Normal data                   */
  struct char_ability_data real_abils;  /* Abilities without modifiers   */
  struct char_ability_data aff_abils;   /* Abils with spells/stones/etc  */
  struct char_point_data points;        /* Points                        */
  struct char_special_data char_specials;      /* PC/NPC specials        */
  struct player_special_data *player_specials; /* PC specials            */
  struct mob_special_data mob_specials;        /* NPC specials           */

  struct affected_type *affected;       /* affected by what spells       */
  struct obj_data *equipment[NUM_WEARS];/* Equipment array               */

  struct obj_data *carrying;            /* Head of list                  */
  struct descriptor_data *desc;         /* NULL for mobiles              */
  struct obj_data *cyberware;           /* Head of list of cyberware     */
  struct obj_data *bioware;             /* Head of list of bioware       */

  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 char_data *next_in_zone;     /* for zone->people - list         */

  struct follow_type *followers;        /* List of chars followers       */
  struct char_data *master;             /* Who is char following?        */
  spell_t *spells;                     /* linked list of spells          */

  char_data() :
    player_specials(NULL), affected(NULL), carrying(NULL), desc(NULL),
    cyberware(NULL), bioware(NULL), next_in_room(NULL), next(NULL),
    next_fighting(NULL), next_in_zone(NULL), followers(NULL),
    master(NULL), spells(NULL) {}
};
/* ====================================================================== */


/* ==================== File Structure for Player ======================= */
/*             BEWARE: Changing it will ruin the playerfile               */
struct char_file_u {
  /* char_player_data */
  char name[MAX_NAME_LENGTH+1];
  char description[EXDSCR_LENGTH];
  char title[MAX_TITLE_LENGTH+1];
  char pretitle[MAX_TITLE_LENGTH+1], whotitle[6];
  char prompt[LINE_LENGTH];
  char poofin[LINE_LENGTH], poofout[LINE_LENGTH];
  char mname[LINE_LENGTH], msdesc[LINE_LENGTH];
  char mdesc[LINE_LENGTH], mldesc[EXDSCR_LENGTH];
  char aname[LINE_LENGTH], asdesc[LINE_LENGTH];
  char adesc[LINE_LENGTH], aldesc[EXDSCR_LENGTH];
  byte sex;
  byte tradition;
  byte level;
  byte race;
  sh_int hometown;
  time_t birth;   /* Time of birth of character     */
  int  played;    /* Number of secs played in total */
  ushort weight;
  ushort height;

  char pwd[MAX_PWD_LENGTH+1];    /* character's password */

  struct char_special_data_saved char_specials_saved;
  struct player_special_data_saved player_specials_saved;
  struct char_ability_data abilities;
  struct char_point_data points;
  struct affected_type affected[MAX_AFFECT];

  time_t last_logon;           /* Time (in secs) of last logon */
  char host[HOST_LENGTH+1];    /* host of last logon */
};
/* ====================================================================== */

/* descriptor-related structures ******************************************/

struct txt_block {
  char *text;
  int aliased;
  struct txt_block *next;

  txt_block() :
    text(NULL), next(NULL) {}
};

struct txt_q {
  struct txt_block *head;
  struct txt_block *tail;

  txt_q() :
    head(NULL), tail(NULL) {}
};

struct ccreate_t {
  sh_int mode;
  sh_int archetype;
  sh_int pr[5];
  sh_int force_points;
  sh_int temp;
};

struct descriptor_data {
  int descriptor;                         /* file descriptor for socket         */
  int ident_sock;               /* socket used for ident process        */
  u_short peer_port;            /* port of peer                         */
  char host[HOST_LENGTH+1];       /* hostname                           */
  byte bad_pws;                   /* number of bad pw attemps this login        */
  byte idle_tics;               /* tics idle at password prompt         */
  byte invalid_name;              /* number of invalid name attempts    */
  int connected;                          /* mode of 'connectedness'            */
  int wait;                               /* wait for how many loops            */
  int desc_num;                   /* unique num assigned to desc                */
  time_t 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;                        /*              -                       */
  long mail_to;                 /* name for mail system                 */
  int   prompt_mode;              /* control of prompt-printing         */
  char inbuf[MAX_RAW_INPUT_LENGTH];  /* buffer for raw input            */
  char last_input[MAX_INPUT_LENGTH]; /* the last input                  */
  char last_tell[MAX_INPUT_LENGTH];
  char small_outbuf[SMALL_BUFSIZE];  /* standard output buffer          */
  char *output;                 /* ptr to the current output buffer     */
  int bufptr;                     /* ptr to end of current output               */
  int bufspace;                 /* space left in the output buffer      */
  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 descriptor_data *snooping; /* Who is this char snooping        */
  struct descriptor_data *snoop_by; /* And who is snooping this char    */
  struct descriptor_data *next; /* link to next descriptor              */
  struct ccreate_t ccr;

  // all this from here down is stuff for on-line creation
  int edit_mode;                /* editing sub mode */
  int edit_number;              /* virtual num of thing being edited */
  int edit_number2;             /* misc number for editing */
  int edit_zone;                /* which zone object is part of      */
  void **misc_data;             /* misc data, usually for extra data crap */
  struct obj_data *edit_obj;    /* iedit */
  struct room_data *edit_room;  /* redit */
  struct char_data *edit_mob;   /* medit */
  struct quest_data *edit_quest;/* qedit */
  struct shop_data *edit_shop;  /* sedit */
  struct zone_data *edit_zon;   /* zedit */
  struct reset_com *edit_cmd;   /* zedit command */

  // this is for spell creation
  spell_t *edit_spell;            /* spell creation */

  descriptor_data() :
    showstr_head(NULL), showstr_point(NULL), output(NULL),
    large_outbuf(NULL), character(NULL), original(NULL), snooping(NULL),
    snoop_by(NULL), next(NULL), edit_obj(NULL), edit_room(NULL),
    edit_mob(NULL), edit_quest(NULL), edit_shop(NULL), edit_zon(NULL),
    edit_cmd(NULL), edit_spell(NULL) {}
};


/* other miscellaneous structures ***************************************/

struct msg_type {
  char *attacker_msg;  /* message to attacker */
  char *victim_msg;    /* message to victim   */
  char *room_msg;      /* message to room     */

  msg_type() :
    attacker_msg(NULL), victim_msg(NULL), room_msg(NULL) {}
};

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 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 str_app_type {
  sh_int tohit;    /* To Hit (THAC0) Bonus/Penalty        */
  sh_int todam;    /* Damage Bonus/Penalty                */
  sh_int carry_w;  /* Maximum weight that can be carrried */
  sh_int wield_w;  /* Maximum weight that can be wielded  */
};

struct target_type {
  int odds;
  int total;
};

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. */
};

/* element in monster and object index-tables   */
struct index_data {
  int   virt;    /* virtual number of this mob/obj           */
  int   number;     /* number of existing units of this mob/obj */
  SPECIAL(*func);
  SPECIAL(*sfunc);
  WSPEC(*wfunc);

  index_data() :
    func(NULL), sfunc(NULL), wfunc(NULL) {}
};

#endif