view Player.h @ 488:a3939d5067c4

Spells
author Nomad
date Wed, 27 Feb 2013 22:15:30 +0200
parents 4bd56919f075
children 6fa3ff8ef729
line wrap: on
line source

#pragma once
#include "Items.h"
#include "Spells.h"




#define PLAYER_BUFF_BLESS            1
#define PLAYER_BUFF_FATE             4
#define PLAYER_BUFF_HAMMERHANDS      6
#define PLAYER_BUFF_PAIN_REFLECTION 10
#define PLAYER_BUFF_PRESERVATION    11
#define PLAYER_BUFF_REGENERATION    12


/*  301 */
enum PlayerSpeech
{
  SPEECH_1 = 1,
  SPEECH_2 = 2,
  SPEECH_3 = 3,
  SPEECH_4 = 4,
  SPEECH_5 = 5,
  SPEECH_6 = 6,
  SPEECH_7 = 7,
  SPEECH_8 = 8,
  SPEECH_9 = 9,
  SPEECH_10 = 10,
  SPEECH_11 = 11,
  SPEECH_12 = 12,
  SPEECH_14 = 14,
  SPEECH_NoRoom = 15,  // when placing to inventory
  SPEECH_16 = 16,
  SPEECH_17 = 17,
  SPEECH_18 = 18,
  SPEECH_19 = 19,
  SPEECH_20 = 20,
  SPEECH_21 = 21,
  SPEECH_GoodDay = 22,     // greets on dialogue start
  SPEECH_GoodEvening = 23,
  SPEECH_24 = 24,
  SPEECH_25 = 25,
  SPEECH_26 = 26,
  SPEECH_27 = 27,
  SPEECH_28 = 28,
  SPEECH_29 = 29,
  SPEECH_30 = 30,
  SPEECH_31 = 31,
  SPEECH_32 = 32,
  SPEECH_33 = 33,
  SPEECH_34 = 34,
  SPEECH_35 = 35,
  SPEECH_36 = 36,
  SPEECH_37 = 37,
  SPEECH_NotEnoughGold = 38,
  SPEECH_39 = 39,
  SPEECH_40 = 40,
  SPEECH_41 = 41,
  SPEECH_42 = 42,
  SPEECH_43 = 43,
  SPEECH_44 = 44,
  SPEECH_45 = 45,
  SPEECH_46 = 46,
  SPEECH_47 = 47,
  SPEECH_48 = 48,
  SPEECH_49 = 49,
  SPEECH_50 = 50,
  SPEECH_51 = 51,
  SPEECH_52 = 52,
  SPEECH_53 = 53,
  SPEECH_54 = 54,
  SPEECH_55 = 55,
  SPEECH_56 = 56,
  SPEECH_57 = 57,
  SPEECH_58 = 58,
  SPEECH_59 = 59,
  SPEECH_60 = 60,
  SPEECH_61 = 61,
  SPEECH_62 = 62,
  SPEECH_63 = 63,
  SPEECH_64 = 64,
  SPEECH_Yell = 65,
  SPEECH_66 = 66,
  SPEECH_67 = 67,
  SPEECH_68 = 68,
  SPEECH_69 = 69,
  SPEECH_70 = 70,
  SPEECH_71 = 71,
  SPEECH_72 = 72,
  SPEECH_73 = 73,
  SPEECH_74 = 74,
  SPEECH_75 = 75,
  SPEECH_76 = 76,
  SPEECH_77 = 77,
  SPEECH_78 = 78,
  SPEECH_79 = 79,
  SPEECH_80 = 80,
  SPEECH_81 = 81,
  SPEECH_82 = 82,
  SPEECH_83 = 83,
  SPEECH_84 = 84,
  SPEECH_85 = 85,
  SPEECH_86 = 86,
  SPEECH_87 = 87,
  SPEECH_88 = 88,
  SPEECH_89 = 89,
  SPEECH_90 = 90,
  SPEECH_91 = 91,
  SPEECH_92 = 92,
  SPEECH_93 = 93,
  SPEECH_94 = 94,
  SPEECH_95 = 95,
  SPEECH_96 = 96,
  SPEECH_97 = 97,
  SPEECH_98 = 98,
  SPEECH_99 = 99,
  SPEECH_100 = 100,
  SPEECH_101 = 101,
  SPEECH_PickMe = 102,
  SPEECH_103 = 103,
  SPEECH_104 = 104,
  SPEECH_105 = 105,
  SPEECH_106 = 106,
  SPEECH_107 = 107,
  SPEECH_108 = 108,
  SPEECH_109 = 109,
  SPEECH_110 = 110,
};



