World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Файл Player.cpp

См. исходные тексты.

Классы

struct  PlayerCreation_AttributeProps
 

Определения типов

using EngineIoc = Engine_::IocContainer
 

Функции

int PlayerCreation_GetUnspentAttributePointCount ()
 
bool CmpSkillValue (int valToCompare, int skillValue)
 
int CycleCharacter (bool backwards)
 
bool ShouldLoadTexturesForRaceAndGender (unsigned int _this)
 
bool IsDwarfPresentInParty (bool a1)
 
void DamagePlayerFromMonster (unsigned int uObjID, int dmgSource, Vec3_int_ *pPos, signed int a4)
 
unsigned int SkillToMastery (unsigned int skill_value)
 

Переменные

static Mousemouse = EngineIoc::ResolveMouse()
 
static DecalBuilderdecal_builder = EngineIoc::ResolveDecalBuilder()
 
static SpellFxRendererspell_fx_renderer = EngineIoc::ResolveSpellFxRenderer()
 
NZIArray< struct Player *, 5 > pPlayers
 
enum PlayerSpeech PlayerSpeechID
 
PlayerCreation_AttributeProps StatTable [4][7]
 
std::array< int, 5 > StealingMasteryBonuses
 
std::array< int, 5 > StealingRandomBonuses
 
std::array< int, 5 > StealingEnchantmentBonusForSkill
 
unsigned char pSkillAvailabilityPerClass [9][37]
 
unsigned char pEquipTypeToBodyAnchor [21]
 
unsigned char pBaseHealthByClass [12]
 
unsigned char pBaseManaByClass [12] = {0, 0, 0, 5, 5, 0, 10, 10, 15, 0, 0, 0}
 
unsigned char pBaseHealthPerLevelByClass [36]
 
unsigned char pBaseManaPerLevelByClass [36]
 
unsigned char pConditionAttributeModifier [7][19]
 
unsigned char pAgingAttributeModifier [7][4]
 
unsigned int pAgeingTable [4] = {50, 100, 150, 0xFFFF}
 
std::array< unsigned int, 18 > pConditionImportancyTable
 
short param_to_bonus_table [29]
 
signed int parameter_to_bonus_value [29]
 
unsigned short base_recovery_times_per_weapon_type [12]
 

Типы

◆ EngineIoc

См. определение в файле Player.cpp строка 39

Функции

◆ PlayerCreation_GetUnspentAttributePointCount()

int PlayerCreation_GetUnspentAttributePointCount ( )

См. определение в файле Player.cpp строка 223

223  {
224  int CurrentStatValue = 50;
225  int RemainingStatPoints = 50;
226  int raceId;
227  int StatBaseValue;
228  int PenaltyMult;
229  int BonusMult;
230 
231  for (int playerNum = 0; playerNum < 4; playerNum++) {
232  raceId = pParty->pPlayers[playerNum].GetRace();
233 
234  for (int statNum = 0; statNum <= 6; statNum++) {
235  switch (statNum) {
236  case 0:
237  CurrentStatValue = pParty->pPlayers[playerNum].uMight;
238  break;
239  case 1:
240  CurrentStatValue =
241  pParty->pPlayers[playerNum].uIntelligence;
242  break;
243  case 2:
244  CurrentStatValue = pParty->pPlayers[playerNum].uWillpower;
245  break;
246  case 3:
247  CurrentStatValue = pParty->pPlayers[playerNum].uEndurance;
248  break;
249  case 4:
250  CurrentStatValue = pParty->pPlayers[playerNum].uAccuracy;
251  break;
252  case 5:
253  CurrentStatValue = pParty->pPlayers[playerNum].uSpeed;
254  break;
255  case 6:
256  CurrentStatValue = pParty->pPlayers[playerNum].uLuck;
257  break;
258  }
259 
260  StatBaseValue = StatTable[raceId][statNum].uBaseValue;
261 
262  if (CurrentStatValue >=
263  StatBaseValue) { // bonus or penalty increase
264  PenaltyMult = StatTable[raceId][statNum].uDroppedStep;
265  BonusMult = StatTable[raceId][statNum].uBaseStep;
266  } else { // less than base
267  PenaltyMult = StatTable[raceId][statNum].uBaseStep;
268  BonusMult = StatTable[raceId][statNum].uDroppedStep;
269  }
270 
271  RemainingStatPoints +=
272  PenaltyMult * (StatBaseValue - CurrentStatValue) / BonusMult;
273  }
274  }
275 
276  return RemainingStatPoints;
277 }

Перекрестные ссылки pParty, Party::pPlayers, StatTable, PlayerCreation_AttributeProps::uBaseStep, PlayerCreation_AttributeProps::uBaseValue и PlayerCreation_AttributeProps::uDroppedStep.

Используется в CreateParty_EventLoop(), Player::IncreaseAttribute() и GUIWindow_PartyCreation::Update().

+ Граф вызова функции:

◆ CmpSkillValue()

bool CmpSkillValue ( int  valToCompare,
int  skillValue 
)

См. определение в файле Player.cpp строка 4635

4635  {
4636  int v4;
4637  if (valToCompare <= 63)
4638  v4 = skillValue & 0x3F;
4639  else
4640  v4 = skillValue & skillValue;
4641  return v4 >= valToCompare;
4642 }

Используется в Player::CompareVariable().

+ Граф вызова функции:

◆ CycleCharacter()

int CycleCharacter ( bool  backwards)

См. определение в файле Player.cpp строка 6825

6825  {
6826  const int PARTYSIZE = 4;
6827  int valToAdd = backwards ? (PARTYSIZE - 2) : 0;
6828  int mult = backwards ? -1 : 1;
6829 
6830  for (int i = 0; i < (PARTYSIZE - 1); i++) {
6831  int currCharId =
6832  ((uActiveCharacter + mult * i + valToAdd) % PARTYSIZE) + 1;
6833  if (pPlayers[currCharId]->uTimeToRecovery == 0) {
6834  return currCharId;
6835  }
6836  }
6837  return uActiveCharacter;
6838 }

Перекрестные ссылки pPlayers и uActiveCharacter.

Используется в Application::Game::EventLoop().

+ Граф вызова функции:

◆ ShouldLoadTexturesForRaceAndGender()

bool ShouldLoadTexturesForRaceAndGender ( unsigned int  _this)

См. определение в файле Player.cpp строка 6879

