diff Engine/Objects/Player.h @ 2498:92eeeb5200f2

.
author Ritor1
date Fri, 19 Sep 2014 00:03:04 +0600
parents
children 68cdef6879a0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Engine/Objects/Player.h	Fri Sep 19 00:03:04 2014 +0600
@@ -0,0 +1,856 @@
+#pragma once
+#include "Items.h"
+#include "Spells.h"
+#include "Conditions.h"
+
+
+
+enum PLAYER_BUFFS
+{
+  PLAYER_BUFF_RESIST_AIR       = 0,
+  PLAYER_BUFF_BLESS            = 1,
+  PLAYER_BUFF_RESIST_BODY      = 2,
+  PLAYER_BUFF_RESIST_EARTH     = 3,
+  PLAYER_BUFF_FATE             = 4,
+  PLAYER_BUFF_RESIST_FIRE      = 5,
+  PLAYER_BUFF_HAMMERHANDS      = 6,
+  PLAYER_BUFF_HASTE            = 7,
+  PLAYER_BUFF_HEROISM          = 8,
+  PLAYER_BUFF_RESIST_MIND      = 9,
+  PLAYER_BUFF_PAIN_REFLECTION = 10,
+  PLAYER_BUFF_PRESERVATION    = 11,
+  PLAYER_BUFF_REGENERATION    = 12,
+  PLAYER_BUFF_SHIELD          = 13,
+  PLAYER_BUFF_STONESKIN       = 14,
+  PLAYER_BUFF_ACCURACY        = 15,
+  PLAYER_BUFF_ENDURANCE       = 16,
+  PLAYER_BUFF_INTELLIGENCE    = 17,
+  PLAYER_BUFF_LUCK            = 18,
+  PLAYER_BUFF_STRENGTH        = 19,
+  PLAYER_BUFF_WILLPOWER       = 20,
+  PLAYER_BUFF_SPEED           = 21,
+  PLAYER_BUFF_RESIST_WATER    = 22,
+  PLAYER_BUFF_WATER_WALK      = 23
+};
+
+
+#define PLAYER_GUILD_BITS__SPIRIT_MEMBERSHIP 58
+#define PLAYER_GUILD_BITS__ARCOMAGE_WIN      103
+#define PLAYER_GUILD_BITS__ARCOMAGE_LOSE     104
+
+
+/*  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_DO_POTION_FINE = 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_Falling_scream = 66,
+  SPEECH_67 = 67,
+  SPEECH_68 = 68,
+  SPEECH_69 = 69,
+  SPEECH_70 = 70,
+  SPEECH_CarriageReady = 71, // travelling by carriage
+  SPEECH_SetSail = 72,       // travelling by sea
+  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_IDENTIFY_MONSTER_WEAKER = 104,
+  SPEECH_IDENTIFY_MONSTER_STRONGER = 105,
+  SPEECH_IDENTIFY_MONSTER_106 = 106,
+  SPEECH_107 = 107,
+  SPEECH_108 = 108,
+  SPEECH_109 = 109,
+  SPEECH_110 = 110,
+};
+
+
+
+/*  339 */
+enum CHARACTER_RACE
+{
+  CHARACTER_RACE_HUMAN = 0,
+  CHARACTER_RACE_ELF = 1,
+  CHARACTER_RACE_GOBLIN = 2,
+  CHARACTER_RACE_DWARF = 3,
+};
+
+/*  332 */
+enum CHARACTER_ATTRIBUTE_TYPE
+{
+  CHARACTER_ATTRIBUTE_STRENGTH          = 0,
+  CHARACTER_ATTRIBUTE_INTELLIGENCE      = 1,
+  CHARACTER_ATTRIBUTE_WILLPOWER         = 2,
+  CHARACTER_ATTRIBUTE_ENDURANCE         = 3,
+  CHARACTER_ATTRIBUTE_ACCURACY          = 4,
+  CHARACTER_ATTRIBUTE_SPEED             = 5,
+  CHARACTER_ATTRIBUTE_LUCK              = 6,
+  CHARACTER_ATTRIBUTE_HEALTH            = 7,
+  CHARACTER_ATTRIBUTE_MANA              = 8,
+  CHARACTER_ATTRIBUTE_AC_BONUS          = 9,
+
+  CHARACTER_ATTRIBUTE_RESIST_FIRE       = 10,
+  CHARACTER_ATTRIBUTE_RESIST_AIR        = 11,
+  CHARACTER_ATTRIBUTE_RESIST_WATER      = 12,
+  CHARACTER_ATTRIBUTE_RESIST_EARTH      = 13,
+  CHARACTER_ATTRIBUTE_RESIST_MIND       = 14,
+  CHARACTER_ATTRIBUTE_RESIST_BODY       = 15,
+
+  CHARACTER_ATTRIBUTE_SKILL_ALCHEMY     = 16,
+  CHARACTER_ATTRIBUTE_SKILL_STEALING    = 17,
+  CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM = 18,
+  CHARACTER_ATTRIBUTE_SKILL_ITEM_ID     = 19,
+  CHARACTER_ATTRIBUTE_SKILL_MONSTER_ID  = 20,
+  CHARACTER_ATTRIBUTE_SKILL_ARMSMASTER  = 21,
+  CHARACTER_ATTRIBUTE_SKILL_DODGE       = 22,
+  CHARACTER_ATTRIBUTE_SKILL_UNARMED     = 23,
+
+  CHARACTER_ATTRIBUTE_LEVEL             = 24,
+  CHARACTER_ATTRIBUTE_ATTACK            = 25,
+  CHARACTER_ATTRIBUTE_MELEE_DMG_BONUS   = 26,
+  CHARACTER_ATTRIBUTE_MELEE_DMG_MIN     = 27,
+  CHARACTER_ATTRIBUTE_MELEE_DMG_MAX     = 28,
+  CHARACTER_ATTRIBUTE_RANGED_ATTACK     = 29,
+  CHARACTER_ATTRIBUTE_RANGED_DMG_BONUS  = 30,
+  CHARACTER_ATTRIBUTE_RANGED_DMG_MIN    = 31,
+  CHARACTER_ATTRIBUTE_RANGED_DMG_MAX    = 32,
+  CHARACTER_ATTRIBUTE_RESIST_SPIRIT     = 33,
+
+  CHARACTER_ATTRIBUTE_SKILL_FIRE        = 34,
+  CHARACTER_ATTRIBUTE_SKILL_AIR         = 35,
+  CHARACTER_ATTRIBUTE_SKILL_WATER       = 36,
+  CHARACTER_ATTRIBUTE_SKILL_EARTH       = 37,
+  CHARACTER_ATTRIBUTE_SKILL_SPIRIT      = 38,
+  CHARACTER_ATTRIBUTE_SKILL_MIND        = 39,
+  CHARACTER_ATTRIBUTE_SKILL_BODY        = 40,
+  CHARACTER_ATTRIBUTE_SKILL_LIGHT       = 41,
+  CHARACTER_ATTRIBUTE_SKILL_DARK        = 42,
+  CHARACTER_ATTRIBUTE_SKILL_MEDITATION  = 43,
+  CHARACTER_ATTRIBUTE_SKILL_BOW         = 44,
+  CHARACTER_ATTRIBUTE_SKILL_SHIELD      = 45,
+  CHARACTER_ATTRIBUTE_SKILL_LEARNING    = 46
+};
+
+#pragma warning( push )
+#pragma warning( disable: 4341 )
+/*  328 */
+enum PLAYER_SKILL_TYPE: signed __int8
+{
+  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
+};
+#pragma warning( pop )
+
+/*  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 PartyPos_X;
+  int PartyPos_Y;
+  int PartyPos_Z;
+  __int16 PartyRot_X;
+  __int16 PartyRot_Y;
+  int SaveFileID;
+};
+#pragma pack(pop)
+
+
+
+#pragma pack(push, 1)
+struct PlayerSpellbookChapter
+{
+  std::array<char, 11> bIsSpellAvailable;
+};
+#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
+    {
+      std::array<PlayerSpellbookChapter, 9> pChapters;
+      char _pad_1;
+    };
+    struct
+        {
+          std::array<char, 99> bHaveSpell;
+        char _pad_1;
+        };
+  };
+};
+#pragma pack(pop)
+
+
+
+#pragma pack(push, 1)
+union PlayerEquipment
+{
+  union
+  {
+    struct
+    {
+      unsigned int uShield;
+      unsigned int uMainHand;
+      unsigned int uBow;
+      unsigned int uArmor;
+      unsigned int uHelm;
+      unsigned int uBelt;
+      unsigned int uCloak;
+      unsigned int uGlove;
+      unsigned int uBoot;
+      unsigned int uAmulet;
+      std::array<unsigned int, 6> uRings;
+      //unsigned int field_2C;
+      //unsigned int field_30;
+      //unsigned int field_34;
+      //unsigned int field_38;
+      //unsigned int field_3C;
+    };
+    std::array<unsigned int, 16> pIndices;
+  };
+};
+#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_DMGRECVD_MINOR = 34,
+  CHARACTER_EXPRESSION_DMGRECVD_MODERATE = 35,
+  CHARACTER_EXPRESSION_DMGRECVD_MAJOR = 36,
+  CHARACTER_EXPRESSION_37 = 37,
+  CHARACTER_EXPRESSION_38 = 38,
+  CHARACTER_EXPRESSION_39 = 39,
+  
+  // ?
+
+  CHARACTER_EXPRESSION_SCARED = 46, // like falling
+
+  CHARACTER_EXPRESSION_54 = 54,
+  CHARACTER_EXPRESSION_55 = 55,
+  CHARACTER_EXPRESSION_56 = 56,
+  CHARACTER_EXPRESSION_57 = 57,
+  CHARACTER_EXPRESSION_FALLING = 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
+{
+  static const unsigned int INVETORYSLOTSWIDTH = 14;
+  static const unsigned int INVETORYSLOTSHEIGHT = 9;
+
+
+  Player();
+
+  void SetVariable(enum VariableType var, signed int a3);
+  void AddVariable(enum VariableType var, signed int val);
+  void SubtractVariable(enum VariableType VarNum, signed int pValue);
+  bool CompareVariable(enum VariableType VarNum, signed int pValue);
+  void UseItem_DrinkPotion_etc(signed int a2, int a3);
+  bool AddItem(struct ItemGen *pItem);
+  int GetActualAttribute(CHARACTER_ATTRIBUTE_TYPE attrId, unsigned short Player::* attrValue, unsigned short Player::* attrBonus);
+  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(bool a2);
+  int GetMeleeDamageMinimal();
+  int GetMeleeDamageMaximal();
+  int CalculateMeleeDamageTo(bool ignoreSkillBonus, bool ignoreOffhand, unsigned int uTargetActorID);
+  int GetRangedAttack();
+  int GetRangedDamageMin();
+  int GetRangedDamageMax();
+  int CalculateRangedDamageTo(int a2);
+  char *GetMeleeDamageString();
+  char *GetRangedDamageString();
+  bool CanTrainToNextLevel();
+  unsigned int GetExperienceDisplayColor();
+  int CalculateIncommingDamage(DAMAGE_TYPE dmg_type, int amount);
+  ITEM_EQUIP_TYPE   GetEquippedItemEquipType(ITEM_EQUIP_TYPE uEquipSlot);
+  PLAYER_SKILL_TYPE GetEquippedItemSkillType(ITEM_EQUIP_TYPE uEquipSlot);
+  bool IsUnarmed();
+  bool HasItemEquipped(ITEM_EQUIP_TYPE uEquipIndex);
+  bool HasEnchantedItemEquipped(int uEnchantment);
+  bool WearsItem(int item_id, ITEM_EQUIP_TYPE equip_type);
+  int StealFromShop( ItemGen *itemToSteal, int a3, int reputation, int a5, int *fineIfFailed);
+  int StealFromActor(unsigned int uActorID, int _steal_perm, int reputation);
+  void Heal(int amount);
+  int ReceiveDamage(signed int amount, DAMAGE_TYPE dmg_type);
+  int ReceiveSpecialAttackEffect(int attType, struct Actor *pActor);
+  unsigned int GetSpellSchool(unsigned int uSpellID);
+  int GetAttackRecoveryTime(bool bRangedAttack);
+  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 GetParameterBonus(int player_parameter);
+  int GetSpecialItemBonus(int enchantmentId);
+  int GetItemsBonus(enum CHARACTER_ATTRIBUTE_TYPE attr, bool a3 = false);
+  int GetMagicalBonus(enum CHARACTER_ATTRIBUTE_TYPE a2);
+  int GetActualSkillLevel(PLAYER_SKILL_TYPE uSkillType);
+  int GetSkillBonus(enum CHARACTER_ATTRIBUTE_TYPE a2);
+  enum CHARACTER_RACE GetRace();
+  PLAYER_SEX GetSexByVoice();
+  void SetInitialStats();
+  void SetSexByVoice();
+  void Reset(PLAYER_CLASS_TYPE classType);
+  PLAYER_SKILL_TYPE GetSkillIdxByOrder(signed int order);
+  void DecreaseAttribute(int eAttribute);
+  void IncreaseAttribute(int eAttribute);
+  void Player::Zero();
+  unsigned int GetStatColor(int uStat);
+  bool DiscardConditionIfLastsLongerThan(unsigned int uCondition, signed __int64 uTime);
+  int SelectPhrasesTransaction(ItemGen *pItem, int building_type, int BuildID_2Events, int a5);
+  int GetBodybuilding();
+  int GetMeditation();
+  bool CanIdentify(ItemGen *pItem);
+  bool CanRepair(ItemGen *pItem);
+  int GetMerchant();
+  int GetPerception();
+  int GetDisarmTrap();
+  char GetLearningPercent();
+  bool CanFitItem(unsigned int uSlot, unsigned int uItemID);
+  int FindFreeInventoryListSlot();
+  int CreateItemInInventory(unsigned int uSlot, unsigned int uItemID);
+  int HasSkill(unsigned int uSkillType);
+  void WearItem(unsigned int uItemID);
+  int AddItem(int uSlot, unsigned int uItemID);
+  int AddItem2(int uSlot, ItemGen *Src);
+  int CreateItemInInventory2(unsigned int index, ItemGen *Src);
+  void PutItemArInventoryIndex(int uItemID, int itemListPos, int uSlot);
+  void RemoveItemAtInventoryIndex(unsigned int uSlot);
+  bool CanAct();
+  bool CanSteal();
+  bool CanEquip_RaceAndAlignmentCheck(unsigned int uItemID);
+  void SetCondition(unsigned int uConditionIdx, int a3);
+  bool ProfessionOrGuildFlagsCorrect(unsigned int uClass, int a3);
+  void PlaySound(PlayerSpeech speech, int a3);
+  void PlayEmotion(CHARACTER_EXPRESSION_ID expression, int a3);
+  void ItemsEnchant(int enchant_count);
+  unsigned int GetItemIDAtInventoryIndex(int *a2);
+  bool IsPlayerHealableByTemple();
+  int GetBaseIdentifyPrice(float a2);
+  int GetBaseRepairPrice(int a2, float a3);
+  int GetBaseBuyingPrice(int a2, float a3);
+  int GetBaseSellingPrice(int a2, float a3);
+  int GetPriceRepair(int a2, float a3);
+  int GetPriceIdentification(float a2);
+  int GetBuyingPrice(unsigned int uRealValue, float price_multiplier);
+  int GetPriceSell(int uRealValue, float price_multiplier);
+  int GetTempleHealCostModifier(float a2);
+  int GetConditionDayOfWeek(unsigned int uCondition);
+  bool NothingOrJustBlastersEquipped();
+  void SalesProcess(unsigned int inventory_idnx, int item_index, int _2devent_idx);//0x4BE2DD
+  bool Recover(signed int a2);
+  bool CanCastSpell(unsigned int uRequiredMana);
+  void PlayAwardSound();
+  void EquipBody(ITEM_EQUIP_TYPE uEquipType);
+  bool HasUnderwaterSuitEquipped();
+  bool HasItem(unsigned int uItemID, bool checkHeldItem);
+  void OnInventoryLeftClick();
+
+  bool PlayerHitOrMiss(Actor *pActor, int a3, int a4);
+
+  unsigned int GetMultiplierForSkillLevel(unsigned int skillValue, int mult1, int mult2, int mult3, int mult4);
+  int CalculateMeleeDmgToEnemyWithWeapon( ItemGen * weapon, unsigned int uTargetActorID , bool addOneDice);
+  bool WearsItemAnyWhere(int item_id);
+  float GetArmorRecoveryMultiplierFromSkillLevel( unsigned char armour_skill_type, float param2, float param3, float param4, float param5 );
+  void SetSkillByEvent(unsigned __int16 Player::* skillToSet, unsigned __int16 skillValue);
+  void AddSkillByEvent( unsigned __int16 Player::* skillToSet, unsigned __int16 addSkillValue);
+  void PlayAwardSound_Anim();
+  void PlayAwardSound_Anim_Face(PlayerSpeech speech);
+  void PlayAwardSound_Anim97();
+  void PlayAwardSound_Anim97_Face(PlayerSpeech speech);
+  void PlayAwardSound_Anim98();
+  void PlayAwardSound_Anim98_Face(PlayerSpeech speech);
+
+  bool IsWeak();
+  bool IsDead();
+  bool IsEradicated();
+  bool IsZombie();
+  bool IsCursed();
+  bool IsPertified();
+  bool IsUnconcious();
+  bool IsAsleep();
+  bool IsParalyzed();
+  bool IsDrunk();
+
+  void SetCursed(unsigned long long state);
+  void SetWeak(unsigned long long state);
+  void SetAsleep(unsigned long long state);
+  void SetAfraid(unsigned long long state);
+  void SetDrunk(unsigned long long state);
+  void SetInsane(unsigned long long state);
+  void SetPoisonWeak(unsigned long long state);
+  void SetDiseaseWeak(unsigned long long state);
+  void SetPoisonMedium(unsigned long long state);
+  void SetDiseaseMedium(unsigned long long state);
+  void SetPoisonSevere(unsigned long long state);
+  void SetDiseaseSevere(unsigned long long state);
+  void SetParalyzed(unsigned long long state);
+  void SetUnconcious(unsigned long long state);
+  void SetDead(unsigned long long state);
+  void SetPertified(unsigned long long state);
+  void SetEradicated(unsigned long long state);
+  void SetZombie(unsigned long long state);
+
+  void SetCondWeakWithBlockCheck (int blockable);
+  void SetCondInsaneWithBlockCheck (int blockable);
+  void SetCondDeadWithBlockCheck (int blockable);
+  void SetCondUnconsciousWithBlockCheck( int blockable );
+
+  inline bool IsRaceHuman() {return GetRace() == CHARACTER_RACE_HUMAN;}
+  inline bool IsRaceDwarf() {return GetRace() == CHARACTER_RACE_DWARF;}
+  inline bool IsRaceElf() {return GetRace() == CHARACTER_RACE_ELF;}
+  inline bool IsRaceGoblin() {return GetRace() == CHARACTER_RACE_GOBLIN;}
+
+  inline bool IsMale() { return GetSexByVoice() == SEX_MALE;}
+  inline bool IsFemale() { return !IsMale();}
+
+  ItemGen* GetMainHandItem();
+  ItemGen* GetOffHandItem();
+  ItemGen* GetBowItem();
+  ItemGen* GetArmorItem();
+  ItemGen* GetHelmItem();
+  ItemGen* GetBeltItem();
+  ItemGen* GetCloakItem();
+  ItemGen* GetGloveItem();
+  ItemGen* GetBootItem();
+  ItemGen* GetAmuletItem();
+  ItemGen* GetNthRingItem(int ringNum);
+  ItemGen* GetNthEquippedIndexItem(int index);
+  ItemGen* GetItem(unsigned int PlayerEquipment::* itemPos);
+  int GetPlayerIndex();
+
+  static void _42ECB5_PlayerAttacksActor();
+  static void _42FA66_do_explosive_impact(int a1, int a2, int a3, int a4, __int16 a5, signed int a6);
+
+  std::array<__int64, 20> pConditions;
+  unsigned __int64 uExperience;
+  char pName[16];
+  PLAYER_SEX uSex;
+  PLAYER_CLASS_TYPE classType;
+  unsigned __int8 uCurrentFace;
+  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;
+    };
+    std::array<unsigned __int16, 37> pActiveSkills;
+  };
+  unsigned char _achieved_awards_bits[64];
+  PlayerSpells spellbook;
+  char field__1F5[2]; // used to be [31]
+  int pure_luck_used;      
+  int pure_speed_used; 
+  int pure_intellect_used;  
+  int pure_endurance_used;  
+  int pure_willpower_used;       
+  int pure_accuracy_used;      
+  int pure_might_used;    
+  union  //214h
+      {
+      struct  
+          {
+          std::array<ItemGen, 126> pInventoryItemList;
+          std::array<ItemGen, 12> pEquippedItems;
+      };
+      std::array<ItemGen, 138> pOwnItems;
+      };
+  
+  std::array<int, 126> pInventoryMatrix;  
+  __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;
+  std::array<SpellBuff, 24> pPlayerBuffs;
+  unsigned int uVoiceID;
+  int uPrevVoiceID;
+  int uPrevFace;
+  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 playerEventBits[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 _expression21_animtime;
+  int _expression21_frameset;
+  std::array<LloydBeacon, 5> pInstalledBeacons;
+  char uNumDivineInterventionCastsThisDay;
+  char uNumArmageddonCasts;
+  char uNumFireSpikeCasts;
+  char field_1B3B;
+};
+#pragma pack(pop)
+
+void __fastcall DamagePlayerFromMonster(unsigned int uObjID, int a2, struct Vec3_int_ *pPos, signed int a4);
+bool IsDwarfPresentInParty(bool b);
+bool  ShouldLoadTexturesForRaceAndGender(unsigned int _this);
+int PlayerCreation_GetUnspentAttributePointCount();
+int CycleCharacter(bool backwards);
+unsigned int SkillToMastery(unsigned int skill_value);
+
+extern NZIArray<struct Player *, 5> pPlayers;
\ No newline at end of file