/***************************************************************************\ [*] ___ ____ ____ __ __ ____ [*] ROGUE: ROM With Attitude [*] [*] /#/ ) /#/ ) /#/ ) /#/ /#/ /#/ [*] All rights reserved [*] [*] /#/ < /#/ / /#/ _ /#/ /#/ /#/-- [*] Copyright(C) 2000-2003 [*] [*] /#/ \(#(__/ (#(__/ (#(__/#/ (#(___ [*] Kenneth Conley (Mendanbar) [*] [*] Expression of Digital Creativity.. [*] roguemud@yahoogroups.com [*] [-]---------------------------------------+-+-----------------------------[-] [*] File: feats.h [*] [*] Usage: Definitions for feats [*] \***************************************************************************/ #ifndef __FEATS_H__ #define __FEATS_H__ #include "stl.llist.h" #define FEAT_FILE "../data/feats.txt" #define FEATS_FILE "../data/feats.txt" enum FeatTypes { GeneralFeat, SpecialFeat, MetaMagicFeat, ItemCreationFeat }; enum Feats { FEAT_RESERVED = 0, FEAT_ALERTNESS, FEAT_AMBIDEXTERITY, FEAT_ARMOR_PROFICIENCY_HEAVY, FEAT_ARMOR_PROFICIENCY_LIGHT, FEAT_ARMOR_PROFICIENCY_MEDIUM, FEAT_BLIND_FIGHT, FEAT_BREW_POTION, FEAT_CLEAVE, FEAT_COMBAT_CASTING, FEAT_COMBAT_REFLEXES, FEAT_CRAFT_MAGIC_ARMS, FEAT_CRAFT_ROD, FEAT_CRAFT_STAFF, FEAT_CRAFT_WAND, FEAT_CRAFT_WONDEROUS_ITEM, FEAT_DEFLECT_ARROWS, FEAT_DODGE, FEAT_EMPOWER_SPELL, FEAT_ENDURANCE, FEAT_ENLARGE_SPELL, FEAT_EXOTIC_WEAPON, FEAT_EXPERTISE, FEAT_EXTEND_SPELL, FEAT_EXTRA_TURNING, FEAT_EAR_SHOT, FEAT_FORGE_RING, FEAT_GREAT_CLEAVE, FEAT_GREAT_FORTITUDE, FEAT_HEIGHTEN_SPELL, FEAT_IMPROVED_BULL_RUSH, FEAT_IMPROVED_CRITICAL, FEAT_IMPROVED_DISARM, FEAT_IMPROVED_INITIATIVE, FEAT_IMPROVED_TRIP, FEAT_IMPROVED_TWO_WEAPON_FIGHTING, FEAT_IMPROVED_UNARMED_STRIKE, FEAT_IRON_WILL, FEAT_LEADERSHIP, FEAT_LIGHTNING_REFLEXES, FEAT_MARTIAL_WEAPON, FEAT_MAXIMIZE_SPELL, FEAT_MOBILITY, FEAT_MOUNTED_ARCHERY, FEAT_MOUNTED_COMBAT, FEAT_POINT_BLANK_SHOT, FEAT_POWER_ATTACK, FEAT_PRECISE_SHOT, FEAT_QUICK_DRAW, FEAT_QUICKEN_SPELL, FEAT_RAPID_SHOT, FEAT_RIDE_BY_ATTACK, FEAT_RUN, FEAT_SCRIBE_SCROLL, FEAT_SHIELD_PROFICIENCY, FEAT_SHOT_ON_THE_RUN, FEAT_SILENT_SPELL, FEAT_SIMPLE_WEAPON, FEAT_SKILL_FOCUS, FEAT_SPELL_FOCUS, FEAT_SPELL_MASTERY, FEAT_SPELL_PENETRATION, FEAT_SPIRITED_CHARGE, FEAT_SPRING_ATTACK, FEAT_STILL_SPELL, FEAT_STUNNING_FIST, FEAT_SUNDER, FEAT_TOUGHNESS, FEAT_TRACK, FEAT_TRAMPLE, FEAT_TWO_WEAPON_FIGHTING, FEAT_WEAPON_FINESSE, FEAT_WEAPON_FOCUS, FEAT_WEAPON_SPECIALIZATION, FEAT_WHIRLWIND_ATTACK }; enum ReqType { ReqNone, ReqAttr, ReqFeat, ReqSkill, ReqClass, ReqBonus }; enum ApplyType { ApplyNone, ApplyAttr, ApplySkill }; class TempReq { public: TempReq(void); ~TempReq(void); static void Apply(void); VNum vnum; // location of req in feat_index ReqType type; UInt32 where; // Attr, Skill, Bonus locator UInt32 value; // requirement value (+2 or -1) char * featName; // if it has a feat requirement name it }; class FeatReq { public: FeatReq(void); ~FeatReq(void); ReqType type; UInt32 where; UInt32 requirement; }; class FeatAffect { public: FeatAffect(void); FeatAffect(FeatAffect *aff, CHAR_DATA *ch); ~FeatAffect(void); void ToChar(CHAR_DATA *ch); void Remove(CHAR_DATA *ch); bool HasFeat(CHAR_DATA *ch, ApplyType type); ApplyType type; UInt32 location; UInt32 modifier; }; class FeatData { public: FeatData(void); ~FeatData(void); bool AddAffect(FeatTypes type, UInt32 loc, UInt32 mod); VNum vnum; char * name; char * description; SInt32 type; SInt32 level; LList<FeatReq *> reqs; LList<FeatAffect *> affects; }; RNum real_feat(VNum vnum); RNum find_feat_by_name(char *name); FeatData *get_feat_data(char *name); void feats_save_to_disk(void); #endif