6879  {
6880  CHARACTER_RACE race; // edi@2
6881  PLAYER_SEX sex; // eax@2
6882 
6883  for (int i = 1; i <= 4; i++) {
6884  race = pPlayers[i]->GetRace();
6885  sex = pPlayers[i]->GetSexByVoice();
6886  switch (_this) {
6887  case 0:
6888  if ((race == CHARACTER_RACE_HUMAN ||
6889  race == CHARACTER_RACE_ELF ||
6890  race == CHARACTER_RACE_GOBLIN) &&
6891  sex == SEX_MALE)
6892  return true;
6893  break;
6894  case 1:
6895  if ((race == CHARACTER_RACE_HUMAN ||
6896  race == CHARACTER_RACE_ELF ||
6897  race == CHARACTER_RACE_GOBLIN) &&
6898  sex == SEX_FEMALE)
6899  return true;
6900  break;
6901  case 2:
6902  if (race == CHARACTER_RACE_DWARF && sex == SEX_MALE)
6903  return true;
6904  break;
6905  case 3:
6906  if (race == CHARACTER_RACE_DWARF && sex == SEX_FEMALE)
6907  return true;
6908  break;
6909  }
6910  }
6911  return false;
6912 }

Перекрестные ссылки CHARACTER_RACE_DWARF, CHARACTER_RACE_ELF, CHARACTER_RACE_GOBLIN, CHARACTER_RACE_HUMAN, pPlayers, SEX_FEMALE и SEX_MALE.

Используется в CharacterUI_LoadPaperdollTextures().

+ Граф вызова функции:

◆ IsDwarfPresentInParty()

bool IsDwarfPresentInParty ( bool  a1)

См. определение в файле Player.cpp строка 6915

6915  {
6916  for (uint i = 0; i < 4; ++i) {
6917  CHARACTER_RACE race = pParty->pPlayers[i].GetRace();
6918 
6919  if (race == CHARACTER_RACE_DWARF && a1)
6920  return true;
6921  else if (race != CHARACTER_RACE_DWARF && !a1)
6922  return true;
6923  }
6924  return false;
6925 }

Перекрестные ссылки CHARACTER_RACE_DWARF, pParty и Party::pPlayers.

Используется в CharacterUI_LoadPaperdollTextures().

+ Граф вызова функции:

◆ DamagePlayerFromMonster()

void DamagePlayerFromMonster ( unsigned int  uObjID,
int  dmgSource,
Vec3_int_ *  pPos,
signed int  a4 
)

См. определение в файле Player.cpp строка 6928