/*  339 */
enum CHARACTER_RACE
{
  CHARACTER_RACE_HUMAN = 0x0,
  CHARACTER_RACE_ELF = 0x1,
  CHARACTER_RACE_GOBLIN = 0x2,
  CHARACTER_RACE_DWARF = 0x3,
};
enum CHARACTER_ATTRIBUTE
{
  CHARACTER_MIGHT = 0x0,
  CHARACTER_INTELLIGANCE = 0x1,
  CHARACTER_WILLPOWER = 0x2,
  CHARACTER_ENDURANCE = 0x3,
  CHARACTER_ACCURACY = 0x4,
  CHARACTER_SPEED = 0x5,
  CHARACTER_LUCK = 0x6,
};



/*  332 */
enum CHARACTER_ATTRIBUTE_TYPE
{
  CHARACTER_ATTRIBUTE_STRENGTH = 0x0,
  CHARACTER_ATTRIBUTE_INTELLIGENCE = 0x1,
  CHARACTER_ATTRIBUTE_WILLPOWER = 0x2,
  CHARACTER_ATTRIBUTE_ENDURANCE = 0x3,
  CHARACTER_ATTRIBUTE_ACCURACY = 0x4,
  CHARACTER_ATTRIBUTE_SPEED = 0x5,
  CHARACTER_ATTRIBUTE_LUCK = 0x6,
  CHARACTER_ATTRIBUTE_HEALTH = 0x7,
  CHARACTER_ATTRIBUTE_MANA = 0x8,
  CHARACTER_ATTRIBUTE_AC_BONUS = 0x9,
  CHARACTER_ATTRIBUTE_RESIST_FIRE = 0xA,
  CHARACTER_ATTRIBUTE_RESIST_AIR = 0xB,
  CHARACTER_ATTRIBUTE_RESIST_WATER = 0xC,
  CHARACTER_ATTRIBUTE_RESIST_EARTH = 0xD,
  CHARACTER_ATTRIBUTE_RESIST_MIND = 0xE,
  CHARACTER_ATTRIBUTE_RESIST_BODY = 0xF,
  CHARACTER_ATTRIBUTE_LEVEL = 0x18,
  CHARACTER_ATTRIBUTE_ATTACK = 0x19,
  CHARACTER_ATTRIBUTE_MELEE_DMG_BONUS = 0x1A,
  CHARACTER_ATTRIBUTE_MELEE_DMG_MIN = 0x1B,
  CHARACTER_ATTRIBUTE_MELEE_DMG_MAX = 0x1C,
  CHARACTER_ATTRIBUTE_RANGED_ATTACK = 0x1D,
  CHARACTER_ATTRIBUTE_RANGED_DAMAGE_BONUS = 0x1E,
  CHARACTER_ATTRIBUTE_RANGED_DAMAGE_MIN = 0x1F,
  CHARACTER_ATTRIBUTE_RANGED_DAMAGE_MAX = 0x20,
};

