/********************************************************************************
** ( .-""-. )+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+( .-""-. ) **
** / _ _ \ ( | | | | | | |D|A|R|K| |R|E|A|L|M|S| | | | | | ) / _ _ \ **
** |(_\/_)| )+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+( |/_)(_\| **
** (_ /\ _) MULTIVERSE Distribution v1.0 (_ /\ _) **
** |v==v| ( Multiverse source created by Exodus ) |mmmm| **
** '-..-' with Aeone, Kain, Kyros, and Kast '-..-' **
**----------------------------------------------------------------------------**
** SMAUG 1.4 written by : Thoric (Derek Snider) with Altrag, Blodkai, **
** Haus, Narn, Scryn, Swordbearer, Tricops, Gorog, **
** Rennard, Grishnakh, Fireblade and Nivek. **
**----------------------------------------------------------------------------**
** Original MERC 2.1 by : Hatchet, Furey, and Kahn. **
** Original Diku MUD by : Hans Staerfeldt, Katja Nyboe, Tom Madsen, **
** Michael Seifert & Sebastian Hammer. **
**----------------------------------------------------------------------------**
* Player Kingdoms header *
********************************************************************************/
typedef struct kingdom_data KINGDOM_DATA;
typedef struct kgdmwar_data KGDMWAR_DATA;
typedef struct unit_data UNIT_DATA;
typedef struct troop_data TROOP_DATA;
typedef struct hero_data HERO_DATA;
typedef struct kingdom_area_data KGDM_AREA;
typedef struct kingdom_news_data KGDM_NEWS;
typedef struct subunit_data SUBUNIT_DATA;
typedef struct kingdom_system KINGDOM_SYSTEM;
extern KINGDOM_DATA * first_kingdom;
extern KINGDOM_DATA * last_kingdom;
extern KGDMWAR_DATA * first_kgdmwar;
extern KGDMWAR_DATA * last_kgdmwar;
extern UNIT_DATA * first_unit;
extern UNIT_DATA * last_unit;
extern HERO_DATA * first_hero;
extern HERO_DATA * last_hero;
extern TROOP_DATA * first_troop;
extern TROOP_DATA * last_troop;
extern KGDM_AREA * first_karea;
extern KGDM_AREA * last_karea;
extern char * const troop_attributes [];
extern char * const troop_abilities [];
extern char * const hero_abiltites [];
typedef enum
{
TROOP_ATTRIB_MERCENARY, TROOP_ATTRIB_SUMMON, TROOP_ATTRIB_SPECIAL, TROOP_ATTRIB_UNDISBANDABLE,
TROOP_ATTRIB_EVENT, TROOP_ATTRIB_NOLEAVE, TROOP_ATTRIB_NOBATTLE, TROOP_ATTRIB_SINGLE,
TROOP_ATTRIB_LIMIT_TURN, TROOP_ATTRIB_NORECRUIT, TROOP_ATTRIB_BASICT,
MAX_TROOP_ATTRIB
} troop_attribute;
typedef enum
{
TROOP_ABILITY_FLYING, TROOP_ABILITY_ADDITIONAL_STRIKE, TROOP_ABILITY_SWIFT, TROOP_ABILITY_LARGE_SHIELD,
TROOP_ABILITY_PIKE, TROOP_ABILITY_REGENERATION, TROOP_ABILITY_ENDURANCE, TROOP_ABILITY_SIEGE,
TROOP_ABILITY_BEAUTY, TROOP_ABILITY_STEAL_LIFE, TROOP_ABILITY_MARKSMANSHIP, TROOP_ABILITY_SCALES,
TROOP_ABILITY_FEAR, TROOP_ABILITY_HEALING, TROOP_ABILITY_CHARM, TROOP_ABILITY_BURSTING_FLAME,
TROOP_ABILITY_CLUMSINESS, TROOP_ABILITY_ACCURACY, TROOP_ABILITY_RECRUIT_SPEED, TROOP_ABILITY_WEAKNESS,
TROOP_ABILITY_INITIATIVE, TROOP_ABILITY_ATTACK, TROOP_ABILITY_COUNTERATTACK, TROOP_ABILITY_HITPOINT,
TROOP_ABILITY_ATTACKTYPE, TROOP_ABILITY_MANA, TROOP_ABILITY_MOVE, TROOP_ABILITY_PREVENT_DAMAGE,
TROOP_ABILITY_DESTROY, TROOP_ABILITY_RESURRECT, TROOP_ABILITY_SPELL_IMMUNITY, TROOP_ABILITY_SLEEP,
TROOP_ABILITY_ATTDEF, TROOP_ABILITY_ATTACK_RESISTANCE, TROOP_ABILITY_SPELL_RESISTANCE, TROOP_ABILITY_DAMAGE_SELF,
MAX_TROOP_ABILITY
} troop_ability;
typedef enum
{
HERO_ABILITY_ACID_DISSOLVE, HERO_ABILITY_ALCHEMY, HERO_ABILITY_ANIMAL_TAMING, HERO_ABILITY_ANIMATE_DEAD,
HERO_ABILITY_ARCFIRE, HERO_ABILITY_BACKSTABBING, HERO_ABILITY_BEASTMASTER, HERO_ABILITY_BERSERK,
HERO_ABILITY_BLESSING, HERO_ABILITY_BLOODTHIRSTY, HERO_ABILITY_BREWING, HERO_ABILITY_BUILDING,
HERO_ABILITY_CHANNELING, HERO_ABILITY_CHARISMA, HERO_ABILITY_CHILL_TOUCH, HERO_ABILITY_CONFUSE,
HERO_ABILITY_CONTRACT, HERO_ABILITY_COUNTERSPELL, HERO_ABILITY_CURSING, HERO_ABILITY_DEMON_HUNTER,
HERO_ABILITY_DRAGON_RIDER, HERO_ABILITY_DRAGONSLAYER, HERO_ABILITY_DWARFBANE, HERO_ABILITY_EARTHQUAKE,
HERO_ABILITY_ENCHANT_ITEM, HERO_ABILITY_ENCHANT_WEAPON, HERO_ABILITY_FIRESTORM, HERO_ABILITY_FIREWALL,
HERO_ABILITY_FORCEFIELD, HERO_ABILITY_GIANTSLAYER, HERO_ABILITY_HEALING, HERO_ABILITY_HONOR,
HERO_ABILITY_ICESHIELD, HERO_ABILITY_ICESTORM, HERO_ABILITY_ICICLE, HERO_ABILITY_LEADERSHIP,
HERO_ABILITY_LIGHTNING_FLASH, HERO_ABILITY_LIGHTNINGSTORM, HERO_ABILITY_MAGIC_SHIELD, HERO_ABILITY_MINDBLAST,
HERO_ABILITY_MIRROR, HERO_ABILITY_NECROMANCY, HERO_ABILITY_ORCSLAYER, HERO_ABILITY_PACIFIST,
HERO_ABILITY_PEACE_WITH_NATURE, HERO_ABILITY_PLANT_CONTROL, HERO_ABILITY_POLYMORPH, HERO_ABILITY_QUICKSAND,
HERO_ABILITY_RAISE_DEAD, HERO_ABILITY_RALLY, HERO_ABILITY_RESEARCHING, HERO_ABILITY_SHEPHERDING,
HERO_ABILITY_SONG, HERO_ABILITY_SOUL_DEVOUR, HERO_ABILITY_SPELL_LORE, HERO_ABILITY_SPRING_OF_LIFE,
HERO_ABILITY_SQUIRREL_DANCE, HERO_ABILITY_SUMMONING, HERO_ABILITY_TACTICS, HERO_ABILITY_TELEPORTATION,
HERO_ABILITY_TERROR, HERO_ABILITY_TRADING, HERO_ABILITY_TURN_UNDEAD, HERO_ABILITY_UNHOLY_AURA,
HERO_ABILITY_VALOR, HERO_ABILITY_VAMPIRE_HUNTER, HERO_ABILITY_WALL_OF_FORCE, HERO_ABILITY_WALL_OF_THORN,
MAX_HERO_ABILITY
} hero_ability;
struct kingdom_data
{
KINGDOM_DATA *next; /* next Kingdom in list */
KINGDOM_DATA *prev; /* previous Kingdom in list */
UNIT_DATA * first_unit; /* First unit in list */
UNIT_DATA * last_unit; /* Last unit in list */
HERO_DATA * first_hero; /* First hero in list */
HERO_DATA * last_hero; /* Last hero in list */
KGDM_AREA * first_karea;
KGDM_AREA * last_karea;
char * filename; /* Kingdom filename */
char * dirname; /* Kingdom directory */
char * name; /* Kingdom name */
int race; /* Kingdom's Race */
char * whoname; /* name displayed */
char * motto; /* Kingdom motto */
char * description; /* A brief description */
char * deity; /* kingdoms deity */
char * ruler; /* kingdom leader */
char * number1; /* First officer */
char * number2; /* Second officer */
char * number3; /* Third officer */
char * number4; /* Fourth officer */
char * number5; /* Fifth officer */
char * general; /* Millitary Advisor */
char * badge; /* Kingdoms badge on who/where/to_room */
char * leadrank; /* Ruler's rank */
char * onerank; /* Number One's rank */
char * tworank; /* Number Two's rank */
char * threerank; /* Number Three's rank */
char * fourrank; /* Number Four's rank */
char * fiverank; /* Number Five's rank */
char * genrank; /* General's rank */
short members; /* Number of kingdom members */
char * url; /* Kingdoms Webpage (Aurora) */
char * warwith; /* At War with */
char * allywith; /* Allied with */
short warkills; /* Current KingdomWar Kills */
short wkills; /* Total KingdomWar Kills */
int population; /* Current population of kingdom */
int max_population; /* Maximum population allowed */
int gold; /* Current amount of gold in possession */
int wood; /* Current amount of wood in possession */
int stone; /* Current amount of stone in possession */
int food; /* Current amount of food in possession */
int mana;
int max_mana;
int curr_glory; /* Current amount of glory in possession */
int max_glory; /* Lifetime amount of glory achieved */
short gminers; /* Number of peons assigned to mine gold */
short sminers; /* Number of peons assigned to mine stone */
short farmers; /* Number of peons assigned to farm */
short woodcutters; /* Number of peons assigned to cut wood */
short timer_hero; /* Timer left until hero is spawned */
KGDM_NEWS *news; /* News */
};
struct kgmdwar_data
{
KGDMWAR_DATA * next; /* next War in list */
KGDMWAR_DATA * prev; /* previous War in list */
KINGDOM_DATA * fighting;
};
struct unit_data
{
UNIT_DATA * next;
UNIT_DATA * prev;
SUBUNIT_DATA *first_troop;
SUBUNIT_DATA *last_troop;
char * commander;
short commander_level;
short commander_class;
};
struct subunit_data
{
SUBUNIT_DATA *next;
SUBUNIT_DATA *prev;
char * name;
int number;
};
struct troop_data
{
TROOP_DATA * next;
TROOP_DATA * prev;
char * filename;
short magic_specialty;
char * name;
short race;
EXT_BV attribute;
int power_rank;
int attack_power;
int extra_attack_power;
short attack_type;
short extra_attack_type;
short damtype;
short extra_damtype;
short attack_initiative;
short extra_attack_initiative;
short counter_attack;
short hit;
short mana;
short move;
short recruit_cost;
int upkeep[5];
short spell_resistance[5];
short attack_resistance[11];
EXT_BV ability;
int recruit_speed;
};
struct hero_data
{
HERO_DATA * next;
HERO_DATA * prev;
char * filename;
char * name;
short Class;
short level;
short magic_specialty;
EXT_BV attribute;
short race;
short gender;
int attack_power;
int attack_level;
int attack_type;
int counter_attack;
int counter_attack_level;
int hit;
int hit_level;
int upkeep[5];
int upkeep_level[5];
int mana;
int mana_level;
EXT_BV ability;
};
struct kingdom_system
{
int build_town [5]; // Gold, Food, Wood, Stone, Mana, Days
int build_farm [5];
int build_guild [5];
int build_node [5];
int build_barrier [5];
int build_workshop[5];
int build_barracks[5];
int build_fortress[5];
short max_command;
};
struct kingdom_area_data
{
KGDM_AREA * next;
KGDM_AREA * prev;
char * filename;
char * name;
char * owner;
int gold[2];
int food[2];
int wood[2];
int stone[2];
int land;
short towns;
short farms;
short barracks;
short guilds;
short barriers;
short fortresses;
short nodes;
short workshops;
int population;
short mood;
char * troop1;
char * troop2;
char * troop3;
short rec_timer1;
short rec_timer2;
short rec_timer3;
short rec_spd1;
short rec_spd2;
short rec_spd3;
short rec_num1;
short rec_num2;
short rec_num3;
short num_troops1;
short num_troops2;
short num_troops3;
UNIT_DATA * first_unit;
UNIT_DATA * last_unit;
};
struct kingdom_news_data
{
char * news;
char * date;
time_t mudtime;
};
// Eradication
#define HCLASS_BERSERKER 0
#define HCLASS_DRAGON_KNIGHT 1
#define HCLASS_FIRE_ELEMENTALIST 2
#define HCLASS_WARLORD 3
// Verdant
#define HCLASS_AMAZON 4
#define HCLASS_ENCHANTRESS 5
#define HCLASS_SHAMAN 6
#define HCLASS_SHEPHERDESS 7
#define HCLASS_SUMMONER 8
// Phantasm
#define HCLASS_BARD 9
#define HCLASS_ILLUSIONIST 10
#define HCLASS_SAGE 11
#define HCLASS_VALKYRIE 12
// Ascendant
#define HCLASS_PRIESTESS 13
#define HCLASS_SHIELDMAIDEN 14
#define HCLASS_VAMPIRE_HUNTER 15
#define HCLASS_WHITE_KNIGHT 16
// Nether
#define HCLASS_CRYPT_KEEPER 17
#define HCLASS_DEVIL_PRINCE 18
#define HCLASS_DREAD_KNIGHT 19
#define HCLASS_NECROMANCER 20
#define HCLASS_SOUL_REAPER 21
#define HCLASS_WITCH 22
// General
#define HCLASS_ALCHEMIST 23
#define HCLASS_ENGINEER 24
#define HCLASS_MERCHANT 25
#define HCLASS_VETERAN 26
#define MAX_HCLASS 26
#define MSPEC_PLAIN 0
#define MSPEC_ERADICATION 1
#define MSPEC_VERDANCY 2
#define MSPEC_PHANTASM 3
#define MSPEC_ASCENDANT 4
#define MSPEC_NETHER 5
#define KINGDOM_DIR "../kingdoms/" /* Nation data dir */
#define KINGDOM_LIST "kingdom.lst" /* List of nations */
#define TROOP_DIR "../kingdoms/troops/" /* Army data dir */
#define TROOP_LIST "troops.lst" /* List of army troops */
#define HERO_DIR "../kingdoms/heroes/" /* Hero data dir */
#define HERO_LIST "heroes.lst" /* List of heroes */
#define KGDM_AREA_DIR "../kingdoms/areas/" /* Dir of conquered areas */
#define KGDM_AREA_LIST "kgdmarea.lst" /* List of conquered areas */
#define MAX_KINGDOM 20
#define MAX_UNITS 20
#define MAX_TROOPS(hero) hero->level * 5;
#define KGDM_GPD 3
#define KGDM_SPD 1
#define KGDM_WPD 2
#define KGDM_FPD 4
#define ATWAR 1 /* If a kingdom is at war */
#define ALLIED 1 /* If a kingdom is allied */
#define UPKEEP_GOLD 0
#define UPKEEP_FOOD 1
#define UPKEEP_WOOD 2
#define UPKEEP_STONE 3
#define UPKEEP_MANA 4
#define UPKEEP_POPULATION 5
#define UPKEEP_MAX UPKEEP_POPULATION
#define GATHERING 0 // How many villagers are gathering resource?
#define REMAINING 1 // How much of the resource remains?
#define STOCKPILE 2 // How much is in the areas stockpile?
#define KCOST_GOLD 0
#define KCOST_FOOD 1
#define KCOST_WOOD 2
#define KCOST_STONE 3
#define KCOST_MANA 4
#define KCOST_DAYS 5
#define BUILDING_TOWN 0
#define BUILDING_FARM 1
#define BUILDING_GUILD 2
#define BUILDING_NODE 3
#define BUILDING_BARRIER 4
#define BUILDING_BARRACKS 5
#define BUILDING_WORKSHOP 6
#define BUILDING_FORTRESS 7
#define TROOP_ATTKTYPE_CLOSE 0
#define TROOP_ATTKTYPE_RANGED 1
#define TROOP_ATTKTYPE_MAGIC 3
#define TROOP_ATTKTYPE_MAGIC_RANGED 4
#define TROOP_ATTKTYPE_PARALYZE 5
#define TROOP_ATTKTYPE_BREATH 6
#define TROOP_ATTKTYPE_MAX TROOP_ATTKTYPE_BREATH
#define TROOP_DAMTYPE_MELEE 0
#define TROOP_DAMTYPE_MISSILE 1
#define TROOP_DAMTYPE_MAGIC 2
#define TROOP_DAMTYPE_HOLY 3
#define TROOP_DAMTYPE_POISON 4
#define TROOP_DAMTYPE_LIGHTNING 5
#define TROOP_DAMTYPE_PSYCHIC 6
#define TROOP_DAMTYPE_FIRE 7
#define TROOP_DAMTYPE_MAX TROOP_DAMTYPE_FIRE
#define TIMER_HERO 7
// Command validation --Exo
#define KRANK_LEADER 8
#define KRANK_DEITY 7
#define KRANK_NUMBER1 6
#define KRANK_NUMBER2 5
#define KRANK_NUMBER3 4
#define KRANK_NUMBER4 3
#define KRANK_NUMBER5 2
#define KRANK_GENERAL 1
#ifndef NULLSTR
#define NULLSTR(str) ((!str) || ((str[0]) == '\0'))
#endif
#ifndef FCLOSE
#define FCLOSE(fp) fclose(fp); fp=NULL;
#endif
#define KD KINGDOM_DATA
KD * get_kingdom args( ( char *name ) );
void remove_kmember args( ( CHAR_DATA *ch ) );
void save_kingdom args( ( KINGDOM_DATA *kingdom ) );
#undef KD