6929  {
6930  Player* playerPtr; // ebx@3
6931  Actor* actorPtr; // esi@3
6932  int spellId; // eax@38
6933  signed int recvdMagicDmg; // eax@139
6934  int v72[4]; // [sp+30h] [bp-24h]@164
6935  int healthBeforeRecvdDamage; // [sp+48h] [bp-Ch]@3
6936  unsigned int uActorID; // [sp+4Ch] [bp-8h]@1
6937 
6938  uActorID = PID_ID(uObjID);
6939  int pidtype = PID_TYPE(uObjID);
6940 
6941  if (pidtype != 2) {
6942  if (pidtype != 3) __debugbreak();
6943 
6944  if (a4 == -1) __debugbreak();
6945 
6946  playerPtr = &pParty->pPlayers[a4];
6947  actorPtr = &pActors[uActorID];
6948  healthBeforeRecvdDamage = playerPtr->sHealth;
6949  if (PID_TYPE(uObjID) != 3 || !actorPtr->ActorHitOrMiss(playerPtr))
6950  return;
6951 
6952  if (playerPtr->GetActualSkillMastery(PLAYER_SKILL_UNARMED) >= 4 &&
6953  rand() % 100 < playerPtr->GetActualSkillLevel(PLAYER_SKILL_UNARMED)) {
6954  auto str = localization->FormatString(637, playerPtr->pName); // evades damage
6956  playerPtr->PlaySound(SPEECH_6, 0);
6957  return;
6958  }
6959 
6960  ItemGen* equippedArmor = playerPtr->GetArmorItem();
6961  SoundID soundToPlay;
6962  if (!equippedArmor || equippedArmor->IsBroken() ||
6963  (equippedArmor->GetPlayerSkillType() != PLAYER_SKILL_CHAIN &&
6964  equippedArmor->GetPlayerSkillType() != PLAYER_SKILL_PLATE)) {
6965  int randVal = rand() % 4;
6966  switch (randVal) {
6967  case 0:
6968  soundToPlay = (SoundID)108;
6969  break;
6970  case 1:
6971  soundToPlay = (SoundID)109;
6972  break;
6973  case 2:
6974  soundToPlay = (SoundID)110;
6975  break;
6976  case 3:
6977  soundToPlay = (SoundID)44;
6978  break;
6979  default:
6980  Error("Unexpected sound value");
6981  }
6982  } else {
6983  int randVal = rand() % 4;
6984  switch (randVal) {
6985  case 0:
6986  soundToPlay = (SoundID)105;
6987  break;
6988  case 1:
6989  soundToPlay = (SoundID)106;
6990  break;
6991  case 2:
6992  soundToPlay = (SoundID)107;
6993  break;
6994  case 3:
6995  soundToPlay = (SoundID)45;
6996  break;
6997  default:
6998  Error("Unexpected sound value");
6999  }
7000  }
7001  pAudioPlayer->PlaySound(soundToPlay, PID(OBJECT_Player, a4 + 80), 0, -1, 0, 0);
7002  int dmgToReceive = actorPtr->_43B3E0_CalcDamage(dmgSource);
7003  if (actorPtr->pActorBuffs[ACTOR_BUFF_SHRINK].Active()) {
7004  __int16 spellPower = actorPtr->pActorBuffs[ACTOR_BUFF_SHRINK].uPower;
7005  if (spellPower > 0)
7006  dmgToReceive /= spellPower;
7007  }
7008 
7009  int damageType;
7010  switch (dmgSource) {
7011  case 0:
7012  damageType = actorPtr->pMonsterInfo.uAttack1Type;
7013  break;
7014  case 1:
7015  damageType = actorPtr->pMonsterInfo.uAttack2Type;
7016  break;
7017  case 2:
7018  spellId = actorPtr->pMonsterInfo.uSpell1ID;
7019  damageType = pSpellStats->pInfos[spellId].uSchool;
7020  break;
7021  case 3:
7022  spellId = actorPtr->pMonsterInfo.uSpell2ID;
7023  damageType = pSpellStats->pInfos[spellId].uSchool;
7024  break;
7025  case 4:
7026  damageType =
7028  break;
7029  default:
7030  case 5:
7031  damageType = 4; // yes, the original just assigned the value 4
7032  break;
7033  }
7034  // if (!engine->config->NoDamage()) {
7035  dmgToReceive =
7036  playerPtr->ReceiveDamage(dmgToReceive, (DAMAGE_TYPE)damageType);
7037  if (playerPtr->pPlayerBuffs[PLAYER_BUFF_PAIN_REFLECTION].Active()) {
7038  int actorState = actorPtr->uAIState;
7039  if (actorState != Dying && actorState != Dead) {
7040  int reflectedDamage = actorPtr->CalcMagicalDamageToActor(
7041  (DAMAGE_TYPE)damageType, dmgToReceive);
7042  actorPtr->sCurrentHP -= reflectedDamage;
7043  if (reflectedDamage >= 0) {
7044  if (actorPtr->sCurrentHP >= 1) {
7046  uActorID, PID(OBJECT_Player, a4),
7047  0); // todo extract this branch to a function
7048  // once Actor::functions are changed to
7049  // nonstatic actor functions
7050  Actor::AggroSurroundingPeasants(uActorID, 1);
7051  } else {
7052  if (pMonsterStats->pInfos[actorPtr->pMonsterInfo.uID].bQuestMonster & 1 &&
7053  !engine->config->NoBloodsplats()) {
7054  int splatRadius = _4D864C_force_sw_render_rules && !engine->config->NoHugeBloodsplats()
7055  ? 10 * actorPtr->uActorRadius
7056  : actorPtr->uActorRadius;
7058  actorPtr->vPosition.x,
7059  actorPtr->vPosition.y,
7060  actorPtr->vPosition.z, 1.0, 0.0, 0.0,
7061  (float)splatRadius, 0, 0);
7062  }
7063  Actor::Die(uActorID);
7065  Actor::AggroSurroundingPeasants(uActorID, 1);
7066  if (actorPtr->pMonsterInfo.uExp)
7069  ->pInfos[actorPtr->pMonsterInfo.uID]
7070  .uExp);
7071  int speechToPlay = SPEECH_51;
7072  if (rand() % 100 < 20)
7073  speechToPlay =
7074  actorPtr->pMonsterInfo.uHP >= 100 ? 2 : 1;
7075  playerPtr->PlaySound((PlayerSpeech)speechToPlay, 0);
7076  }
7077  }
7078  }
7079  }
7080  if (!engine->config->NoDamage() &&
7081  actorPtr->pMonsterInfo.uSpecialAttackType &&
7082  rand() % 100 < actorPtr->pMonsterInfo.uLevel *
7083  actorPtr->pMonsterInfo.uSpecialAttackLevel) {
7084  playerPtr->ReceiveSpecialAttackEffect(
7085  actorPtr->pMonsterInfo.uSpecialAttackType, actorPtr);
7086  }
7087  //}
7088  if (!pParty->bTurnBasedModeOn) {
7089  int actEndurance = playerPtr->GetActualEndurance();
7090  int recoveryTime =
7091  (int)((20 - playerPtr->GetParameterBonus(actEndurance)) *
7092  flt_6BE3A4_debug_recmod1 * 2.133333333333333);
7093  playerPtr->SetRecoveryTime(recoveryTime);
7094  }
7095  int yellThreshold = playerPtr->GetMaxHealth() / 4;
7096  if (yellThreshold < playerPtr->sHealth &&
7097  yellThreshold >= healthBeforeRecvdDamage &&
7098  playerPtr->sHealth > 0) {
7099  playerPtr->PlaySound(SPEECH_48, 0);
7100  }
7102  return;
7103  } else {
7104  SpriteObject* v37 = &pSpriteObjects[uActorID];
7105  int uActorType = PID_TYPE(v37->spell_caster_pid);
7106  int uActorID = PID_ID(v37->spell_caster_pid);
7107  if (uActorType == 2) { // item
7108  Player* playerPtr; // eax@81
7109  if (a4 != -1) {
7110  playerPtr = &pParty->pPlayers[a4];
7111  } else {
7112  int activePlayerCounter = 0;
7113  for (int i = 1; i <= 4; i++) {
7114  if (pPlayers[i]->CanAct()) {
7115  v72[activePlayerCounter] = i;
7116  activePlayerCounter++;
7117  }
7118  }
7119  if (activePlayerCounter) {
7120  playerPtr =
7121  &pParty
7122  ->pPlayers[v72[rand() % activePlayerCounter] -
7123  1]; // &stru_AA1058[3].pSounds[6972 *
7124  // *(&v72 + rand() % v74) + 40552];
7125  }
7126  }
7127  int v68;
7128  int v69;
7129  if (uActorType != OBJECT_Player ||
7130  v37->spell_id != SPELL_BOW_ARROW) {
7131  int playerMaxHp = playerPtr->GetMaxHealth();
7133  v37->spell_skill, playerMaxHp);
7134  v69 = pSpellStats->pInfos[v37->spell_id].uSchool;
7135  } else {
7136  v68 = pParty->pPlayers[uActorID].CalculateRangedDamageTo(0);
7137  v69 = 0;
7138  }
7139  playerPtr->ReceiveDamage(v68, (DAMAGE_TYPE)v69);
7140  if (uActorType == OBJECT_Player && !_A750D8_player_speech_timer) {
7143  uSpeakingCharacter = uActorID + 1;
7144  }
7145  return;
7146  } else if (uActorType == 3) { // actor
7147  Actor* actorPtr = &pActors[uActorID];
7148  if (a4 == -1) a4 = stru_50C198.which_player_to_attack(actorPtr);
7149  Player* playerPtr = &pParty->pPlayers[a4];
7150  int dmgToReceive = actorPtr->_43B3E0_CalcDamage(dmgSource);
7151  unsigned __int16 spriteType = v37->uType;
7152 
7153  if (v37->uType == 545) { // arrows
7154  // GM unarmed 1% chance to evade attack per skill point
7155  logger->Info(L"Arrpow");
7156  if (playerPtr->GetActualSkillMastery(PLAYER_SKILL_UNARMED) >= 4 &&
7157  rand() % 100 < playerPtr->GetActualSkillLevel(PLAYER_SKILL_UNARMED)) {
7158  auto str = localization->FormatString(637, playerPtr->pName); // evades damage
7160  playerPtr->PlaySound(SPEECH_6, 0);
7161  return;
7162  }
7163  } else if (spriteType == 555 || spriteType == 510 || // dragonflies firebolt
7164  spriteType == 500 || spriteType == 515 ||
7165  spriteType == 505 || spriteType == 530 || // all missile types?
7166  spriteType == 525 || spriteType == 520 ||
7167  spriteType == 535 || spriteType == 540) {
7168  if (!actorPtr->ActorHitOrMiss(playerPtr)) return;
7169  if (playerPtr->pPlayerBuffs[PLAYER_BUFF_SHIELD].Active())
7170  dmgToReceive >>= 1;
7171  if (playerPtr->HasEnchantedItemEquipped(36)) dmgToReceive >>= 1;
7172  if (playerPtr->HasEnchantedItemEquipped(69)) dmgToReceive >>= 1;
7173  if (playerPtr->HasItemEquipped(EQUIP_ARMOUR) &&
7174  playerPtr->GetArmorItem()->uItemID ==
7176  dmgToReceive >>= 1;
7177  if (playerPtr->HasItemEquipped(EQUIP_TWO_HANDED)) {
7178  ItemGen* mainHandItem = playerPtr->GetMainHandItem();
7179  if (mainHandItem->uItemID == ITEM_RELIC_KELEBRIM ||
7180  mainHandItem->uItemID == ITEM_ARTIFACT_ELFBANE ||
7181  (mainHandItem->GetItemEquipType() == EQUIP_SHIELD &&
7182  playerPtr->GetActualSkillMastery(
7183  PLAYER_SKILL_SHIELD) == 4))
7184  dmgToReceive >>= 1;
7185  }
7186  if (playerPtr->HasItemEquipped(EQUIP_SINGLE_HANDED)) {
7187  ItemGen* offHandItem = playerPtr->GetOffHandItem();
7188  if (offHandItem->uItemID == ITEM_RELIC_KELEBRIM ||
7189  offHandItem->uItemID == ITEM_ARTIFACT_ELFBANE ||
7190  (offHandItem->GetItemEquipType() == EQUIP_SHIELD &&
7191  playerPtr->GetActualSkillMastery(
7192  PLAYER_SKILL_SHIELD) == 4))
7193  dmgToReceive >>= 1;
7194  }
7195  }
7196  if (actorPtr->pActorBuffs[ACTOR_BUFF_SHRINK].Active()) {
7197  int spellPower =
7199  if (spellPower > 0) dmgToReceive /= spellPower;
7200  }
7201  int damageType;
7202  switch (dmgSource) {
7203  case 0:
7204  damageType = actorPtr->pMonsterInfo.uAttack1Type;
7205  break;
7206  case 1:
7207  damageType = actorPtr->pMonsterInfo.uAttack2Type;
7208  break;
7209  case 2:
7210  spellId = actorPtr->pMonsterInfo.uSpell1ID;
7211  damageType = pSpellStats->pInfos[spellId].uSchool;
7212  break;
7213  case 3:
7214  spellId = actorPtr->pMonsterInfo.uSpell2ID;
7215  damageType = pSpellStats->pInfos[spellId].uSchool;
7216  break;
7217  case 4:
7218  damageType =
7220  break;
7221  case 5:
7222  damageType = 4;
7223  break;
7224  }
7225  // if (!engine->config->NoDamage()) {
7226  int reflectedDmg = playerPtr->ReceiveDamage(
7227  dmgToReceive, (DAMAGE_TYPE)damageType);
7229  .Active()) {
7230  unsigned __int16 actorState = actorPtr->uAIState;
7231  if (actorState != Dying && actorState != Dead) {
7232  recvdMagicDmg = actorPtr->CalcMagicalDamageToActor(
7233  (DAMAGE_TYPE)damageType, reflectedDmg);
7234  actorPtr->sCurrentHP -= recvdMagicDmg;
7235  if (recvdMagicDmg >= 0) {
7236  if (actorPtr->sCurrentHP >= 1) {
7237  Actor::AI_Stun(uActorID, PID(OBJECT_Player, a4),
7238  0);
7239  Actor::AggroSurroundingPeasants(uActorID, 1);
7240  } else {
7241  if (pMonsterStats->pInfos[actorPtr->pMonsterInfo.uID].bQuestMonster & 1 &&
7242  !engine->config->NoBloodsplats()) {
7243  int splatRadius = _4D864C_force_sw_render_rules && !engine->config->NoHugeBloodsplats()
7244  ? 10 * actorPtr->uActorRadius
7245  : actorPtr->uActorRadius;
7247  actorPtr->vPosition.x,
7248  actorPtr->vPosition.y,
7249  actorPtr->vPosition.z, 1.0, 0.0, 0.0,
7250  (float)splatRadius, 0, 0);
7251  }
7252  Actor::Die(uActorID);
7254  Actor::AggroSurroundingPeasants(uActorID, 1);
7255  if (actorPtr->pMonsterInfo.uExp)
7258  ->pInfos[actorPtr->pMonsterInfo.uID]
7259  .uExp);
7260  int speechToPlay = SPEECH_51;
7261  if (rand() % 100 < 20)
7262  speechToPlay =
7263  actorPtr->pMonsterInfo.uHP >= 100 ? 2
7264  : 1;
7265  playerPtr->PlaySound((PlayerSpeech)speechToPlay,
7266  0);
7267  }
7268  }
7269  }
7270  }
7271  //}
7272  if (!dmgSource &&
7273  !engine->config->NoDamage() &&
7274  actorPtr->pMonsterInfo.uSpecialAttackType &&
7275  rand() % 100 < actorPtr->pMonsterInfo.uLevel *
7276  actorPtr->pMonsterInfo.uSpecialAttackLevel) {
7277  playerPtr->ReceiveSpecialAttackEffect(
7278  actorPtr->pMonsterInfo.uSpecialAttackType, actorPtr);
7279  }
7280  if (!pParty->bTurnBasedModeOn) {
7281  int actEnd = playerPtr->GetActualEndurance();
7282  int recTime =
7283  (int)((20 - playerPtr->GetParameterBonus(actEnd)) *
7284  flt_6BE3A4_debug_recmod1 * 2.133333333333333);
7285  playerPtr->SetRecoveryTime(recTime);
7286  }
7287  return;
7288  } else {
7289  return;
7290  }
7291  }
7292 }