/*  328 */
enum PLAYER_SKILL_TYPE
{
  PLAYER_SKILL_STAFF = 0,
  PLAYER_SKILL_SWORD = 1,
  PLAYER_SKILL_DAGGER = 2,
  PLAYER_SKILL_AXE = 3,
  PLAYER_SKILL_SPEAR = 4,
  PLAYER_SKILL_BOW = 5,
  PLAYER_SKILL_MACE = 6,
  PLAYER_SKILL_BLASTER = 7,
  PLAYER_SKILL_SHIELD = 8,
  PLAYER_SKILL_LEATHER = 9,
  PLAYER_SKILL_CHAIN = 10,
  PLAYER_SKILL_PLATE = 11,
  PLAYER_SKILL_FIRE = 12,
  PLAYER_SKILL_AIR = 13,
  PLAYER_SKILL_WATER = 14,
  PLAYER_SKILL_EARTH = 15,
  PLAYER_SKILL_SPIRIT = 16,
  PLAYER_SKILL_MIND = 17,
  PLAYER_SKILL_BODY = 18,
  PLAYER_SKILL_LIGHT = 19,
  PLAYER_SKILL_DARK = 20,
  PLAYER_SKILL_ITEM_ID = 21,
  PLAYER_SKILL_MERCHANT = 22,
  PLAYER_SKILL_REPAIR = 23,
  PLAYER_SKILL_BODYBUILDING = 24,
  PLAYER_SKILL_MEDITATION = 25,
  PLAYER_SKILL_PERCEPTION = 26,
  PLAYER_SKILL_DIPLOMACY = 27,
  PLAYER_SKILL_TIEVERY = 28,
  PLAYER_SKILL_TRAP_DISARM = 29,
  PLAYER_SKILL_DODGE = 30,
  PLAYER_SKILL_UNARMED = 31,
  PLAYER_SKILL_MONSTER_ID = 32,
  PLAYER_SKILL_ARMSMASTER = 33,
  PLAYER_SKILL_STEALING = 34,
  PLAYER_SKILL_ALCHEMY = 35,
  PLAYER_SKILL_LEARNING = 36,
  PLAYER_SKILL_CLUB = 37,
  PLAYER_SKILL_MISC = 38,
  PLAYER_SKILL_INVALID = -1
};

/*  329 */
enum PLAYER_CLASS_TYPE: unsigned __int8
{
  PLAYER_CLASS_KNIGHT = 0,
  PLAYER_CLASS_CHEVALIER = 1,
  PLAYER_CLASS_CHAMPION = 2,
  PLAYER_CLASS_BLACK_KNIGHT = 3,
  PLAYER_CLASS_THEIF = 4,
  PLAYER_CLASS_ROGUE = 5,
  PLAYER_CLASS_SPY = 6,
  PLAYER_CLASS_ASSASSIN = 7,
  PLAYER_CLASS_MONK = 8,
  PLAYER_CLASS_INITIATE = 9,
  PLAYER_CLASS_MASTER = 10,
  PLAYER_CLASS_NINJA = 11,
  PLAYER_CLASS_PALADIN = 12,
  PLAYER_CLASS_CRUSADER = 13,
  PLAYER_CLASS_HERO = 14,
  PLAYER_CLASS_VILLIAN = 15,
  PLAYER_CLASS_ARCHER = 16,
  PLAYER_CLASS_WARRIOR_MAGE = 17,
  PLAYER_CLASS_MASTER_ARCHER = 18,
  PLAYER_CLASS_SNIPER = 19,
  PLAYER_CLASS_RANGER = 20,
  PLAYER_CLASS_HUNTER = 21,
  PLAYER_CLASS_RANGER_LORD = 22,
  PLAYER_CLASS_BOUNTY_HUNTER = 23,
  PLAYER_CLASS_CLERIC = 24,
  PLAYER_CLASS_PRIEST = 25,
  PLAYER_CLASS_PRIEST_OF_SUN = 26,
  PLAYER_CLASS_PRIEST_OF_MOON = 27,
  PLAYER_CLASS_DRUID = 28,
  PLAYER_CLASS_GREAT_DRUID = 29,
  PLAYER_CLASS_ARCH_DRUID = 30,
  PLAYER_CLASS_WARLOCK = 31,
  PLAYER_CLASS_SORCERER = 32,
  PLAYER_CLASS_WIZARD = 33,
  PLAYER_CLASS_ARCHMAGE = 34,
  PLAYER_CLASS_LICH = 35
};




#pragma pack(push, 1)
struct LloydBeacon
{
  unsigned __int64 uBeaconTime;
  int field_8;
  int field_C;
  int field_10;
  int field_14;
  int field_18;
};
#pragma pack(pop)



#pragma pack(push, 1)
struct PlayerSpellbookChapter
{
  char bIsSpellAvailable[11];
};
#pragma pack(pop)

#pragma pack(push, 1)
struct PlayerSpells
{
  union
  {
    struct
    {
      PlayerSpellbookChapter pFireSpellbook;
      PlayerSpellbookChapter pAirSpellbook;
      PlayerSpellbookChapter pWaterSpellbook;
      PlayerSpellbookChapter pEarthSpellbook;
      PlayerSpellbookChapter pSpiritSpellbook;
      PlayerSpellbookChapter pMindSpellbook;
      PlayerSpellbookChapter pBodySpellbook;
      PlayerSpellbookChapter pLightSpellbook;
      PlayerSpellbookChapter pDarkSpellbook;
      char _pad_0;
    };
    struct
    {
      PlayerSpellbookChapter pChapters[9];
      char _pad_1;
    };
  };
};
#pragma pack(pop)



#pragma pack(push, 1)
union PlayerEquipment
{
  union
  {
    struct
    {
      unsigned int uOffHand;
      unsigned int uMainHand;
      unsigned int uBow;
      unsigned int uBody;
      unsigned int uHelm;
      unsigned int uBelt;
      unsigned int uCloak;
      unsigned int field_1C;
      unsigned int field_20;
      unsigned int field_24;
      unsigned int field_28;
      unsigned int field_2C;
      unsigned int field_30;
      unsigned int field_34;
      unsigned int field_38;
      unsigned int field_3C;
    };
    unsigned int pIndices[16];
  };
};
#pragma pack(pop)





enum CHARACTER_EXPRESSION_ID: unsigned __int16
{
  CHARACTER_EXPRESSION_INVALID = 0,
  CHARACTER_EXPRESSION_1 = 1,
  CHARACTER_EXPRESSION_CURSED = 2,
  CHARACTER_EXPRESSION_WEAK = 3,
  CHARACTER_EXPRESSION_SLEEP = 4,
  CHARACTER_EXPRESSION_FEAR = 5,
  CHARACTER_EXPRESSION_DRUNK = 6,
  CHARACTER_EXPRESSION_INSANE = 7,
  CHARACTER_EXPRESSION_POISONED = 8,
  CHARACTER_EXPRESSION_DISEASED = 9,
  CHARACTER_EXPRESSION_PARALYZED = 10,
  CHARACTER_EXPRESSION_UNCONCIOUS = 11,
  CHARACTER_EXPRESSION_PERTIFIED = 12,
  CHARACTER_EXPRESSION_13 = 13,
  CHARACTER_EXPRESSION_14 = 14,
  CHARACTER_EXPRESSION_15 = 15,
  CHARACTER_EXPRESSION_16 = 16,
  CHARACTER_EXPRESSION_17 = 17,
  CHARACTER_EXPRESSION_18 = 18,
  CHARACTER_EXPRESSION_19 = 19,
  CHARACTER_EXPRESSION_20 = 20,
  CHARACTER_EXPRESSION_21 = 21,
  CHARACTER_EXPRESSION_22 = 22,
  CHARACTER_EXPRESSION_23 = 23,
  CHARACTER_EXPRESSION_24 = 24,
  CHARACTER_EXPRESSION_25 = 25,
  CHARACTER_EXPRESSION_26 = 26,
  CHARACTER_EXPRESSION_27 = 27,
  CHARACTER_EXPRESSION_28 = 28,
  CHARACTER_EXPRESSION_29 = 29,
  CHARACTER_EXPRESSION_30 = 30,
  CHARACTER_EXPRESSION_31 = 31,
  CHARACTER_EXPRESSION_32 = 32,
  CHARACTER_EXPRESSION_33 = 33,
  CHARACTER_EXPRESSION_34 = 34,
  CHARACTER_EXPRESSION_35 = 35,
  CHARACTER_EXPRESSION_36 = 36,
  CHARACTER_EXPRESSION_37 = 37,
  CHARACTER_EXPRESSION_38 = 38,
  CHARACTER_EXPRESSION_39 = 39,
  
  // ?

  CHARACTER_EXPRESSION_46 = 46,

  CHARACTER_EXPRESSION_54 = 54,
  CHARACTER_EXPRESSION_55 = 55,
  CHARACTER_EXPRESSION_56 = 56,
  CHARACTER_EXPRESSION_57 = 57,
  CHARACTER_EXPRESSION_58 = 58,

  // ?

  CHARACTER_EXPRESSION_DEAD = 98,
  CHARACTER_EXPRESSION_ERADICATED = 99,
};