Перекрестные ссылки _43AFE3_calc_spell_damage(), Actor::_43B3E0_CalcDamage(), _4D864C_force_sw_render_rules, __debugbreak(), _A750D8_player_speech_timer, SpellBuff::Active(), ACTOR_BUFF_SHRINK, Actor::ActorHitOrMiss(), DecalBuilder::AddBloodsplat(), Actor::AggroSurroundingPeasants(), Actor::AI_Stun(), Actor::ApplyFineForKillingPeasant(), MonsterInfo::bQuestMonster, ViewingParams::bRedrawGameUI, Party::bTurnBasedModeOn, Actor::CalcMagicalDamageToActor(), Dead, decal_builder, Actor::Die(), Dying, engine, EQUIP_ARMOUR, EQUIP_SHIELD, EQUIP_SINGLE_HANDED, EQUIP_TWO_HANDED, MonsterInfo::field_3C_some_special_attack, flt_6BE3A4_debug_recmod1, Localization::FormatString(), GameUI_StatusBar_OnEvent(), Player::GetActualEndurance(), Player::GetActualSkillLevel(), Player::GetActualSkillMastery(), Player::GetArmorItem(), ItemGen::GetItemEquipType(), Player::GetMainHandItem(), Player::GetMaxHealth(), Player::GetOffHandItem(), Player::GetParameterBonus(), ItemGen::GetPlayerSkillType(), Party::GivePartyExp(), Player::HasEnchantedItemEquipped(), Player::HasItemEquipped(), Log::Info(), ItemGen::IsBroken(), ITEM_ARTIFACT_ELFBANE, ITEM_ARTIFACT_GOVERNORS_ARMOR, ITEM_RELIC_KELEBRIM, localization, logger, OBJECT_Player, Actor::pActorBuffs, pActors, pAudioPlayer, SpellStats::pInfos, MonsterStats::pInfos, PLAYER_BUFF_PAIN_REFLECTION, PLAYER_BUFF_SHIELD, PLAYER_SKILL_CHAIN, PLAYER_SKILL_PLATE, PLAYER_SKILL_SHIELD, PLAYER_SKILL_UNARMED, PlayerSpeechID, AudioPlayer::PlaySound(), Player::PlaySound(), Actor::pMonsterInfo, pMonsterStats, Player::pName, pParty, Player::pPlayerBuffs, pPlayers, Party::pPlayers, pSpellStats, pSpriteObjects, Player::ReceiveDamage(), Player::ReceiveSpecialAttackEffect(), Actor::sCurrentHP, Player::SetRecoveryTime(), Player::sHealth, SPEECH_44, SPEECH_48, SPEECH_51, SPEECH_6, SPELL_BOW_ARROW, SpriteObject::spell_caster_pid, SpriteObject::spell_id, SpriteObject::spell_level, SpriteObject::spell_skill, stru_50C198, Actor::uActorRadius, Actor::uAIState, MonsterInfo::uAttack1Type, MonsterInfo::uAttack2Type, MonsterInfo::uExp, MonsterInfo::uHP, MonsterInfo::uID, ItemGen::uItemID, MonsterInfo::uLevel, SpellBuff::uPower, SpellInfo::uSchool, uSpeakingCharacter, MonsterInfo::uSpecialAttackLevel, MonsterInfo::uSpecialAttackType, MonsterInfo::uSpell1ID, MonsterInfo::uSpell2ID, SpriteObject::uType, viewparams, Actor::vPosition и stru319::which_player_to_attack().