enum PLAYER_SEX: unsigned __int8
{
  SEX_MALE = 0,
  SEX_FEMALE = 1
};

#pragma pack(push, 1)
struct Player
{
  enum Condition: unsigned __int32
  {
    Condition_Cursed = 0,
    Condition_Weak = 1,
    Condition_Sleep = 2,
    Condition_Fear = 3,
    Condition_Drunk = 4,
    Condition_Insane = 5,
    Condition_Poison1 = 6,
    Condition_Disease1 = 7,
    Condition_Poison2 = 8,
    Condition_Disease2 = 9,
    Condition_Poison3 = 10,
    Condition_Disease3 = 11,
    Condition_Paralyzed = 12,
    Condition_Unconcious = 13,
    Condition_Dead = 14,
    Condition_Pertified = 15,
    Condition_Eradicated = 16,
    Condition_Zombie = 17,
    Condition_Good = 18
  };

  Player();

  void SetVariable(enum VariableType var, signed int a3);
  void AddVariable(enum VariableType var, signed int val);
  void SubtractVariable(enum VariableType var, void *a3);
  bool CompareVariable(enum VariableType VarNum, signed int pValue);
  void UseItem_DrinkPotion_etc(signed int a2, int a3);
  bool AddItem(struct ItemGen *pItem);
  int GetBaseStrength();
  int GetBaseIntelligence();
  int GetBaseWillpower();
  int GetBaseEndurance();
  int GetBaseAccuracy();
  int GetBaseSpeed();
  int GetBaseLuck();
  int GetBaseLevel();
  int GetActualLevel();
  int GetActualMight();
  int GetActualIntelligence();
  int GetActualWillpower();
  int GetActualEndurance();
  int GetActualAccuracy();
  int GetActualSpeed();
  int GetActualLuck();
  int GetActualAttack(int a2);
  int GetMeleeDamageMinimal();
  int GetMeleeDamageMaximal();
  int CalculateMeleeDamageTo(int a2, int a3, unsigned int uTargetActorID);
  int GetRangedAttack();
  int GetRangedDamageMin();
  int GetRangedDamageMax();
  bool CalculateRangedDamageTo(int a2);
  char *GetMeleeDamageString();
  char *GetRangedDamageString();
  bool CanTrainToNextLevel();
  unsigned int GetExperienceDisplayColor();
  int CalculateIncommingDamage(int resistance, signed int type);
  int GetEquippedItemEquipType(unsigned int uEquipSlot);
  int GetEquippedItemSkillType(enum ITEM_EQUIP_TYPE uEquipSlot);
  bool IsUnarmed();
  bool HasItemEquipped(enum ITEM_EQUIP_TYPE uEquipIndex);
  bool HasEnchantedItemEquipped(int uEnchantment);
  bool WearsItem(int a1, signed int a2);
  bool StealFromShop(struct ItemGen *a2, int a3, int a4, int a5, int *a6);
  int StealFromActor(unsigned int uActorID, int _steal_perm, int reputation);
  void Heal(int amount);
  int ReceiveDamage(signed int type, int resistance);
  int _48DCF6(int a2, struct Actor *pActor);
  unsigned int GetSpellSchool(unsigned int uSpellID);
  int GetAttackRecoveryTime(int a2);
  int GetMaxHealth();
  int GetMaxMana();
  int GetBaseAC();
  int GetActualAC();
  unsigned int GetBaseAge();
  unsigned int GetActualAge();
  int GetBaseResistance(enum CHARACTER_ATTRIBUTE_TYPE a2);
  int GetActualResistance(enum CHARACTER_ATTRIBUTE_TYPE a2);
  void SetRecoveryTime(signed int sRecoveryTime);
  void RandomizeName();
  unsigned int GetMajorConditionIdx();
  int _48EA1B_get_static_effect(int a2);
  int _48EA46_calc_special_bonus_by_items(int a2);
  int GetItemsBonus(enum CHARACTER_ATTRIBUTE_TYPE attr, int a3);
  int GetMagicalBonus(enum CHARACTER_ATTRIBUTE_TYPE a2);
  char GetActualSkillLevel(enum PLAYER_SKILL_TYPE uSkillType);
  int GetSkillBonus(enum CHARACTER_ATTRIBUTE_TYPE a2);
  enum CHARACTER_RACE GetRace();
  PLAYER_SEX GetSexByVoice();
  void SetInitialStats();
  int SetSexByVoice();
  void Reset(PLAYER_CLASS_TYPE classType);
  enum PLAYER_SKILL_TYPE GetSkillIdxByOrder(signed int order);
  void DecreaseAttribute(int eAttribute);
  int IncreaseAttribute(int eAttribute);
  void Player::Zero();
  unsigned int GetStatColor(int uStat);
  bool DiscardConditionIfLastsLongerThan(unsigned int uCondition, unsigned __int64 uTime);
  int _490EEE(ItemGen *pItem, int a3, int a4, int a5);
  int GetBodybuilding();
  int GetMediatation();
  int CanIdentify(ItemGen *pItem);
  int CanRepair(ItemGen *);
  int GetMerchant();
  int GetPerception();
  int GetDisarmTrap();
  char GetLearningPercent();
  bool CanFitItem(unsigned int uSlot, unsigned int uItemID);
  unsigned int FindFreeInventorySlot();
  int CreateItemInInventory(unsigned int uSlot, unsigned int uItemID);
  int HasSkill(unsigned int uSkillType);
  int WearItem(unsigned int uItemID);
  int AddItem(unsigned int uSlot, unsigned int uItemID);
  int AddItem2(unsigned int uSlot, ItemGen *Src);
  int CreateItemInInventory2(unsigned int uSlot, ItemGen *Src);
  bool _49298B(ItemGen *a2, int a3, int a4);
  unsigned int RemoveItemAtInventoryIndex(unsigned int uSlot);
  bool CanAct();
  bool CanSteal();
  bool CanEquip_RaceAndAlignmentCheck(unsigned int uItemID);
  int SetCondition(unsigned int uConditionIdx, int a3);
  int _49327B(unsigned int uClass, int a3);
  void PlaySound(PlayerSpeech speech, int a3);
  void PlayEmotion(CHARACTER_EXPRESSION_ID expression, int a3);
  char _4160CA(int a2);
  unsigned int GetItemIDAtInventoryIndex(int *a2);
  int _4B6FF9();
  int _4B824B(float a2);
  int _4B8265(int a2, float a3);
  int _4B8233(int a2, float a3);
  int _4B8213(int a2, float a3);
  int _4B81C3(int a2, float a3);
  int _4B8179(float a2);
  int _4B8142(int a2, float a3);
  int _4B8102(int a2, float a3);
  int _4B807C(float a2);
  int _4B8040_condition_time(unsigned int uCondition);
  bool _43EEF3();
  void _4BE2DD(unsigned int a2, int a3, int _2devent_idx);
  bool Recover(signed int a2);
  bool CanCastSpell(unsigned int uRequiredMana);

  inline bool Weak()       {return pConditions[Condition::Condition_Weak] != 0;}
  inline bool Dead()       {return pConditions[Condition::Condition_Dead] != 0;}
  inline bool Eradicated() {return pConditions[Condition::Condition_Eradicated] != 0;}
  inline bool Zombie()     {return pConditions[Condition::Condition_Zombie] != 0;}
  inline bool Cursed()     {return pConditions[Condition::Condition_Cursed] != 0;}



  __int64 pConditions[20];
  unsigned __int64 uExperience;
  char pName[16];
  PLAYER_SEX uSex;
  PLAYER_CLASS_TYPE classType;
  unsigned __int8 uFace;
  char field_BB;
  unsigned __int16 uMight;
  unsigned __int16 uMightBonus;
  unsigned __int16 uIntelligence;
  unsigned __int16 uIntelligenceBonus;
  unsigned __int16 uWillpower;
  unsigned __int16 uWillpowerBonus;
  unsigned __int16 uEndurance;
  unsigned __int16 uEnduranceBonus;
  unsigned __int16 uSpeed;
  unsigned __int16 uSpeedBonus;
  unsigned __int16 uAccuracy;
  unsigned __int16 uAccuracyBonus;
  unsigned __int16 uLuck;
  unsigned __int16 uLuckBonus;
  __int16 sACModifier;
  unsigned __int16 uLevel;
  __int16 sLevelModifier;
  __int16 sAgeModifier;
  int field_E0;
  int field_E4;
  int field_E8;
  int field_EC;
  int field_F0;
  int field_F4;
  int field_F8;
  int field_FC;
  int field_100;
  int field_104;
  union
  {
    struct
    {
      unsigned __int16 skillStaff;
      unsigned __int16 skillSword;
      unsigned __int16 skillDagger;
      unsigned __int16 skillAxe;
      unsigned __int16 skillSpear;
      unsigned __int16 skillBow;
      unsigned __int16 skillMace;
      unsigned __int16 skillBlaster;
      unsigned __int16 skillShield;
      unsigned __int16 skillLeather;
      unsigned __int16 skillChain;
      unsigned __int16 skillPlate;
      unsigned __int16 skillFire;
      unsigned __int16 skillAir;
      unsigned __int16 skillWater;
      unsigned __int16 skillEarth;
      unsigned __int16 skillSpirit;
      unsigned __int16 skillMind;
      unsigned __int16 skillBody;
      unsigned __int16 skillLight;
      unsigned __int16 skillDark;
      unsigned __int16 skillItemId;
      unsigned __int16 skillMerchant;
      unsigned __int16 skillRepair;
      unsigned __int16 skillBodybuilding;
      unsigned __int16 skillMeditation;
      unsigned __int16 skillPerception;
      unsigned __int16 skillDiplomacy;
      unsigned __int16 skillThievery;
      unsigned __int16 skillDisarmTrap;
      unsigned __int16 skillDodge;
      unsigned __int16 skillUnarmed;
      unsigned __int16 skillMonsterId;
      unsigned __int16 skillArmsmaster;
      unsigned __int16 skillStealing;
      unsigned __int16 skillAlchemy;
      unsigned __int16 skillLearning;
    };
    unsigned __int16 pActiveSkills[37];
  };
  char _guilds_member_bits[64];
  PlayerSpells spellbook;
  char field_1F5[30]; // used to be [31]
  ItemGen pInventoryItems[126];
  ItemGen pEquippedItems[12];
  int pInventoryIndices[126];
  __int16 sResFireBase;
  __int16 sResAirBase;
  __int16 sResWaterBase;
  __int16 sResEarthBase;
  __int16 field_177C;
  __int16 sResMagicBase;
  __int16 sResSpiritBase;
  __int16 sResMindBase;
  __int16 sResBodyBase;
  __int16 sResLightBase;
  __int16 sResDarkBase;
  __int16 sResFireBonus;
  __int16 sResAirBonus;
  __int16 sResWaterBonus;
  __int16 sResEarthBonus;
  __int16 field_1792;
  __int16 sResMagicBonus;
  __int16 sResSpiritBonus;
  __int16 sResMindBonus;
  __int16 sResBodyBonus;
  __int16 sResLightBonus;
  __int16 sResDarkBonus;
  SpellBuff pPlayerBuffs[24];
  unsigned int uVoiceID;
  int field_1924;
  int field_1928;
  int field_192C;
  int field_1930;
  unsigned __int16 uTimeToRecovery;
  char field_1936;
  char field_1937;
  unsigned int uSkillPoints;
  int sHealth;
  int sMana;
  unsigned int uBirthYear;
  PlayerEquipment pEquipment;
  int field_1988[49];
  char field_1A4C;
  char field_1A4D;
  char lastOpenedSpellbookPage;
  unsigned __int8 uQuickSpell;
  char field_1A50[64];
  char _some_attack_bonus;
  char field_1A91;
  char _melee_dmg_bonus;
  char field_1A93;
  char _ranged_atk_bonus;
  char field_1A95;
  char _ranged_dmg_bonus;
  char field_1A97;
  char uFullHealthBonus;
  char _health_related;
  char uFullManaBonus;
  char _mana_related;
  CHARACTER_EXPRESSION_ID expression;
  unsigned __int16 uExpressionTimePassed;
  unsigned __int16 uExpressionTimeLength;
  __int16 field_1AA2;
  int field_1AA4;
  int field_1AA8;
  LloydBeacon pInstalledBeacons[5];
  char uNumDivineInterventionCastsThisDay;
  char uNumArmageddonCasts;
  char uNumFireSpikeCasts;
  char field_1B3B;
};
#pragma pack(pop)