Используется в area_of_effect__damage_evaluate() и sub_43A97E().

+ Граф вызовов:
+ Граф вызова функции:

◆ SkillToMastery()

unsigned int SkillToMastery ( unsigned int  skill_value)

См. определение в файле Player.cpp строка 7854

7854  {
7855  // attempt to depreciate ?
7856  // use GetActualSkillMastery instead
7857 
7858  switch (skill_value & 0x1C0) {
7859  case 0x100:
7860  return 4; // Grandmaster
7861  case 0x80:
7862  return 3; // Master
7863  case 0x40:
7864  return 2; // Expert
7865  case 0x00:
7866  return 1; // Normal
7867  }
7868 
7869  assert(false); // should not get here
7870  return 0;
7871 }

Используется в _42777D_CastSpell_UseWand_ShootArrow(), Actor::_43B3E0_CalcDamage(), _4B254D_SkillMasteryTeacher(), Actor::AI_SpellAttack(), Actor::DamageMonsterFromParty(), DrawSpellDescriptionPopup(), Player::GetArmorRecoveryMultiplierFromSkillLevel(), Player::GetAttackRecoveryTime() и Player::UseItem_DrinkPotion_etc().

+ Граф вызова функции:

Переменные

◆ mouse

◆ decal_builder

DecalBuilder* decal_builder = EngineIoc::ResolveDecalBuilder()
static

См. определение в файле Player.cpp строка 43

Используется в DamagePlayerFromMonster().

◆ spell_fx_renderer

◆ pPlayers

NZIArray<struct Player*, 5> pPlayers

См. определение в файле Player.cpp строка 46

Используется в stru262_TurnBased::_406457(), Actor::_427102_IsOkToCastSpell(), CastSpellInfoHelpers::_427E01_cast_spell(), _494035_timed_effects__water_walking_damage__etc(), _4B254D_SkillMasteryTeacher(), Actor::AI_SpellAttack(), AlchemyMagicShopWares(), Actor::ApplyFineForKillingPeasant(), ArmorShopWares(), BankDialog(), BLV_ProcessPartyActions(), CharacterUI_DrawPaperdoll(), CharacterUI_LoadPaperdollTextures(), CharacterUI_StatsTab_ShowHint(), ClickNPCTopic(), ContractSelectText(), Player::CreateItemInInventory(), CycleCharacter(), DamagePlayerFromMonster(), DrawSpellDescriptionPopup(), stru262_TurnBased::End(), EnterHouse(), Player::EquipBody(), Application::Game::EventLoop(), EventProcessor(), SpriteObject::ExplosionTraps(), FillAwardsData(), Application::Game::GameLoop(), GameUI_DrawItemInfo(), GameUI_DrawPortraits(), GameUI_InitializeDialogue(), GameUI_OnPlayerPortraitLeftClick(), GameUI_WritePointedObjectStatusString(), GetHouseGoodbyeSpeech(), ItemGen::GetIdentifiedName(), Player::GetPlayerIndex(), OutdoorLocation::GetTravelDestination(), Chest::GrabItem(), GuildDialog(), GUIWindow_Transition::GUIWindow_Transition(), GUIWindow::HouseDialogManager(), HouseUI_CheckIfPlayerCanInteract(), Inventory_ItemPopupAndAlchemy(), LoadSpellbook(), MonsterPopup_Draw(), ODM_ProcessPartyActions(), Engine::OnGameViewportClick(), WinApiWindow::OnOSMenu(), OnPaperdollLeftClick(), OnSelectNPCDialogueOption(), OnSelectShopDialogueOption(), Chest::Open(), GUIWindow_Spellbook::OpenSpellbook(), GUIWindow_Spellbook::OpenSpellbookPage(), PrepareToLoadBLV(), Keyboard::ProcessInputActions(), Chest::PutItemInChest(), Player::ReceiveSpecialAttackEffect(), Rest(), Player::SetCondition(), Player::SetRecoveryTime(), ShopDialogDisplayEquip(), ShopDialogIdentify(), ShopDialogLearn(), ShopDialogRepair(), ShopDialogSellEquip(), ShouldLoadTexturesForRaceAndGender(), ShowPopupShopItem(), stru262_TurnBased::Start(), stru262_TurnBased::StartTurn(), sub_4B1447_party_fine(), sub_4B6478(), TavernDialog(), TempleDialog(), TownHallDialog(), TrainingDialog(), TravelByTransport(), Mouse::UI_OnMouseLeftClick(), UI_OnMouseRightClick(), UIShop_Buy_Identify_Repair(), GUIWindow_Spellbook::Update(), GUIWindow_CharacterRecord::Update(), GUIWindow_Rest::Update(), GUIWindow_Chest::Update(), GUIWindow_Inventory_CastSpell::Update(), Actor::UpdateActorAI(), WeaponShopWares(), WetsuitOff(), WetsuitOn() и stru319::which_player_to_attack().

◆ PlayerSpeechID

enum PlayerSpeech PlayerSpeechID

См. определение в файле Player.cpp строка 48

Используется в DamagePlayerFromMonster(), GameUI_DrawPortraits(), GetHouseGoodbyeSpeech(), Chest::Open() и PrepareToLoadBLV().

◆ StatTable

◆ StealingMasteryBonuses

std::array<int, 5> StealingMasteryBonuses
Инициализатор
= {
0, 100, 200, 300,
500}

См. определение в файле Player.cpp строка 96

Используется в Player::StealFromActor() и Player::StealFromShop().

◆ StealingRandomBonuses

std::array<int, 5> StealingRandomBonuses
Инициализатор
= {-200, -100, 0, 100,
200}

См. определение в файле Player.cpp строка 100

Используется в Player::StealFromActor() и Player::StealFromShop().

◆ StealingEnchantmentBonusForSkill

std::array<int, 5> StealingEnchantmentBonusForSkill
Инициализатор
= {
0, 2, 4, 6,
10}

См. определение в файле Player.cpp строка 102

Используется в Player::StealFromActor().

◆ pSkillAvailabilityPerClass

unsigned char pSkillAvailabilityPerClass[9][37]
Инициализатор
= {
{0, 2, 0, 1, 1, 1, 1, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 2, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 2, 1, 0},
{1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 2, 1, 1, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 1, 1, 2, 0, 0, 0, 1, 0, 0, 1, 2, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1},
{0, 1, 1, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2,
0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
{0, 0, 2, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 2, 1, 0, 1,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
{2, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 1, 1, 0, 0, 0,
0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0}
}

См. определение в файле Player.cpp строка 111

Используется в Player::GetSkillIdxByOrder() и Player::Reset().

◆ pEquipTypeToBodyAnchor

unsigned char pEquipTypeToBodyAnchor[21]
Инициализатор
= {
1,
1,
2,
3,
0,
4,
5,
6,
7,
8,
10,
9,
1,
0,
0,
0,
0,
0,
0,
0,
0
}

См. определение в файле Player.cpp строка 136

Используется в Player::EquipBody() и Player::WearItem().

◆ pBaseHealthByClass

unsigned char pBaseHealthByClass[12]
Инициализатор
= {40, 35, 35, 30, 30, 30,
25, 20, 20, 0, 0, 0}

См. определение в файле Player.cpp строка 160

Используется в Player::GetMaxHealth().

◆ pBaseManaByClass

unsigned char pBaseManaByClass[12] = {0, 0, 0, 5, 5, 0, 10, 10, 15, 0, 0, 0}

См. определение в файле Player.cpp строка 162

Используется в Player::GetMaxMana().

◆ pBaseHealthPerLevelByClass

unsigned char pBaseHealthPerLevelByClass[36]
Инициализатор
= {
5, 7, 9, 9, 4, 6, 8, 8, 5, 6, 8, 8, 4, 5, 6, 6, 3, 4,
6, 6, 4, 5, 6, 6, 2, 3, 4, 4, 2, 3, 4, 4, 2, 3, 3, 3}

См. определение в файле Player.cpp строка 163

Используется в Player::GetMaxHealth() и Player::GetSkillBonus().

◆ pBaseManaPerLevelByClass

unsigned char pBaseManaPerLevelByClass[36]
Инициализатор
= {
0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 2, 3, 3, 1, 2,
3, 3, 0, 2, 3, 3, 3, 4, 5, 5, 3, 4, 5, 5, 3, 4, 6, 6}

См. определение в файле Player.cpp строка 166

Используется в Player::GetMaxMana() и Player::GetSkillBonus().

◆ pConditionAttributeModifier

unsigned char pConditionAttributeModifier[7][19]
Инициализатор
= {
{100, 100, 100, 120, 50, 200, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100,
100, 100, 100},
{100, 100, 100, 50, 25, 10, 100, 100, 75, 60, 50, 30, 100, 100, 100, 100,
100, 1, 100},
{100, 100, 100, 50, 25, 10, 100, 100, 75, 60, 50, 30, 100, 100, 100, 100,
100, 1, 100},
{100, 100, 100, 100, 50, 150, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100,
100, 100, 100},
{100, 100, 100, 50, 10, 100, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100,
100, 50, 100},
{100, 100, 100, 120, 20, 120, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100,
100, 50, 100},
{100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100}}

См. определение в файле Player.cpp строка 170

Используется в Player::GetActualAttribute().

◆ pAgingAttributeModifier

unsigned char pAgingAttributeModifier[7][4]
Инициализатор
= {
{100, 75, 40, 10},
{100, 150, 100, 10},
{100, 150, 100, 10},
{100, 75, 40, 10},
{100, 100, 40, 10},
{100, 100, 40, 10},
{100, 100, 100, 100}}

См. определение в файле Player.cpp строка 186

Используется в Player::GetActualAttribute().

◆ pAgeingTable

unsigned int pAgeingTable[4] = {50, 100, 150, 0xFFFF}

См. определение в файле Player.cpp строка 195

Используется в Player::GetActualAttribute().

◆ pConditionImportancyTable

std::array<unsigned int, 18> pConditionImportancyTable
Инициализатор
= {
{16, 15, 14, 17, 13, 2, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0}}

См. определение в файле Player.cpp строка 197

Используется в CharacterUI_StatsTab_ShowHint() и Player::GetMajorConditionIdx().

◆ param_to_bonus_table

short param_to_bonus_table[29]
Инициализатор
= {
500, 400, 350, 300, 275, 250, 225, 200, 175, 150, 125, 100, 75, 50, 40,
35, 30, 25, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 0}

См. определение в файле Player.cpp строка 200

Используется в Player::GetParameterBonus().

◆ parameter_to_bonus_value

signed int parameter_to_bonus_value[29]
Инициализатор
= {
30, 25, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8,
7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6}

См. определение в файле Player.cpp строка 203

Используется в Player::GetParameterBonus().

◆ base_recovery_times_per_weapon_type

unsigned short base_recovery_times_per_weapon_type[12]
Инициализатор
= {
100,
90,
60,
100,
80,
100,
80,
30,
10,
10,
20,
30
}

См. определение в файле Player.cpp строка 207

Используется в Player::GetAttackRecoveryTime().

SpriteObject
Definition: SpriteObject.h:189
Player::ReceiveSpecialAttackEffect
int ReceiveSpecialAttackEffect(int attType, struct Actor *pActor)
Definition: Player.cpp:1851
Player::SetRecoveryTime
void SetRecoveryTime(signed int sRecoveryTime)
Definition: Player.cpp:2593
Player
Definition: Player.h:401
Actor::vPosition
struct Vec3_short_ vPosition
Definition: Actor.h:298
Actor::AI_Stun
static void AI_Stun(unsigned int uActorID, signed int edx0, int arg0)
Definition: Actor.cpp:1815
PLAYER_BUFF_PAIN_REFLECTION
@ PLAYER_BUFF_PAIN_REFLECTION
Definition: Player.h:24
uSpeakingCharacter
int uSpeakingCharacter
Definition: mm7_data.cpp:764
Dying
@ Dying
Definition: Actor.h:79
Player::GetActualSkillMastery
int GetActualSkillMastery(PLAYER_SKILL_TYPE uSkillType)
Definition: Player.cpp:3179
pSpriteObjects
std::array< SpriteObject, MAX_SPRITE_OBJECTS > pSpriteObjects
Definition: SpriteObject.cpp:34
pMonsterStats
struct MonsterStats * pMonsterStats
Definition: Monsters.cpp:8
ItemGen::GetItemEquipType
ITEM_EQUIP_TYPE GetItemEquipType()
Definition: Items.cpp:1504
PLAYER_BUFF_SHIELD
@ PLAYER_BUFF_SHIELD
Definition: Player.h:27
Player::ReceiveDamage
int ReceiveDamage(signed int amount, DAMAGE_TYPE dmg_type)
Definition: Player.cpp:1816
SpellStats::pInfos
SpellInfo pInfos[100]
Definition: Spells.h:192
DecalBuilder::AddBloodsplat
void AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9)
Definition: DecalBuilder.cpp:50
PlayerSpeechID
enum PlayerSpeech PlayerSpeechID
Definition: Player.cpp:48
SpellInfo::uSchool
SPELL_SCHOOL uSchool
Definition: Spells.h:183
EQUIP_SHIELD
@ EQUIP_SHIELD
Definition: Items.h:231
Actor
Definition: Actor.h:151
AudioPlayer::PlaySound
void PlaySound(SoundID eSoundID, int pid, unsigned int uNumRepeats, int x, int y, int a7)
Definition: AudioPlayer.cpp:195
PlayerCreation_AttributeProps::uBaseStep
unsigned char uBaseStep
Definition: Player.cpp:55
MonsterInfo::uSpell1ID
uint8_t uSpell1ID
Definition: Monsters.h:147
engine
std::shared_ptr< Engine > engine
Definition: Engine.cpp:130
CHARACTER_RACE_DWARF
@ CHARACTER_RACE_DWARF
Definition: Player.h:164
localization
Localization * localization
Definition: Localization.cpp:11
MonsterInfo::field_3C_some_special_attack
int16_t field_3C_some_special_attack
Definition: Monsters.h:173
Actor::CalcMagicalDamageToActor
int CalcMagicalDamageToActor(DAMAGE_TYPE dmgType, int incomingDmg)
Definition: Actor.cpp:4314
Party::pPlayers
std::array< Player, 4 > pPlayers
Definition: Party.h:310
SpriteObject::uType
SPRITE_OBJECT_TYPE uType
Definition: SpriteObject.h:215
Actor::ActorHitOrMiss
bool ActorHitOrMiss(Player *pPlayer)
Definition: Actor.cpp:4293
SEX_FEMALE
@ SEX_FEMALE
Definition: Player.h:399
SEX_MALE
@ SEX_MALE
Definition: Player.h:399
Actor::Die
static void Die(unsigned int uActorID)
Definition: Actor.cpp:1906
SPEECH_51
@ SPEECH_51
Definition: Player.h:97
SPEECH_48
@ SPEECH_48
Definition: Player.h:94
pPlayers
NZIArray< struct Player *, 5 > pPlayers
Definition: Player.cpp:46
Player::GetActualEndurance
int GetActualEndurance()
Definition: Player.cpp:1099
PLAYER_SKILL_UNARMED
@ PLAYER_SKILL_UNARMED
Definition: Player.h:202
Dead
@ Dead
Definition: Actor.h:80
ACTOR_BUFF_SHRINK
@ ACTOR_BUFF_SHRINK
Definition: Actor.h:41
Player::GetMainHandItem
ItemGen * GetMainHandItem()
Definition: Player.cpp:7542
Actor::uAIState
AIState uAIState
Definition: Actor.h:307
Actor::ApplyFineForKillingPeasant
static void ApplyFineForKillingPeasant(unsigned int uActorID)
Definition: Actor.cpp:1223
stru319::which_player_to_attack
int which_player_to_attack(struct Actor *pActor)
Definition: Actor.cpp:3754
CHARACTER_RACE_HUMAN
@ CHARACTER_RACE_HUMAN
Definition: Player.h:161
DAMAGE_TYPE
DAMAGE_TYPE
Definition: Items.h:10
pParty
Party * pParty
Definition: Party.cpp:30
EQUIP_ARMOUR
@ EQUIP_ARMOUR
Definition: Items.h:230
EQUIP_SINGLE_HANDED
@ EQUIP_SINGLE_HANDED
Definition: Items.h:227
Log::Info
void Info(const wchar_t *pFormat,...)
Definition: Log.cpp:11
viewparams
struct ViewingParams * viewparams
Definition: mm7_data.cpp:22
MonsterInfo::uID
uint16_t uID
Definition: Monsters.h:169
ItemGen::uItemID
int uItemID
Definition: Items.h:326
MonsterInfo::uExp
unsigned int uExp
Definition: Monsters.h:177
SPEECH_44
@ SPEECH_44
Definition: Player.h:90
ItemGen::GetPlayerSkillType
unsigned char GetPlayerSkillType()
Definition: Items.cpp:1512
SpriteObject::spell_id
int spell_id
Definition: SpriteObject.h:228
MonsterInfo::bQuestMonster
uint16_t bQuestMonster
Definition: Monsters.h:170
pActors
std::array< Actor, 500 > pActors
Definition: Actor.cpp:38
Actor::uActorRadius
uint16_t uActorRadius
Definition: Actor.h:295
Player::pName
char pName[16]
Definition: Player.h:637
MonsterStats::pInfos
MonsterInfo pInfos[265]
Definition: Monsters.h:194
stru_50C198
stru319 stru_50C198
Definition: Actor.cpp:41
MonsterInfo::uSpecialAttackType
SPECIAL_ATTACK_TYPE uSpecialAttackType
Definition: Monsters.h:133
MonsterInfo::uSpecialAttackLevel
uint8_t uSpecialAttackLevel
Definition: Monsters.h:134
Player::GetMaxHealth
int GetMaxHealth()
Definition: Player.cpp:2354
CHARACTER_RACE
CHARACTER_RACE
Definition: Player.h:160
Player::GetParameterBonus
int GetParameterBonus(int player_parameter)
Definition: Player.cpp:2623
PlayerCreation_AttributeProps::uBaseValue
unsigned char uBaseValue
Definition: Player.cpp:52
ITEM_RELIC_KELEBRIM
@ ITEM_RELIC_KELEBRIM
Definition: Items.h:173
SPEECH_6
@ SPEECH_6
Definition: Player.h:52
PLAYER_SKILL_SHIELD
@ PLAYER_SKILL_SHIELD
Definition: Player.h:179
pSpellStats
struct SpellStats * pSpellStats
Definition: Spells.cpp:32
ItemGen::IsBroken
bool IsBroken()
Definition: Items.h:304
Party::GivePartyExp
void GivePartyExp(unsigned int pEXPNum)
Definition: Party.cpp:938
EQUIP_TWO_HANDED
@ EQUIP_TWO_HANDED
Definition: Items.h:228
OBJECT_Player
@ OBJECT_Player
Definition: Actor.h:68
Party::bTurnBasedModeOn
bool bTurnBasedModeOn
Definition: Party.h:305
_4D864C_force_sw_render_rules
char _4D864C_force_sw_render_rules
Definition: mm7_data.cpp:208
PLAYER_SKILL_CHAIN
@ PLAYER_SKILL_CHAIN
Definition: Player.h:181
PLAYER_SEX
PLAYER_SEX
Definition: Player.h:399
Player::GetOffHandItem
ItemGen * GetOffHandItem()
Definition: Player.cpp:7540
decal_builder
static DecalBuilder * decal_builder
Definition: Player.cpp:43
SpriteObject::spell_level
int spell_level
Definition: SpriteObject.h:229
Actor::sCurrentHP
int16_t sCurrentHP
Definition: Actor.h:290
Actor::AggroSurroundingPeasants
static void AggroSurroundingPeasants(unsigned int uActorID, int a2)
Definition: Actor.cpp:717
MonsterInfo::uHP
unsigned int uHP
Definition: Monsters.h:175
Player::HasEnchantedItemEquipped
bool HasEnchantedItemEquipped(int uEnchantment)
Definition: Player.cpp:1592
CHARACTER_RACE_GOBLIN
@ CHARACTER_RACE_GOBLIN
Definition: Player.h:163
SpellBuff::Active
bool Active() const
Definition: Spells.h:162
flt_6BE3A4_debug_recmod1
float flt_6BE3A4_debug_recmod1
Definition: mm7_data.cpp:716
uint
unsigned int uint
Definition: MM7.h:4
MonsterInfo::uSpell2ID
uint8_t uSpell2ID
Definition: Monsters.h:149
uActiveCharacter
unsigned int uActiveCharacter
Definition: mm7_data.cpp:555
Localization::FormatString
String FormatString(unsigned int index,...) const
Definition: Localization.cpp:17
__debugbreak
void __cdecl __debugbreak(void)
Actor::_43B3E0_CalcDamage
int _43B3E0_CalcDamage(signed int dmgSource)
Definition: Actor.cpp:1314
SpellBuff::uPower
unsigned __int16 uPower
Definition: Spells.h:166
GameUI_StatusBar_OnEvent
void GameUI_StatusBar_OnEvent(const String &str, unsigned int num_seconds)
Definition: UIStatusBar.cpp:33
Player::sHealth
int sHealth
Definition: Player.h:766
Player::PlaySound
void PlaySound(PlayerSpeech speech, int a3)
Definition: Player.cpp:7874
SpriteObject::spell_skill
int spell_skill
Definition: SpriteObject.h:230
SPELL_BOW_ARROW
@ SPELL_BOW_ARROW
Definition: Spells.h:121
ViewingParams::bRedrawGameUI
int bRedrawGameUI
Definition: Viewport.h:74
SoundID
SoundID
Definition: AudioPlayer.h:10
Player::GetArmorItem
ItemGen * GetArmorItem()
Definition: Player.cpp:7548
ITEM_ARTIFACT_ELFBANE
@ ITEM_ARTIFACT_ELFBANE
Definition: Items.h:184
CHARACTER_RACE_ELF
@ CHARACTER_RACE_ELF
Definition: Player.h:162
pAudioPlayer
AudioPlayer * pAudioPlayer
Definition: AudioPlayer.cpp:20
Player::GetActualSkillLevel
int GetActualSkillLevel(PLAYER_SKILL_TYPE uSkillType)
Definition: Player.cpp:3017
MonsterInfo::uAttack1Type
uint8_t uAttack1Type
Definition: Monsters.h:135
Player::HasItemEquipped
bool HasItemEquipped(ITEM_EQUIP_TYPE uEquipIndex)
Definition: Player.cpp:1583
ItemGen
Definition: Items.h:263
logger
Log * logger
Definition: IocContainer.cpp:47
PlayerSpeech
PlayerSpeech
Definition: Player.h:46
PlayerCreation_AttributeProps::uDroppedStep
unsigned char uDroppedStep
Definition: Player.cpp:54
_A750D8_player_speech_timer
int64_t _A750D8_player_speech_timer
Definition: mm7_data.cpp:763
Actor::pMonsterInfo
struct MonsterInfo pMonsterInfo
Definition: Actor.h:292
MonsterInfo::uAttack2Type
uint8_t uAttack2Type
Definition: Monsters.h:141
ITEM_ARTIFACT_GOVERNORS_ARMOR
@ ITEM_ARTIFACT_GOVERNORS_ARMOR
Definition: Items.h:157
Player::pPlayerBuffs
std::array< SpellBuff, 24 > pPlayerBuffs
Definition: Player.h:756
MonsterInfo::uLevel
uint8_t uLevel
Definition: Monsters.h:122
SpriteObject::spell_caster_pid
int spell_caster_pid
Definition: SpriteObject.h:232
StatTable
PlayerCreation_AttributeProps StatTable[4][7]
Definition: Player.cpp:59
_43AFE3_calc_spell_damage
int _43AFE3_calc_spell_damage(int spellId, int spellLevel, signed int skillMastery, int currentHp)
Definition: Spells.cpp:745
PLAYER_SKILL_PLATE
@ PLAYER_SKILL_PLATE
Definition: Player.h:182
Actor::pActorBuffs
struct SpellBuff pActorBuffs[22]
Definition: Actor.h:315