# HG changeset patch # User Ritor1 # Date 1380043137 -21600 # Node ID c70d526669ec584cbb70bf953289d79c89823b44 # Parent 69efd5d1ab5cacfdf6a76b3fc4db7eb7238707ed# Parent 0f6cd60ca987725703150ad264ec070ce1ac4a77 Merge diff -r 69efd5d1ab5c -r c70d526669ec Actor.cpp --- a/Actor.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Actor.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -5020,7 +5020,7 @@ v59 = 1; if ( player->HasItemEquipped(EQUIP_MAIN_HAND) ) { - auto main_hand_skill = pItemsTable->pItems[player->pInventoryItemList[main_hand_idx - 1].uItemID].uSkillType; + auto main_hand_skill = player->pInventoryItemList[main_hand_idx - 1].GetPlayerSkillType(); //v55 = pItemsTable->pItems[player->pInventoryItems[main_hand_idx - 1].uItemID].uSkillType; //v28 = SkillToMastery(player->pActiveSkills[v55]); auto main_hand_mastery = SkillToMastery(player->pActiveSkills[main_hand_skill]); diff -r 69efd5d1ab5c -r c70d526669ec Actor.h --- a/Actor.h Tue Sep 24 23:18:38 2013 +0600 +++ b/Actor.h Tue Sep 24 23:18:57 2013 +0600 @@ -39,10 +39,26 @@ /* 361 */ enum ACTOR_BUFF_INDEX { - ACTOR_BUFF_CHARM = 1, // an assumption - ACTOR_BUFF_SHRINK = 3, // an assumption + ACTOR_BUFF_CHARM = 1, + ACTOR_BUFF_SUMMONED = 2, + ACTOR_BUFF_SHRINK = 3, + ACTOR_BUFF_AFRAID = 4, ACTOR_BUFF_STONED = 5, - ACTOR_BUFF_PARALYZED = 6 + ACTOR_BUFF_PARALYZED = 6, + + ACTOR_BUFF_BERSERK = 8, + + ACTOR_BUFF_FATE = 10, + ACTOR_BUFF_ENSLAVED = 11, + ACTOR_BUFF_DAY_OF_PROTECTION = 12, + ACTOR_BUFF_HOUR_OF_POWER = 13, + ACTOR_BUFF_SHIELD = 14, + ACTOR_BUFF_STONESKIN = 15, + ACTOR_BUFF_BLESS = 16, + ACTOR_BUFF_HEROISM = 17, + ACTOR_BUFF_HASTE = 18, + ACTOR_BUFF_PAIN_REFLECTION = 19, + ACTOR_BUFF_PAIN_HAMMERHANDS = 20, }; diff -r 69efd5d1ab5c -r c70d526669ec CastSpellInfo.cpp --- a/CastSpellInfo.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/CastSpellInfo.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -1884,7 +1884,7 @@ break; v240 = &pParty->pPlayers[pCastSpell->uPlayerID_2].pInventoryItemList[a2]; - if ( pItemsTable->pItems[v240->uItemID].uEquipType != 12 || v240->uAttributes & 2 ) + if ( v240->GetItemEquipType() != 12 || v240->uAttributes & 2 ) { _50C9D0_AfterEnchClickEventId = 113; _50C9D4_AfterEnchClickEventSecondParam = 0; @@ -1972,9 +1972,9 @@ v295 = rand() % 10;// pItemsTable->field_116D8[pItemsTable->pItems[_this->uItemID].uEquipType]; v245->uEnchantmentType = 0; __debugbreak(); // castspellinfo.cpp(1971): warning C4700: uninitialized local variable 'v294' used - for ( kk = pItemsTable->pEnchantments[0].to_item[pItemsTable->pItems[v245->uItemID].uEquipType + 1]; + for ( kk = pItemsTable->pEnchantments[0].to_item[v245->GetItemEquipType() + 1]; ; - kk += pItemsTable->pEnchantments[v294->uEnchantmentType].to_item[pItemsTable->pItems[v245->uItemID].uEquipType + 1] ) + kk += pItemsTable->pEnchantments[v294->uEnchantmentType].to_item[v245->GetItemEquipType() + 1] ) { ++v245->uEnchantmentType; if ( kk >= v295 ) @@ -2002,7 +2002,7 @@ v259 = LOBYTE(pItemsTable->pSpecialEnchantments[v258 + 1].pBonusStatement); if ( !v259 || v259 == 1 ) { - v260 = *(&pItemsTable->pSpecialEnchantments[0].to_item_apply[pItemsTable->pItems[*(int *)v245].uEquipType + v260 = *(&pItemsTable->pSpecialEnchantments[0].to_item_apply[v245->GetItemEquipType() + 4] + v258 * 28); LODWORD(v725) += v260; @@ -2021,7 +2021,7 @@ v262 = rand() % SLODWORD(v725); v263 = v679; v245->uSpecEnchantmentType = v679[0]; - v264 = pItemsTable->pSpecialEnchantments[*v263].to_item_apply[pItemsTable->pItems[*(int *)v245].uEquipType + 4]; + v264 = pItemsTable->pSpecialEnchantments[*v263].to_item_apply[v245->GetItemEquipType() + 4]; v265 = v262 + 1; if ( v264 < v265 ) { @@ -2031,7 +2031,7 @@ v732 = v267; v268 = *(int *)v267; *(int *)(v245 + 12) = v268; - v264 += pItemsTable->pSpecialEnchantments[v268].to_item_apply[pItemsTable->pItems[*(int *)v245].uEquipType + v264 += pItemsTable->pSpecialEnchantments[v268].to_item_apply[v245->GetItemEquipType() + 4]; if ( v264 >= v265 ) break; @@ -2050,7 +2050,7 @@ v279 = LOBYTE(pItemsTable->pSpecialEnchantments[v278].pBonusStatement); if ( !v279 || v279 == 1 ) { - v280 = *(&pItemsTable->pSpecialEnchantments[v278].to_item_apply[pItemsTable->pItems[v245->uItemID].uEquipType]); + v280 = *(&pItemsTable->pSpecialEnchantments[v278].to_item_apply[v245->GetItemEquipType()]); _v733 += v280; if ( v280 ) { @@ -2067,12 +2067,12 @@ v282 = rand() % _v733; v283 = v679; v245->uSpecEnchantmentType = v679[0]; - v284 = pItemsTable->pSpecialEnchantments[*v283].to_item_apply[pItemsTable->pItems[v245->uItemID].uEquipType ]; + v284 = pItemsTable->pSpecialEnchantments[*v283].to_item_apply[v245->GetItemEquipType() ]; v285 = v282 + 1; for ( l = v679; v284 < v285; ++l ) { v245->uSpecEnchantmentType = *(l+1); - v284 += pItemsTable->pSpecialEnchantments[*(l+1)].to_item_apply[pItemsTable->pItems[v245->uItemID].uEquipType]; + v284 += pItemsTable->pSpecialEnchantments[*(l+1)].to_item_apply[v245->GetItemEquipType()]; } ++v245->uSpecEnchantmentType; v245->uAttributes |= 0x20u; @@ -2676,7 +2676,7 @@ { v420 = 0; v421 = _v730->array_000234; - while ( !v421->uItemID || pItemsTable->pItems[v421->uItemID].uEquipType == 18 ) + while ( !v421->uItemID || v421->GetItemEquipType() == 18 ) { ++v420; ++v421; diff -r 69efd5d1ab5c -r c70d526669ec Chest.cpp --- a/Chest.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Chest.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -265,7 +265,7 @@ { item_texture_id = pIcons_LOD->LoadTexture( //pItemsTable->pItems[*(int *)((char *)&pOtherOverlayList->pOverlays[49].field_4 + 36 * v6 + v3 * 5324)].pIconName, - pItemsTable->pItems[pChests[uChestID].igChestItems[chest_item_index - 1].uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), TEXTURE_16BIT_PALETTE); item_texture = pIcons_LOD->GetTexture(item_texture_id); itemPixelWidth = item_texture->uTextureWidth; itemPixelHeght = item_texture->uTextureHeight; @@ -430,7 +430,7 @@ pPlayers[uActiveCharacter]->PlaySound(SPEECH_NoRoom, 0); return 0; } - v7 = pIcons_LOD->LoadTexture(pItemsTable->pItems[v4->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v7 = pIcons_LOD->LoadTexture(v4->GetIconName(), TEXTURE_16BIT_PALETTE); HIWORD(v8) = 0; v9 = pIcons_LOD->GetTexture(v7); v10 = v9->uTextureWidth; @@ -751,7 +751,7 @@ v3 = &pChests[v20].igChestItems[a1]; //v17 = pChestWidthsByType[*(short *)((char *)v2 + (int)pChests)]; v17 = pChestWidthsByType[pChests[v20].uChestBitmapID]; - v4 = pIcons_LOD->LoadTexture(pItemsTable->pItems[v3->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v4 = pIcons_LOD->LoadTexture(v3->GetIconName(), TEXTURE_16BIT_PALETTE); v5 = pIcons_LOD->GetTexture(v4); v6 = v5->uTextureWidth; if ( v6 < 14 ) @@ -833,7 +833,7 @@ else v3 = -1; v4 = pChests[chest_id].pInventoryIndices[v3] - 1; - if ( pItemsTable->pItems[pChests[chest_id].igChestItems[v4].uItemID].uEquipType == EQUIP_GOLD ) + if ( pChests[chest_id].igChestItems[v4].GetItemEquipType() == EQUIP_GOLD ) { party_finds_gold(pChests[chest_id].igChestItems[v4].uSpecEnchantmentType, 0); viewparams->bRedrawGameUI = 1; diff -r 69efd5d1ab5c -r c70d526669ec GUIWindow.cpp --- a/GUIWindow.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/GUIWindow.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -2026,7 +2026,7 @@ ItemGen2.uItemID = v26; if ( pItemsTable->pItems[v26].uEquipType == 12 ) { - ItemGen2.uNumCharges = rand() % 6 + pItemsTable->pItems[ItemGen2.uItemID].uDamageMod + 1; + ItemGen2.uNumCharges = rand() % 6 + ItemGen2.GetDamageMod() + 1; ItemGen2.uMaxCharges = LOBYTE(ItemGen2.uNumCharges); } else diff -r 69efd5d1ab5c -r c70d526669ec Indoor.cpp --- a/Indoor.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Indoor.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -5396,7 +5396,7 @@ int v_4c; // [sp+8Ch] [bp+10h]@141 int v_8; // [sp+90h] [bp+14h]@53 - __debugbreak(); + //__debugbreak(); v4 = stru_5C6E00->Atan2(v.x - x, v.y - z); v114 = 0; diff -r 69efd5d1ab5c -r c70d526669ec Items.cpp --- a/Items.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Items.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -1479,7 +1479,7 @@ const char *nameModificator; const char *format_str; - equip_type = pItemsTable->pItems[uItemID].uEquipType; + equip_type = GetItemEquipType(); if ( (equip_type == EQUIP_REAGENT) || (equip_type == EQUIP_POTION) || (equip_type == EQUIP_GOLD) ) { sprintf(item__getname_buffer.data(), "%s", pItemsTable->pItems[uItemID].pName); @@ -1699,7 +1699,7 @@ while ( tmp_chance < current_chance ); } - if (pItems[out_item->uItemID].uEquipType == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE ) + if (out_item->GetItemEquipType() == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE ) {// if it potion set potion spec out_item->uEnchantmentType = 0; for (int i=0; i<2; ++i) @@ -1742,7 +1742,7 @@ out_item->uItemID = 1; if ( !out_item->uItemID ) out_item->uItemID = 1; - if (pItems[out_item->uItemID].uEquipType == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE ) + if (out_item->GetItemEquipType() == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE ) {// if it potion set potion spec out_item->uEnchantmentType = 0; for (int i=0; i<2; ++i) @@ -1760,13 +1760,13 @@ else out_item->uAttributes = 1; - if ( pItems[out_item->uItemID].uEquipType != EQUIP_POTION ) + if ( out_item->GetItemEquipType() != EQUIP_POTION ) { out_item->uSpecEnchantmentType = 0; out_item->uEnchantmentType = 0; } //try get special enhansment - switch (pItems[out_item->uItemID].uEquipType) + switch (out_item->GetItemEquipType()) { case EQUIP_OFF_HAND: case EQUIP_MAIN_HAND : @@ -1790,15 +1790,15 @@ special_chance = rand() % 100; if ( special_chance < uBonusChanceStandart[v6]) { - v26 = rand() %pEnchantmentsSumm[pItems[out_item->uItemID].uEquipType-3]; + v26 = rand() %pEnchantmentsSumm[out_item->GetItemEquipType()-3]; out_item->uEnchantmentType = 0; - v27=pEnchantments[out_item->uEnchantmentType].to_item[pItems[out_item->uItemID].uEquipType-3]; + v27=pEnchantments[out_item->uEnchantmentType].to_item[out_item->GetItemEquipType()-3]; if (v26>v27 ) { do { ++out_item->uEnchantmentType; - v27+=pEnchantments[out_item->uEnchantmentType].to_item[pItems[out_item->uItemID].uEquipType-3]; + v27+=pEnchantments[out_item->uEnchantmentType].to_item[out_item->GetItemEquipType()-3]; } while (v26>v27); } ++out_item->uEnchantmentType; @@ -1820,7 +1820,7 @@ return; break; case EQUIP_WAND: - out_item->uNumCharges = rand() % 6 + pItemsTable->pItems[out_item->uItemID].uDamageMod + 1; + out_item->uNumCharges = rand() % 6 + out_item->GetDamageMod() + 1; out_item->uMaxCharges = out_item->uNumCharges; default: return; @@ -1838,7 +1838,7 @@ case 2: if ((tr_lv==1)||(tr_lv==0)) { - spc=pSpecialEnchantments[i].to_item_apply[pItems[out_item->uItemID].uEquipType]; + spc=pSpecialEnchantments[i].to_item_apply[out_item->GetItemEquipType()]; spc_sum+=spc; if(spc) { @@ -1849,7 +1849,7 @@ case 3: if ((tr_lv==2)||(tr_lv==1)||(tr_lv==0)) { - spc=pSpecialEnchantments[i].to_item_apply[pItems[out_item->uItemID].uEquipType]; + spc=pSpecialEnchantments[i].to_item_apply[out_item->GetItemEquipType()]; spc_sum+=spc; if(spc) { @@ -1860,7 +1860,7 @@ case 4: if ((tr_lv==3)||(tr_lv==2)||(tr_lv==1)) { - spc=pSpecialEnchantments[i].to_item_apply[pItems[out_item->uItemID].uEquipType]; + spc=pSpecialEnchantments[i].to_item_apply[out_item->GetItemEquipType()]; spc_sum+=spc; if(spc) { @@ -1871,7 +1871,7 @@ case 5: if (tr_lv==3) { - spc=pSpecialEnchantments[i].to_item_apply[pItems[out_item->uItemID].uEquipType]; + spc=pSpecialEnchantments[i].to_item_apply[out_item->GetItemEquipType()]; spc_sum+=spc; if(spc) { @@ -1885,14 +1885,14 @@ v46 = rand()%spc_sum+1; j=0; out_item->uSpecEnchantmentType =val_list[j]; - v45=pSpecialEnchantments[val_list[j]].to_item_apply[pItems[out_item->uItemID].uEquipType]; + v45=pSpecialEnchantments[val_list[j]].to_item_apply[out_item->GetItemEquipType()]; if (v45uSpecEnchantmentType=val_list[j]; - v45+=pSpecialEnchantments[val_list[j]].to_item_apply[pItems[out_item->uItemID].uEquipType]; + v45+=pSpecialEnchantments[val_list[j]].to_item_apply[out_item->GetItemEquipType()]; } while (v45uSpecEnchantmentType; @@ -2398,6 +2398,35 @@ return false; } +ITEM_EQUIP_TYPE ItemGen::GetItemEquipType() +{ + return pItemsTable->pItems[this->uItemID].uEquipType; +} + +unsigned char ItemGen::GetPlayerSkillType() +{ + return pItemsTable->pItems[this->uItemID].uSkillType; +} + +char* ItemGen::GetIconName() +{ + return pItemsTable->pItems[this->uItemID].pIconName; +} + +unsigned __int8 ItemGen::GetDamageDice() +{ + return pItemsTable->pItems[this->uItemID].uDamageDice; +} + +unsigned __int8 ItemGen::GetDamageRoll() +{ + return pItemsTable->pItems[this->uItemID].uDamageRoll; +} + +unsigned __int8 ItemGen::GetDamageMod() +{ + return pItemsTable->pItems[this->uItemID].uDamageMod; +} //----- (004B8E3D) -------------------------------------------------------- void GenerateStandartShopItems() { diff -r 69efd5d1ab5c -r c70d526669ec Items.h --- a/Items.h Tue Sep 24 23:18:38 2013 +0600 +++ b/Items.h Tue Sep 24 23:18:57 2013 +0600 @@ -1,6 +1,7 @@ #pragma once #include #include +#include "NZIArray.h" enum DAMAGE_TYPE:unsigned int { @@ -29,7 +30,7 @@ ITEM_AURA_EFFECT_GREEN = 0x40,//64 ITEM_AURA_EFFECT_PURPLE = 0x80,//128 ITEM_STOLEN = 0x100, - ITEM_ENCHANTED = 0x200, + ITEM_HARDENED = 0x200, }; @@ -242,7 +243,12 @@ void Reset(); int _439DF3_get_additional_damage(int *a2, bool *vampiyr); - + ITEM_EQUIP_TYPE GetItemEquipType(); + unsigned char GetPlayerSkillType(); + char* GetIconName(); + unsigned __int8 GetDamageDice(); + unsigned __int8 GetDamageRoll(); + unsigned __int8 GetDamageMod(); int uItemID; //0 int uEnchantmentType; //4 @@ -380,7 +386,7 @@ void Release(); int uAllItemsCount; - ItemDesc pItems[800]; //4-9604h + NZIArray pItems; //4-9604h ItemEnchantment pEnchantments[24]; //9604h ItemSpecialEnchantment pSpecialEnchantments[72]; //97E4h -9FC4h char field_9FC4[5000]; diff -r 69efd5d1ab5c -r c70d526669ec Mouse.cpp --- a/Mouse.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Mouse.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -374,7 +374,7 @@ //v1 = this; if ( pParty->pPickedItem.uItemID ) { - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); pTexture = (Texture *)(pTextureID != -1 ? (int)&pIcons_LOD->pTextures[pTextureID] : 0); v4 = pMouse->uMouseClickX; diff -r 69efd5d1ab5c -r c70d526669ec NZIArray.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NZIArray.h Tue Sep 24 23:18:57 2013 +0600 @@ -0,0 +1,43 @@ +#pragma once +#include +#include + + +template +class NZIArray : std::array<_Ty, _Size> +{ +public: + reference ZerothIndex() + { + return std::array<_Ty, _Size>::operator [](0); + } + + reference operator[](size_type _Pos) + { // subscript nonmutable sequence +#if _ITERATOR_DEBUG_LEVEL == 2 + assert(_Pos != 0 && "not allowed to access zeroth element"); + +#elif _ITERATOR_DEBUG_LEVEL == 1 + _SCL_SECURE_VALIDATE_RANGE(_Pos != 0); +#endif /* _ITERATOR_DEBUG_LEVEL */ + + __analysis_assume(_Pos != 0); + + return std::array<_Ty, _Size>::operator [](_Pos); + } + + const_reference operator[](size_type _Pos) const + { // subscript nonmutable sequence +#if _ITERATOR_DEBUG_LEVEL == 2 + assert(_Pos != 0 && "not allowed to access zeroth element"); + +#elif _ITERATOR_DEBUG_LEVEL == 1 + _SCL_SECURE_VALIDATE_RANGE(_Pos != 0); +#endif /* _ITERATOR_DEBUG_LEVEL */ + + __analysis_assume(_Pos != 0); + + return std::array<_Ty, _Size>::operator [](_Pos); + } +}; diff -r 69efd5d1ab5c -r c70d526669ec Party.cpp --- a/Party.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Party.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -1422,7 +1422,7 @@ if ( !pParty->pPickedItem.uItemID ) return 1; v0 = pIcons_LOD->LoadTexture( - pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, + pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); v1 = pIcons_LOD->GetTexture(v0); v11 = areWeLoadingTexture; diff -r 69efd5d1ab5c -r c70d526669ec Player.cpp --- a/Player.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Player.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -60,9 +60,9 @@ -std::array StealingMasteryBonuses = {0, 100, 200, 300, 500}; //dword_4EDEA0 +std::array StealingMasteryBonuses = {0, 100, 200, 300, 500}; //dword_4EDEA0 //the zeroth element isn't accessed, it just helps avoid -1 indexing, originally 4 element array off by one std::array StealingRandomBonuses = {-200, -100, 0, 100, 200}; //dword_4EDEB4 -std::array StealingEnchantmentBonusForSkill = {0, 2, 4, 6, 10}; //dword_4EDEC4 +std::array StealingEnchantmentBonusForSkill = {0, 2, 4, 6, 10}; //dword_4EDEC4 //the zeroth element isn't accessed, it just helps avoid -1 indexing, originally 4 element array off by one @@ -507,15 +507,15 @@ { for ( i = 0; i < enchant_count; ++i ) { - if (!(pInventoryItemList[item_index_tabl[i]].uAttributes&ITEM_ENCHANTED)) - pInventoryItemList[item_index_tabl[rand() % avalible_items]].uAttributes |= ITEM_ENCHANTED; + if (!(pInventoryItemList[item_index_tabl[i]].uAttributes&ITEM_HARDENED)) + pInventoryItemList[item_index_tabl[rand() % avalible_items]].uAttributes |= ITEM_HARDENED; } } else { for ( i = 0; i < avalible_items; ++i ) { - pInventoryItemList[item_index_tabl[i]].uAttributes |= ITEM_ENCHANTED; + pInventoryItemList[item_index_tabl[i]].uAttributes |= ITEM_HARDENED; } } } @@ -1008,7 +1008,7 @@ unsigned int slot_width; // [sp+14h] [bp+4h]@1 item_in_slot = &this->pInventoryItemList[pInventoryMatrix[index]-1]; - item_texture = pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[item_in_slot->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + item_texture = pIcons_LOD->LoadTexturePtr(item_in_slot->GetIconName(), TEXTURE_16BIT_PALETTE); item_in_slot->Reset(); slot_width = GetSizeInInventorySlots(item_texture->uTextureWidth); slot_height = GetSizeInInventorySlots(item_texture->uTextureHeight); @@ -1041,7 +1041,7 @@ merchantLevel = GetActualSkillLevel(PLAYER_SKILL_MERCHANT); idemId = pItem->uItemID; - equipType = pItemsTable->pItems[idemId].uEquipType; + equipType = pItem->GetItemEquipType(); itemValue = pItem->GetValue(); switch (building_type) @@ -1160,10 +1160,10 @@ unsigned __int16 v2; // ax@1 int v5; // edi@7 - ItemDesc* v7 = &pItemsTable->pItems[pItem->uItemID]; - if (CheckHiredNPCSpeciality(Smith) && v7->uEquipType <= 2 || - CheckHiredNPCSpeciality(Armorer) && v7->uEquipType >= 3 && v7->uEquipType <= 9 || - CheckHiredNPCSpeciality(Alchemist) && v7->uEquipType >= 9 ) + ITEM_EQUIP_TYPE equipType = pItem->GetItemEquipType(); + if (CheckHiredNPCSpeciality(Smith) && equipType <= 2 || + CheckHiredNPCSpeciality(Armorer) && equipType >= 3 && equipType <= 9 || + CheckHiredNPCSpeciality(Alchemist) && equipType >= 9 ) return true; v2 = GetActualSkillLevel(PLAYER_SKILL_REPAIR); @@ -1172,7 +1172,7 @@ int multiplier = GetMultiplierForSkillLevel(v2, 1, 2, 3, 5); v5 = multiplier * (v2 & 0x3F); - return v5 >= v7->uItemID_Rep_St; + return v5 >= pItemsTable->pItems[pItem->uItemID].uItemID_Rep_St; } //----- (004911F3) -------------------------------------------------------- @@ -1620,8 +1620,7 @@ if ( this->HasItemEquipped(EQUIP_OFF_HAND) ) { ItemGen *offHandItemGen = (ItemGen *)&this->pInventoryItemList[this->pEquipment.uShield - 1]; - int itemId = offHandItemGen->uItemID; - if ( pItemsTable->pItems[itemId].uEquipType != EQUIP_SHIELD ) + if ( offHandItemGen->GetItemEquipType() != EQUIP_SHIELD ) { offHndWpnDmg = CalculateMeleeDmgToEnemyWithWeapon(offHandItemGen, uTargetActorID, false); } @@ -1957,13 +1956,13 @@ //----- (0048D62C) -------------------------------------------------------- ITEM_EQUIP_TYPE Player::GetEquippedItemEquipType(ITEM_EQUIP_TYPE uEquipSlot) { - return pItemsTable->pItems[pInventoryItemList[pEquipment.pIndices[uEquipSlot] - 1].uItemID].uEquipType; + return pInventoryItemList[pEquipment.pIndices[uEquipSlot] - 1].GetItemEquipType(); } //----- (0048D651) -------------------------------------------------------- PLAYER_SKILL_TYPE Player::GetEquippedItemSkillType(ITEM_EQUIP_TYPE uEquipSlot) { - return (PLAYER_SKILL_TYPE)pItemsTable->pItems[pInventoryItemList[pEquipment.pIndices[uEquipSlot] - 1].uItemID].uSkillType; + return (PLAYER_SKILL_TYPE)pInventoryItemList[pEquipment.pIndices[uEquipSlot] - 1].GetPlayerSkillType(); } //----- (0048D676) -------------------------------------------------------- @@ -1978,7 +1977,7 @@ { auto i = pEquipment.pIndices[uEquipIndex]; if (i) - return (~(pOwnItems[i - 1].uAttributes & ITEM_BROKEN)) != 0; + return !pOwnItems[i - 1].IsBroken(); else return false; } @@ -2039,7 +2038,7 @@ v7 = v6 & 0x3F; v8 = SkillToMastery(v6); itemvalue = itemToSteal->GetValue(); - v10 = pItemsTable->pItems[itemToSteal->uItemID].uEquipType; + v10 = itemToSteal->GetItemEquipType(); if ( v10 == EQUIP_OFF_HAND || v10 == EQUIP_MAIN_HAND || v10 == EQUIP_BOW ) itemvalue *= 3; currMaxItemValue = StealingRandomBonuses[rand() % 5] + v7 * StealingMasteryBonuses[v8]; @@ -2068,8 +2067,6 @@ } } } -// 4EDEA0: using guessed type int dword_4EDEA0[]; -// 4EDEB4: using guessed type int dword_4EDEB4[]; //----- (0048D88B) -------------------------------------------------------- int Player::StealFromActor(unsigned int uActorID, int _steal_perm, int reputation) @@ -2125,7 +2122,7 @@ { enchBonusSum += rand() % StealingEnchantmentBonusForSkill[stealingMastery] + 1; } - if ( pItemsTable->pItems[actroPtr->array_000234[3].uItemID].uEquipType != EQUIP_GOLD ) + if ( actroPtr->array_000234[3].GetItemEquipType() != EQUIP_GOLD ) return 2; enchTypePtr = &actroPtr->array_000234[3].uSpecEnchantmentType; if ( (int)enchBonusSum >= *enchTypePtr ) @@ -2156,7 +2153,7 @@ int i; for (i = 0; i < 4; i++) { - if ( actroPtr->array_000234[i].uItemID != 0 && pItemsTable->pItems[actroPtr->array_000234[i].uItemID].uEquipType != EQUIP_GOLD ) + if ( actroPtr->array_000234[i].uItemID != 0 && actroPtr->array_000234[i].GetItemEquipType() != EQUIP_GOLD ) break; } if (i == 4) @@ -2181,17 +2178,20 @@ itemToSteal->Reset(); carriedItemId = tempItem.uItemID; } - sub_421B2C_PlaceInInventory_or_DropPickedItem(); - sprintf( - pTmpBuf2.data(), - pGlobalTXT_LocalizationStrings[304], // Official //TODO: add a normal "%d stole %d" message - this->pName, - pItemsTable->pItems[carriedItemId].pUnidentifiedName); - ShowStatusBarString(pTmpBuf2.data(), 2u); - sub_421B2C_PlaceInInventory_or_DropPickedItem(); - memcpy(&pParty->pPickedItem, &tempItem, sizeof(ItemGen)); - pMouse->SetCursorBitmapFromItemID(carriedItemId); - return 2; + if (carriedItemId != 0) // looks odd in current context, but avoids accessing zeroth element of pItemsTable->pItems + { + sub_421B2C_PlaceInInventory_or_DropPickedItem(); + sprintf( + pTmpBuf2.data(), + pGlobalTXT_LocalizationStrings[304], // Official //TODO: add a normal "%d stole %d" message + this->pName, + pItemsTable->pItems[carriedItemId].pUnidentifiedName); + ShowStatusBarString(pTmpBuf2.data(), 2u); + sub_421B2C_PlaceInInventory_or_DropPickedItem(); + memcpy(&pParty->pPickedItem, &tempItem, sizeof(ItemGen)); + pMouse->SetCursorBitmapFromItemID(carriedItemId); + return 2; + } } } sprintfex(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[377], this->pName); //%s failed to steal anything @@ -2255,7 +2255,7 @@ armor_indx = pEquipment.uArmor; if ( armor_indx ) { - if ( !(pOwnItems[armor_indx-1].uAttributes & ITEM_ENCHANTED)) + if ( !(pOwnItems[armor_indx-1].uAttributes & ITEM_HARDENED)) { pOwnItems[armor_indx-1].SetBroken(); } @@ -2334,7 +2334,7 @@ if ( !v4 ) return 0; v48 = &this->pInventoryItemList[v46[rand() % v4]]; - v11 = 3 * (pItemsTable->pItems[v48->uItemID].uMaterial + pItemsTable->pItems[v48->uItemID].uDamageMod); + v11 = 3 * (pItemsTable->pItems[v48->uItemID].uMaterial + v48->GetDamageMod()); break; case SPECIAL_ATTACK_BREAK_ARMOR: for (int i = 0; i < 16; i++ ) @@ -2350,7 +2350,7 @@ if ( !v4 ) return 0; v48 = &this->pInventoryItemList[v46[rand() % v4]]; - v11 = 3 * (pItemsTable->pItems[v48->uItemID].uMaterial + pItemsTable->pItems[v48->uItemID].uDamageMod); + v11 = 3 * (pItemsTable->pItems[v48->uItemID].uMaterial + v48->GetDamageMod()); break; case SPECIAL_ATTACK_BREAK_WEAPON: for (int i = 0; i < 16; i++ ) @@ -2367,7 +2367,7 @@ if ( !v4 ) return 0; v48 = &this->pInventoryItemList[v46[rand() % v4]]; - v11 = 3 * (pItemsTable->pItems[v48->uItemID].uMaterial + pItemsTable->pItems[v48->uItemID].uDamageMod); + v11 = 3 * (pItemsTable->pItems[v48->uItemID].uMaterial + v48->GetDamageMod()); break; case SPECIAL_ATTACK_STEAL: for ( int i = 0; i < 126; i++ ) @@ -2507,7 +2507,7 @@ case SPECIAL_ATTACK_BREAK_ANY: case SPECIAL_ATTACK_BREAK_ARMOR: case SPECIAL_ATTACK_BREAK_WEAPON: - if ( !(v48->uAttributes & ITEM_ENCHANTED) ) + if ( !(v48->uAttributes & ITEM_HARDENED) ) { PlaySound(SPEECH_40, 0); v48->SetBroken(); @@ -2609,14 +2609,14 @@ { weapon = &pInventoryItemList[pEquipment.uShield - 1]; weapon_desc = &pItemsTable->pItems[weapon->uItemID]; - weapon_recovery = base_recovery_times_per_weapon_type[pItemsTable->pItems[weapon->uItemID].uSkillType]; + weapon_recovery = base_recovery_times_per_weapon_type[weapon->GetPlayerSkillType()]; } } uint armour_recovery = 0; if ( HasItemEquipped(EQUIP_ARMOUR) ) { - auto armour_skill_type = pItemsTable->pItems[pInventoryItemList[pEquipment.uArmor - 1].uItemID].uSkillType; + auto armour_skill_type = pInventoryItemList[pEquipment.uArmor - 1].GetPlayerSkillType(); uint base_armour_recovery = base_recovery_times_per_weapon_type[armour_skill_type]; float multiplier; @@ -2645,7 +2645,7 @@ if (HasItemEquipped(EQUIP_OFF_HAND) && GetEquippedItemEquipType(EQUIP_OFF_HAND) == EQUIP_SHIELD) { auto shield = &pInventoryItemList[pEquipment.uShield - 1]; - auto skill_type = pItemsTable->pItems[shield->uItemID].uSkillType; + auto skill_type = shield->GetPlayerSkillType(); uint shield_base_recovery = base_recovery_times_per_weapon_type[skill_type]; float multiplier = GetArmorRecoveryMultiplierFromSkillLevel(skill_type, 1.0f, 0, 0, 0); @@ -3100,7 +3100,7 @@ case CHARACTER_ATTRIBUTE_RANGED_DMG_BONUS: case CHARACTER_ATTRIBUTE_RANGED_ATTACK: if ( HasItemEquipped(EQUIP_BOW) ) - v5 = pItemsTable->pItems[this->pOwnItems[this->pEquipment.uBow-1].uItemID].uDamageMod; + v5 = this->pOwnItems[this->pEquipment.uBow-1].GetDamageMod(); return v5; break; @@ -3139,7 +3139,7 @@ v22 = this->GetEquippedItemEquipType(EQUIP_MAIN_HAND); if ( v22 >= 0 && v22 <= 2) { - v23 = this->pOwnItems[this->pEquipment.uMainHand].uItemID; + v23 = this->pOwnItems[this->pEquipment.uMainHand - 1].uItemID; v26 = pItemsTable->pItems[v23].uDamageRoll; if ( this->pEquipment.uShield || pItemsTable->pItems[v23].uSkillType != 4 ) { @@ -3152,13 +3152,13 @@ v5 = pItemsTable->pItems[v23].uDamageMod + v25 * v26; } } - if ( getOnlyMainHandDmg || !this->HasItemEquipped(EQUIP_OFF_HAND) || (GetEquippedItemEquipType(EQUIP_OFF_HAND) < 0 && GetEquippedItemEquipType(EQUIP_OFF_HAND) > 2)) + if ( getOnlyMainHandDmg || !this->HasItemEquipped(EQUIP_OFF_HAND) || (GetEquippedItemEquipType(EQUIP_OFF_HAND) < 0 || GetEquippedItemEquipType(EQUIP_OFF_HAND) > 2)) { return v5; } else { - v23 = this->pOwnItems[this->pEquipment.uShield].uItemID; + v23 = this->pOwnItems[this->pEquipment.uShield - 1].uItemID; v15 = pItemsTable->pItems[v23].uDamageMod; v14 = pItemsTable->pItems[v23].uDamageDice * pItemsTable->pItems[v23].uDamageRoll; return v5 + v15 + v14; @@ -3177,7 +3177,7 @@ v17 = this->GetEquippedItemEquipType(EQUIP_MAIN_HAND); if ( v17 >= 0 && v17 <= 2) { - v5 = pItemsTable->pItems[this->pOwnItems[this->pEquipment.uMainHand-1].uItemID].uDamageMod; + v5 = this->pOwnItems[this->pEquipment.uMainHand-1].GetDamageMod(); } } if ( getOnlyMainHandDmg || !this->HasItemEquipped(EQUIP_OFF_HAND) || (this->GetEquippedItemEquipType(EQUIP_OFF_HAND) < 0) || this->GetEquippedItemEquipType(EQUIP_OFF_HAND) > 2 ) @@ -3200,9 +3200,9 @@ v9 = this->GetEquippedItemEquipType(EQUIP_MAIN_HAND); if ( v9 >= 0 && v9 <= 2) { - v5 = pItemsTable->pItems[this->pOwnItems[this->pEquipment.uMainHand].uItemID].uDamageDice + - pItemsTable->pItems[this->pOwnItems[this->pEquipment.uMainHand].uItemID].uDamageMod; - if ( !this->pEquipment.uShield && pItemsTable->pItems[this->pOwnItems[this->pEquipment.uMainHand].uItemID].uSkillType == 4) + v5 = this->pOwnItems[this->pEquipment.uMainHand - 1].GetDamageDice() + + this->pOwnItems[this->pEquipment.uMainHand - 1].GetDamageMod(); + if ( !this->pEquipment.uShield && this->pOwnItems[this->pEquipment.uMainHand - 1].GetPlayerSkillType() == 4) { ++v5; } @@ -3215,8 +3215,8 @@ } else { - v14 = pItemsTable->pItems[this->pOwnItems[this->pEquipment.uShield].uItemID].uDamageMod; - v15 = pItemsTable->pItems[this->pOwnItems[this->pEquipment.uShield].uItemID].uDamageDice; + v14 = this->pOwnItems[this->pEquipment.uShield].GetDamageMod(); + v15 = this->pOwnItems[this->pEquipment.uShield].GetDamageDice(); return v5 + v15 + v14; } break; @@ -3741,7 +3741,7 @@ { if ( this->HasItemEquipped((ITEM_EQUIP_TYPE)i) ) { - PLAYER_SKILL_TYPE currentItemSkillType = (PLAYER_SKILL_TYPE)pItemsTable->pItems[this->pInventoryItemList[this->pEquipment.pIndices[i] - 1].uItemID].uSkillType; + PLAYER_SKILL_TYPE currentItemSkillType = (PLAYER_SKILL_TYPE)this->pInventoryItemList[this->pEquipment.pIndices[i] - 1].GetPlayerSkillType(); int currentItemSkillLevel = this->GetActualSkillLevel(currentItemSkillType); if ( currentItemSkillType == PLAYER_SKILL_BOW ) { @@ -3773,10 +3773,10 @@ { if ( this->HasItemEquipped((ITEM_EQUIP_TYPE)i) ) { - int currItemId = this->pInventoryItemList[this->pEquipment.pIndices[i]].uItemID; - if ( pItemsTable->pItems[currItemId].uEquipType == EQUIP_MAIN_HAND || pItemsTable->pItems[currItemId].uEquipType == EQUIP_OFF_HAND ) + ItemGen* currItemPtr = &this->pInventoryItemList[this->pEquipment.pIndices[i] - 1]; + if ( currItemPtr->GetItemEquipType() == EQUIP_MAIN_HAND || currItemPtr->GetItemEquipType() == EQUIP_OFF_HAND ) { - PLAYER_SKILL_TYPE currItemSkillType = (PLAYER_SKILL_TYPE)pItemsTable->pItems[currItemId].uSkillType; + PLAYER_SKILL_TYPE currItemSkillType = (PLAYER_SKILL_TYPE)currItemPtr->GetPlayerSkillType(); int currItemSkillLevel = this->GetActualSkillLevel(currItemSkillType); int baseSkillBonus; int multiplier; @@ -4378,7 +4378,7 @@ v73 = 1; if ( pParty->bTurnBasedModeOn == 1 && (pTurnEngine->turn_stage == 1 || pTurnEngine->turn_stage == 3) ) return; - if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_REAGENT ) + if ( pParty->pPickedItem.GetItemEquipType() == EQUIP_REAGENT ) { if ( pParty->pPickedItem.uItemID == 160 ) { @@ -4428,7 +4428,7 @@ return; } - if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_POTION ) + if ( pParty->pPickedItem.GetItemEquipType() == EQUIP_POTION ) { switch ( pParty->pPickedItem.uItemID ) { @@ -4724,7 +4724,7 @@ } - if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_SPELL_SCROLL ) + if ( pParty->pPickedItem.GetItemEquipType() == EQUIP_SPELL_SCROLL ) { if ( pCurrentScreen == SCREEN_CASTING ) return; @@ -4768,7 +4768,7 @@ return; } - if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_BOOK ) + if ( pParty->pPickedItem.GetItemEquipType() == EQUIP_BOOK ) { v15 = pParty->pPickedItem.uItemID - 400; v72 = playerAffected->spellbook.bHaveSpell[pParty->pPickedItem.uItemID-400];//(char *)&v3->pConditions[0] + pParty->pPickedItem.uItemID + 2; @@ -4840,7 +4840,7 @@ return; } - if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_MESSAGE_SCROLL ) + if ( pParty->pPickedItem.GetItemEquipType() == EQUIP_MESSAGE_SCROLL ) { if ( playerAffected->CanAct() ) { @@ -6238,7 +6238,7 @@ pParty->pIsArtifactFound[val-500] = 1; if ( val >= ITEM_WAND_FIRE && val <= ITEM_WAND_INCENERATION ) { - item.uNumCharges = rand() % 6 + pItemsTable->pItems[item.uItemID].uDamageMod + 1; + item.uNumCharges = rand() % 6 + item.GetDamageMod() + 1; item.uMaxCharges = LOBYTE(item.uNumCharges); } pParty->SetHoldingItem(&item); @@ -7406,8 +7406,8 @@ if ( !v8 || playerPtr->pInventoryItemList[v8 - 1].IsBroken() || - (pItemsTable->pItems[playerPtr->pInventoryItemList[v8 - 1].uItemID].uSkillType != PLAYER_SKILL_CHAIN - && pItemsTable->pItems[playerPtr->pInventoryItemList[v8 - 1].uItemID].uSkillType != PLAYER_SKILL_PLATE + (playerPtr->pInventoryItemList[v8 - 1].GetPlayerSkillType() != PLAYER_SKILL_CHAIN + && playerPtr->pInventoryItemList[v8 - 1].GetPlayerSkillType() != PLAYER_SKILL_PLATE ) ) { @@ -7792,7 +7792,7 @@ } v9 = tmpItem.uItemID; memcpy(&pParty->pPickedItem, &tmpItem, sizeof(ItemGen)); - pMouse->SetCursorBitmap(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName); + pMouse->SetCursorBitmap(pParty->pPickedItem.GetIconName()); return; } else diff -r 69efd5d1ab5c -r c70d526669ec UI/UICharacter.cpp --- a/UI/UICharacter.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/UI/UICharacter.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -777,8 +777,8 @@ pRenderer->DrawMaskToZBuffer(pPaperdoll_BodyX, pPaperdoll_BodyY, pIcons_LOD->GetTexture(papredoll_dbods[uPlayerID - 1]), player->pEquipment.uArmor); //Рука не занята или ... if ( !player->pEquipment.uMainHand - || ( pItemsTable->pItems[pPlayers[uPlayerID]->pInventoryItemList[player->pEquipment.uMainHand - 1].uItemID].uEquipType != EQUIP_MAIN_HAND) - && (pItemsTable->pItems[pPlayers[uPlayerID]->pInventoryItemList[player->pEquipment.uMainHand - 1].uItemID].uSkillType != PLAYER_SKILL_SPEAR + || ( pPlayers[uPlayerID]->pInventoryItemList[player->pEquipment.uMainHand - 1].GetItemEquipType() != EQUIP_MAIN_HAND) + && (pPlayers[uPlayerID]->pInventoryItemList[player->pEquipment.uMainHand - 1].GetItemEquipType() != PLAYER_SKILL_SPEAR || pPlayers[uPlayerID]->pEquipment.uShield) ) pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_LeftHand[pBodyComplection][1], pIcons_LOD->GetTexture(papredoll_dlads[uPlayerID - 1])); @@ -791,7 +791,7 @@ if ( item->uItemID == 64 ) //blaster v166 = "item64v1"; else - v166 = pItemsTable->pItems[item->uItemID].pIconName; + v166 = item->GetIconName(); if ( !( item->uAttributes & 0xF0 ) ) { if ( item->uAttributes & 2 ) @@ -839,13 +839,13 @@ if ( !(item->uAttributes & 0xF0) )// если не применён закл { if ( item->uAttributes & 2 ) - pRenderer->DrawTransparentRedShade(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE))); + pRenderer->DrawTransparentRedShade(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(item->GetIconName(), TEXTURE_16BIT_PALETTE))); else { if ( !(item->uAttributes & 1) )//не опознанный лук зелёный - pRenderer->DrawTransparentGreenShade(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE))); + pRenderer->DrawTransparentGreenShade(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(item->GetIconName(), TEXTURE_16BIT_PALETTE))); else // опознанный лук - pRenderer->DrawTextureTransparent(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE))); + pRenderer->DrawTextureTransparent(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(item->GetIconName(), TEXTURE_16BIT_PALETTE))); } } else @@ -865,12 +865,12 @@ item->uAttributes &= 0xFFFFFF0Fu; ptr_50C9A4_ItemToEnchant = 0; } - pRenderer->DrawAura(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)), + pRenderer->DrawAura(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(item->GetIconName(), TEXTURE_16BIT_PALETTE)), pIcons_LOD->LoadTexturePtr(container, TEXTURE_16BIT_PALETTE), GetTickCount() * 0.1, 0, 255); } if ( !bRingsShownInCharScreen ) - pRenderer->DrawMaskToZBuffer(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)), + pRenderer->DrawMaskToZBuffer(item_X, item_Y, pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(item->GetIconName(), TEXTURE_16BIT_PALETTE)), pPlayers[uPlayerID]->pEquipment.uBow); } //-----------------------------(Cloak/Плащ)--------------------------------------------------------- @@ -1062,8 +1062,8 @@ } //--------------------------------------------(Hand/Рука)------------------------------------------------------ if ( !pPlayers[uPlayerID]->pEquipment.uMainHand - || ( pItemsTable->pItems[pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand -1].uItemID].uEquipType != EQUIP_MAIN_HAND) - && (pItemsTable->pItems[pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand -1].uItemID].uSkillType != PLAYER_SKILL_SPEAR + || ( pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand -1].GetItemEquipType() != EQUIP_MAIN_HAND) + && (pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand -1].GetItemEquipType() != PLAYER_SKILL_SPEAR || pPlayers[uPlayerID]->pEquipment.uShield) ) pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_LeftHand[pBodyComplection][1], pIcons_LOD->GetTexture(papredoll_dlads[uPlayerID - 1])); @@ -1130,8 +1130,8 @@ //---------------------------------------------(Hand2/Рука2)-------------------------------------------------- if ( pPlayers[uPlayerID]->pEquipment.uMainHand ) { - if ( pItemsTable->pItems[pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand - 1].uItemID].uEquipType == EQUIP_MAIN_HAND - || pItemsTable->pItems[pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand - 1].uItemID].uSkillType == PLAYER_SKILL_SPEAR + if ( pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand - 1].GetItemEquipType() == EQUIP_MAIN_HAND + || pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand - 1].GetItemEquipType() == PLAYER_SKILL_SPEAR && !pPlayers[uPlayerID]->pEquipment.uShield ) pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_SecondLeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_SecondLeftHand[pBodyComplection][1], pIcons_LOD->GetTexture(papredoll_dlaus[uPlayerID - 1])); @@ -1407,7 +1407,7 @@ if ( item->uItemID == 64 ) v181 = "item64v1"; else - v181 = pItemsTable->pItems[item->uItemID].pIconName; + v181 = item->GetIconName(); if ( !(item->uAttributes & 0xF0) ) { if ( item->uAttributes & 2 ) @@ -1448,8 +1448,8 @@ if ( pPlayers[uPlayerID]->pEquipment.uShield ) { item = &pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uShield - 1]; - if ( pItemsTable->pItems[item->uItemID].uSkillType == PLAYER_SKILL_DAGGER - || pItemsTable->pItems[item->uItemID].uSkillType == PLAYER_SKILL_SWORD ) + if ( item->GetPlayerSkillType() == PLAYER_SKILL_DAGGER + || item->GetPlayerSkillType() == PLAYER_SKILL_SWORD ) { //v151 = item->uItemID - 400; item_X = 596; @@ -1478,7 +1478,7 @@ item_X = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][0][0] - pItemsTable->pItems[item->uItemID].uEquipX; item_Y = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][0][1] - pItemsTable->pItems[item->uItemID].uEquipY; } - v153 = pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v153 = pIcons_LOD->LoadTexture(item->GetIconName(), TEXTURE_16BIT_PALETTE); if ( !(item->uAttributes & 0xF0) ) { if ( item->uAttributes & 2 ) @@ -1525,8 +1525,8 @@ if ( pPlayers[uPlayerID]->pEquipment.uMainHand ) { item = &pPlayers[uPlayerID]->pInventoryItemList[pPlayers[uPlayerID]->pEquipment.uMainHand - 1]; - if ( pItemsTable->pItems[item->uItemID].uEquipType == EQUIP_MAIN_HAND - || pItemsTable->pItems[item->uItemID].uSkillType == PLAYER_SKILL_SPEAR + if ( item->GetItemEquipType() == EQUIP_MAIN_HAND + || item->GetItemEquipType() == PLAYER_SKILL_SPEAR && !pPlayers[uPlayerID]->pEquipment.uShield ) pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_SecondLeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_SecondLeftHand[pBodyComplection][1], @@ -1558,7 +1558,7 @@ continue; uCellY = 32 * (i / 14) + 17; uCellX = 32 * (i % 14) + 14; - uint item_texture_id = pIcons_LOD->LoadTexture(pItemsTable->pItems[player->pInventoryItemList[player->pInventoryMatrix[i] - 1].uItemID].pIconName, TEXTURE_16BIT_PALETTE); + uint item_texture_id = pIcons_LOD->LoadTexture(player->pInventoryItemList[player->pInventoryMatrix[i] - 1].GetIconName(), TEXTURE_16BIT_PALETTE); pTexture = pIcons_LOD->GetTexture(item_texture_id); if (pTexture->uTextureWidth < 14) pTexture->uTextureWidth = 14; @@ -1608,7 +1608,7 @@ static void CharacterUI_DrawItem(int x, int y, ItemGen *item, int id) { - auto item_texture = pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + auto item_texture = pIcons_LOD->LoadTexturePtr(item->GetIconName(), TEXTURE_16BIT_PALETTE); if (item->uAttributes & 0xF0) // enchant animation { @@ -2342,13 +2342,13 @@ _this.Reset(); v1 = pPlayers[uActiveCharacter]->pEquipment.uMainHand; v2 = pPlayers[uActiveCharacter]->pEquipment.uShield; - if ( v1 && pItemsTable->pItems[*(int *)&pPlayers[uActiveCharacter]->pInventoryItemList[v1 - 1]].uEquipType == EQUIP_MAIN_HAND ) + if ( v1 && pPlayers[uActiveCharacter]->pInventoryItemList[v1 - 1].GetItemEquipType() == EQUIP_MAIN_HAND ) v51 = v1; v3 = pParty->pPickedItem.uItemID; if ( pParty->pPickedItem.uItemID ) { - pEquipType = pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType; - pSkillType = pItemsTable->pItems[pParty->pPickedItem.uItemID].uSkillType; + pEquipType = pParty->pPickedItem.GetItemEquipType(); + pSkillType = pParty->pPickedItem.GetItemEquipType(); if ( pSkillType == 4 ) { if ( v2 ) @@ -2366,7 +2366,7 @@ { if ( (pSkillType == 8 || pSkillType == 1 || pSkillType == 2) && v1 - && pItemsTable->pItems[*(int *)&pPlayers[uActiveCharacter]->pInventoryItemList[v1 - 1]].uSkillType == 4 ) + && pPlayers[uActiveCharacter]->pInventoryItemList[v1 - 1].GetPlayerSkillType() == 4 ) { LOBYTE(v5) = pPlayers[uActiveCharacter]->GetActualSkillLevel(PLAYER_SKILL_SPEAR); if ( (signed int)SkillToMastery(v5) < 3 ) @@ -2672,7 +2672,7 @@ { v36 = v34 - 1; v38 = &pPlayers[uActiveCharacter]->pInventoryItemList[v36]; - pEquipType = pItemsTable->pItems[v38->uItemID].uEquipType; + pEquipType = v38->GetItemEquipType(); if ( v38->uItemID == ITEM_WETSUIT ) { if ( bUnderwater ) @@ -2702,7 +2702,7 @@ if ( !ptr_50C9A4_ItemToEnchant )//снять вещь { pParty->SetHoldingItem(v38); - pPlayers[uActiveCharacter]->pEquipment.pIndices[pPlayers[uActiveCharacter]->pInventoryItemList[v36].uBodyAnchor] = 0; + pPlayers[uActiveCharacter]->pEquipment.pIndices[pPlayers[uActiveCharacter]->pInventoryItemList[v36].uBodyAnchor - 1] = 0; v38->Reset(); } } diff -r 69efd5d1ab5c -r c70d526669ec UI/UIGuilds.cpp --- a/UI/UIGuilds.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/UI/UIGuilds.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -26,9 +26,7 @@ const char *statusbar_string; // ecx@26 POINT *v12; // esi@30 int v13; // ecx@30 - //void *v14; // ST1C_4@31 ItemGen *v15; // ST18_4@31 - //int v16; // ST10_4@31 int v17; // eax@31 char *v18; // edx@31 int pActiveItem; // esi@35 @@ -59,7 +57,6 @@ int pColorWhite; // [sp+2CCh] [bp-20h]@1 int pColorYellow; // [sp+2D0h] [bp-1Ch]@1 int v58; // [sp+2D4h] [bp-18h]@1 - //unsigned __int8 uPlayerID; // [sp+2DBh] [bp-11h]@31 bool pSkillFlag; // [sp+2DCh] [bp-10h]@35 int v61; // [sp+2E0h] [bp-Ch]@35 unsigned int v62; // [sp+2E4h] [bp-8h]@13 diff -r 69efd5d1ab5c -r c70d526669ec UI/UIHouses.cpp --- a/UI/UIHouses.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/UI/UIHouses.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -1097,7 +1097,7 @@ { if ( pParty->SpellBooksInGuilds[v8->par1C-139][i].uItemID ) { - v34 = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->SpellBooksInGuilds[v8->par1C-139][i].uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v34 = pIcons_LOD->LoadTexture(pParty->SpellBooksInGuilds[v8->par1C-139][i].GetIconName(), TEXTURE_16BIT_PALETTE); v8 = window_SpeakInHouse; ItemsInShopTexture[i] = &pIcons_LOD->pTextures[v34]; } @@ -1617,7 +1617,7 @@ { if ( pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][v43].uItemID ) { - v46 = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][v43].uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v46 = pIcons_LOD->LoadTexture(pParty->StandartItemsInShops[(int)window_SpeakInHouse->ptr_1C][v43].GetIconName(), TEXTURE_16BIT_PALETTE); ItemsInShopTexture[v43] = &pIcons_LOD->pTextures[v46]; } } @@ -1645,7 +1645,7 @@ { if ( pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v43].uItemID ) { - v51 = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v43].uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v51 = pIcons_LOD->LoadTexture(pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v43].GetIconName(), TEXTURE_16BIT_PALETTE); ItemsInShopTexture[v43] = &pIcons_LOD->pTextures[v51]; } } diff -r 69efd5d1ab5c -r c70d526669ec UI/UIPopup.cpp --- a/UI/UIPopup.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/UI/UIPopup.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -107,22 +107,22 @@ //----- (0041D895) -------------------------------------------------------- void GameUI_DrawItemInfo( struct ItemGen* inspect_item ) { - unsigned int v2; // eax@3 - const char *v28; // edi@69 - int v34; // esi@81 - char *pText; // [sp-14h] [bp-28Ch]@110 - char out_text[300]; // [sp+8h] [bp-270h]@40 - char v65[120]; // [sp+134h] [bp-144h]@92 - stru351_summoned_item v67; - int v77; // [sp+200h] [bp-78h]@12 - int v78; // [sp+204h] [bp-74h]@5 - GUIWindow iteminfo_window; // [sp+208h] [bp-70h]@2 - POINT a2; // [sp+25Ch] [bp-1Ch]@2 - int v81; // [sp+264h] [bp-14h]@5 - PlayerSpeech v83; // [sp+26Ch] [bp-Ch]@18 - char* v84; - int v85; - char *Str; // [sp+270h] [bp-8h]@65 + unsigned int v2; // eax@3 + const char *v28; // edi@69 + int v34; // esi@81 + char *pText; // [sp-14h] [bp-28Ch]@110 + char out_text[300]; // [sp+8h] [bp-270h]@40 + char v65[120]; // [sp+134h] [bp-144h]@92 + stru351_summoned_item v67; + int v77; // [sp+200h] [bp-78h]@12 + int v78; // [sp+204h] [bp-74h]@5 + GUIWindow iteminfo_window; // [sp+208h] [bp-70h]@2 + POINT a2; // [sp+25Ch] [bp-1Ch]@2 + int v81; // [sp+264h] [bp-14h]@5 + PlayerSpeech v83; // [sp+26Ch] [bp-Ch]@18 + char* v84; + int v85; + char *Str; // [sp+270h] [bp-8h]@65 if (!inspect_item->uItemID) return; @@ -135,8 +135,8 @@ else v2 = pMouse->GetCursorPos(&a2)->x - iteminfo_window.uFrameWidth - 30; iteminfo_window.uFrameX = v2; - v78 = 100 - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->uTextureWidth; - v81 = 144 - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->uTextureHeight; + v78 = 100 - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureWidth; + v81 = 144 - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureHeight; if ( v78 > 0 ) v78 = v78 / 2; if ( v81 <= 0 ) @@ -146,14 +146,13 @@ if ( !pItemsTable->pItems[inspect_item->uItemID].uItemID_Rep_St ) inspect_item->SetIdentified(); v77 = 0; - if (pItemsTable->pItems[inspect_item->uItemID].uEquipType == EQUIP_GOLD) + if (inspect_item->GetItemEquipType() == EQUIP_GOLD) v77 = inspect_item->uSpecEnchantmentType; if ( uActiveCharacter ) { //try to identify if (!inspect_item->IsIdentified()) { - //v11 = inspect_item; if ( pPlayers[uActiveCharacter]->CanIdentify(inspect_item) == 1 ) inspect_item->SetIdentified(); v83 = SPEECH_9; @@ -198,7 +197,7 @@ iteminfo_window.uFrameHeight -= 12; iteminfo_window.uFrameZ = iteminfo_window.uFrameX + iteminfo_window.uFrameWidth - 1; iteminfo_window.uFrameW = iteminfo_window.uFrameY + iteminfo_window.uFrameHeight - 1; - pRenderer->DrawTransparentRedShade(iteminfo_window.uFrameX + v78, v81 + iteminfo_window.uFrameY + 30, pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)); + pRenderer->DrawTransparentRedShade(iteminfo_window.uFrameX + v78, v81 + iteminfo_window.uFrameY + 30, pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)); if ( inspect_item->IsIdentified()) pText = (char *)inspect_item->GetIdentifiedName(); else @@ -209,7 +208,7 @@ pRenderer->ResetTextureClipRect(); if ( !areWeLoadingTexture ) { - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->Release(); + pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->Release(); pIcons_LOD->SyncLoadedFilesCount(); } return; @@ -223,14 +222,14 @@ iteminfo_window.uFrameHeight -= 12; iteminfo_window.uFrameZ = iteminfo_window.uFrameX + iteminfo_window.uFrameWidth - 1; iteminfo_window.uFrameW = iteminfo_window.uFrameY + iteminfo_window.uFrameHeight - 1; - pRenderer->DrawTextureTransparent(iteminfo_window.uFrameX + v78, v81 + iteminfo_window.uFrameY + 30, pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)); + pRenderer->DrawTextureTransparent(iteminfo_window.uFrameX + v78, v81 + iteminfo_window.uFrameY + 30, pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)); iteminfo_window.DrawTitleText(pFontArrus, 0, 0xCu, TargetColor(0xFFu, 0xFFu, 0x9Bu), pItemsTable->pItems[inspect_item->uItemID].pUnidentifiedName, 3); iteminfo_window.DrawTitleText(pFontArrus, 0x64u, ((signed int)iteminfo_window.uFrameHeight >> 1) - pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[232], &iteminfo_window, 0, 0) / 2, TargetColor(0xFFu, 0x19u, 0x19u), pGlobalTXT_LocalizationStrings[232], 3);//"Not Identified" pRenderer->ResetTextureClipRect(); if ( !areWeLoadingTexture ) { - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->Release(); + pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->Release(); pIcons_LOD->SyncLoadedFilesCount(); } return; @@ -238,29 +237,29 @@ sprintfex(out_text, pGlobalTXT_LocalizationStrings[463], pItemsTable->pItems[inspect_item->uItemID].pUnidentifiedName); //"Type: %s" out_text[100] = 0; out_text[200] = 0; - switch (pItemsTable->pItems[inspect_item->uItemID].uEquipType) + switch (inspect_item->GetItemEquipType()) { case EQUIP_OFF_HAND: case EQUIP_MAIN_HAND: sprintfex(out_text + 100, "%s: +%d %s: %dd%d", pGlobalTXT_LocalizationStrings[LOCSTR_ATTACK], - (int)pItemsTable->pItems[inspect_item->uItemID].uDamageMod, pGlobalTXT_LocalizationStrings[53], - (int)pItemsTable->pItems[inspect_item->uItemID].uDamageDice, (int)pItemsTable->pItems[inspect_item->uItemID].uDamageRoll); //"Damage" - if (pItemsTable->pItems[inspect_item->uItemID].uDamageMod) + (int)inspect_item->GetDamageMod(), pGlobalTXT_LocalizationStrings[53], + (int)inspect_item->GetDamageDice(), (int)inspect_item->GetDamageRoll()); //"Damage" + if (inspect_item->GetDamageMod()) { char mod[16]; - sprintf(mod, "+%d", (int)pItemsTable->pItems[inspect_item->uItemID].uDamageMod); + sprintf(mod, "+%d", (int)inspect_item->GetDamageMod()); strcat(out_text + 100, mod); } break; case EQUIP_BOW: sprintfex(out_text + 100, "%s: +%d %s: %dd%d", pGlobalTXT_LocalizationStrings[203], //"Shoot" - (int)pItemsTable->pItems[inspect_item->uItemID].uDamageMod, pGlobalTXT_LocalizationStrings[53], //"Damage" - (int)pItemsTable->pItems[inspect_item->uItemID].uDamageDice, (int)pItemsTable->pItems[inspect_item->uItemID].uDamageRoll); - if (pItemsTable->pItems[inspect_item->uItemID].uDamageMod) + (int)inspect_item->GetDamageMod(), pGlobalTXT_LocalizationStrings[53], //"Damage" + (int)inspect_item->GetDamageDice(), (int)inspect_item->GetDamageRoll()); + if (inspect_item->GetDamageMod()) { char mod[16]; - sprintf(mod, "+%d", (int)pItemsTable->pItems[inspect_item->uItemID].uDamageMod); + sprintf(mod, "+%d", (int)inspect_item->GetDamageMod()); strcat(out_text + 100, mod); } break; @@ -274,21 +273,21 @@ case EQUIP_BOOTS: case EQUIP_RING: case EQUIP_AMULET: - if (pItemsTable->pItems[inspect_item->uItemID].uDamageDice) //"Armor" + if (inspect_item->GetDamageDice()) //"Armor" sprintfex(out_text + 100, "%s: +%d", pGlobalTXT_LocalizationStrings[11], - pItemsTable->pItems[inspect_item->uItemID].uDamageDice + pItemsTable->pItems[inspect_item->uItemID].uDamageMod); + inspect_item->GetDamageDice() + inspect_item->GetDamageMod()); break; } if ( !v77 ) { - if (pItemsTable->pItems[inspect_item->uItemID].uEquipType ==EQUIP_POTION) //this is CORRECT! do not move to switch! + if (inspect_item->GetItemEquipType() ==EQUIP_POTION) //this is CORRECT! do not move to switch! { if ( inspect_item->uEnchantmentType ) sprintf(out_text + 200, "%s: %d",pGlobalTXT_LocalizationStrings[449] , inspect_item->uEnchantmentType); //"Power" } - else if (pItemsTable->pItems[inspect_item->uItemID].uEquipType == EQUIP_REAGENT) - sprintf(out_text + 200, "%s: %d", pGlobalTXT_LocalizationStrings[449], pItemsTable->pItems[inspect_item->uItemID].uDamageDice); //"Power" + else if (inspect_item->GetItemEquipType() == EQUIP_REAGENT) + sprintf(out_text + 200, "%s: %d", pGlobalTXT_LocalizationStrings[449], inspect_item->GetDamageDice()); //"Power" else if ( inspect_item->uEnchantmentType ) sprintf(out_text + 200, "%s: %s +%d", pGlobalTXT_LocalizationStrings[210], pItemsTable->pEnchantments[inspect_item->uEnchantmentType-1].pBonusStat, inspect_item->m_enchantmentStrength); //"Special" else if ( inspect_item->uSpecEnchantmentType ) @@ -310,7 +309,7 @@ v28 = pItemsTable->pItems[inspect_item->uItemID].pDescription; if ( *v28 ) Str += pFontSmallnum->CalcTextHeight(pItemsTable->pItems[inspect_item->uItemID].pDescription, &iteminfo_window, 100, 0); - iteminfo_window.uFrameHeight = pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, + iteminfo_window.uFrameHeight = pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureHeight + v81 + 54; if ( (signed int)Str > (signed int)iteminfo_window.uFrameHeight ) iteminfo_window.uFrameHeight = (unsigned int)Str; @@ -332,13 +331,12 @@ pRenderer->SetTextureClipRect(iteminfo_window.uFrameX + 12, iteminfo_window.uFrameY + 12, iteminfo_window.uFrameX + iteminfo_window.uFrameWidth - 12, iteminfo_window.uFrameY + iteminfo_window.uFrameHeight - 12); iteminfo_window.uFrameWidth -= 12; - //v32 = pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->uTextureHeight; iteminfo_window.uFrameHeight -= 12; iteminfo_window.uFrameZ = iteminfo_window.uFrameX + iteminfo_window.uFrameWidth - 1; iteminfo_window.uFrameW = iteminfo_window.uFrameY + iteminfo_window.uFrameHeight - 1; pRenderer->DrawTextureTransparent(iteminfo_window.uFrameX + v78, - iteminfo_window.uFrameY + (signed int)(iteminfo_window.uFrameHeight - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->uTextureHeight) / 2, - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)); + iteminfo_window.uFrameY + (signed int)(iteminfo_window.uFrameHeight - pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->uTextureHeight) / 2, + pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)); v34 = (int)(v85 + 35); Str = out_text; @@ -403,7 +401,7 @@ pRenderer->ResetTextureClipRect(); if ( !areWeLoadingTexture ) { - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->Release(); + pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->Release(); pIcons_LOD->SyncLoadedFilesCount(); } return; @@ -417,7 +415,7 @@ } if ( !areWeLoadingTexture ) { - pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[inspect_item->uItemID].pIconName, TEXTURE_16BIT_PALETTE)->Release(); + pIcons_LOD->LoadTexturePtr(inspect_item->GetIconName(), TEXTURE_16BIT_PALETTE)->Release(); pIcons_LOD->SyncLoadedFilesCount(); } return; @@ -447,53 +445,28 @@ int v43; // eax@62 int v44; // eax@63 signed int v45; // edi@65 - int v50; // edi@90 - SpellBuff *v51; // eax@91 - char *v52; // ecx@98 - char *v53; // ecx@101 - char *v54; // ST0C_4@118 - unsigned int v55; // eax@118 - GUIFont *v56; // edi@124 - unsigned __int8 v57; // al@128 - int v58; // eax@132 - Actor *v59; // ecx@133 - unsigned __int8 v60; // dl@138 - char *v62; // eax@147 - int v63; // eax@152 - int v65; // eax@155 - const char *v67; // [sp-10h] [bp-1FCh]@125 - const char *v68; // [sp-10h] [bp-1FCh]@142 - char *v70; // [sp-Ch] [bp-1F8h]@125 - char *v71; // [sp-Ch] [bp-1F8h]@142 - char *v72; // [sp-8h] [bp-1F4h]@54 + int pTextHeight; // edi@90 int v73; // [sp-8h] [bp-1F4h]@79 - int v75; // [sp-8h] [bp-1F4h]@125 - int v76; // [sp-8h] [bp-1F4h]@142 - size_t v77; // [sp-4h] [bp-1F0h]@54 - unsigned int v79; // [sp-4h] [bp-1F0h]@125 - char *v80; // [sp-4h] [bp-1F0h]@142 - char *v81; // [sp-4h] [bp-1F0h]@148 DDBLTFX Dst; // [sp+Ch] [bp-1E0h]@18 DDSURFACEDESC2 pDesc; // [sp+70h] [bp-17Ch]@18 RECT v84; // [sp+ECh] [bp-100h]@26 - char *v85[10]; // [sp+FCh] [bp-F0h]@145 - char *v95[11]; // [sp+124h] [bp-C8h]@127 + char *string_name[10]; // [sp+FCh] [bp-F0h]@145 + char *content[11]; // [sp+124h] [bp-C8h]@127 RenderBillboardTransform_local0 v106; // [sp+150h] [bp-9Ch]@3 unsigned int v107; // [sp+1A0h] [bp-4Ch]@18 unsigned __int16 *v108; // [sp+1A4h] [bp-48h]@34 unsigned int v109; // [sp+1A8h] [bp-44h]@32 LPVOID v110; // [sp+1ACh] [bp-40h]@28 - int v112; // [sp+1B4h] [bp-38h]@3 - int v222; // [sp+1B8h] [bp-34h]@18 - unsigned __int8 v114; // [sp+1BFh] [bp-2Dh]@133 int v115; // [sp+1C0h] [bp-2Ch]@3 - unsigned int v116; // [sp+1C4h] [bp-28h]@18 - int i; // [sp+1C8h] [bp-24h]@18 - int v119; // [sp+1D0h] [bp-1Ch]@18 - SpellBuff *v120; // [sp+1D4h] [bp-18h]@18 - int v124; // [sp+1E4h] [bp-8h]@18 + bool normal_level; // [sp+1D0h] [bp-1Ch]@18 + bool expert_level; // [sp+1C4h] [bp-28h]@18 + bool master_level; // [sp+1C8h] [bp-24h]@18 + bool grandmaster_level; // [sp+1B4h] [bp-38h]@3 + char *pText; // [sp+1D4h] [bp-18h]@18 + int pTextColorID; // [sp+1E4h] [bp-8h]@18 int a4; // [sp+1E8h] [bp-4h]@18 + bool monster_full_informations = true; static Actor pMonsterInfoUI_Doll; /*if ( !(bMonsterInfoUI_bDollInitialized & 1) ) { @@ -563,7 +536,7 @@ pDesc.dwSize = 124; pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].pTextureSurface->GetSurfaceDesc(&pDesc); v107 = 0; - i = 0; + uint i = 0; int dst_x = v106.uScreenSpaceX + pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uAreaX - pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uBufferWidth / 2; int dst_y = v106.uScreenSpaceY + pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uAreaY - pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uBufferHeight; uint dst_z = v106.uScreenSpaceX + pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uAreaX + pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uAreaWidth + pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uBufferWidth / 2 - pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]].uBufferWidth; @@ -600,7 +573,6 @@ { v20 = (char *)dst_y; v110 = pDesc.lpSurface; - //a2 = dst_y; if (dst_y < dst_w) { v21 = dst_x; @@ -672,58 +644,53 @@ if ( v10->pHwSpriteIDs[0] >= 0 ) pSprites_LOD->pSpriteHeaders[v10->pHwSpriteIDs[0]].DrawSprite_sw(&v106, 0); } - +//name and profession if ( pActors[uActorID].sNPC_ID ) { if (GetNPCData(pActors[uActorID].sNPC_ID)->uProfession) sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], GetNPCData(pActors[uActorID].sNPC_ID)->pName, aNPCProfessionNames[GetNPCData(pActors[uActorID].sNPC_ID)->uProfession]); // "%s the %s" / ^Pi[%s] %s else - { - v77 = 2000; - v72 = GetNPCData(pActors[uActorID].sNPC_ID)->pName; - } + strncpy(pTmpBuf.data(), GetNPCData(pActors[uActorID].sNPC_ID)->pName, 2000); } else { - v77 = 2000; if ( pActors[uActorID].dword_000334_unique_name ) - v72 = pMonsterStats->pPlaceStrings[pActors[uActorID].dword_000334_unique_name]; + strncpy(pTmpBuf.data(), pMonsterStats->pPlaceStrings[pActors[uActorID].dword_000334_unique_name], 2000); else - v72 = pMonsterStats->pInfos[pActors[uActorID].pMonsterInfo.uID].pName; + strncpy(pTmpBuf.data(), pMonsterStats->pInfos[pActors[uActorID].pMonsterInfo.uID].pName, 2000); } - if(!pActors[uActorID].sNPC_ID || (pActors[uActorID].sNPC_ID && !GetNPCData(pActors[uActorID].sNPC_ID)->uProfession)) - strncpy(pTmpBuf.data(), v72, v77); window->DrawTitleText(pFontComic, 0, 0xCu, TargetColor(0xFFu, 0xFFu, 0x9Bu), pTmpBuf.data(), 3); + //health bar Actor::DrawHealthBar(&pActors[uActorID], window); - v119 = 0; + + normal_level = 0; + expert_level = 0; + master_level = 0; + grandmaster_level = 0; pMonsterInfoUI_Doll.uCurrentActionTime += pMiscTimer->uTimeElapsed; v115 = 0; - v116 = 0; - i = 0; - v112 = 0; if ( !uActiveCharacter ) v45 = 1; else { - LOBYTE(v40) = pPlayers[uActiveCharacter]->GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID); - v120 = v40; - if ( !v40 ) + int i = pPlayers[uActiveCharacter]->GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID); + if ( !i ) v45 = 1; else { - v41 = (unsigned __int8)v40 & 0x3F; - v42 = SkillToMastery((unsigned __int16)v40) - 1; - if ( !v42 ) + v41 = (unsigned __int8)i & 0x3F; + v42 = SkillToMastery(i) - 1; + if ( !v42 )//not master { if ( v41 + 10 >= pActors[uActorID].pMonsterInfo.uLevel ) { v45 = 1; - v119 = 1; + normal_level = 1; } else v45 = 1; } - else + else//he is master { v43 = v42 - 1; if ( !v43 ) @@ -731,8 +698,8 @@ if ( 2 * v41 + 10 >= pActors[uActorID].pMonsterInfo.uLevel ) { v45 = 1; - v119 = 1; - v116 = 1; + normal_level = 1; + expert_level = 1; } else v45 = 1; @@ -745,9 +712,9 @@ if ( 3 * v41 + 10 >= pActors[uActorID].pMonsterInfo.uLevel ) { v45 = 1; - v119 = 1; - v116 = 1; - i = 1; + normal_level = 1; + expert_level = 1; + master_level = 1; } else v45 = 1; @@ -759,10 +726,10 @@ else { v45 = 1; - v119 = 1; - v116 = 1; - i = 1; - v112 = 1; + normal_level = 1; + expert_level = 1; + master_level = 1; + grandmaster_level = 1; } } } @@ -770,9 +737,9 @@ } if ( pActors[uActorID].uAIState != Dead && pActors[uActorID].uAIState != Dying - && !dword_507BF0_is_there_popup_onscreen && v120 ) + && !dword_507BF0_is_there_popup_onscreen && i ) { - if ( v119 | v116 | i | (unsigned int)v112 ) + if ( normal_level | expert_level | master_level | grandmaster_level ) { if ( pActors[uActorID].pMonsterInfo.uLevel >= pPlayers[uActiveCharacter]->uLevel - 5 ) v73 = SPEECH_105; @@ -785,193 +752,164 @@ } } - for (uint i = 0; i < 4; ++i) + if ( (signed int)SkillToMastery(pParty->pPlayers[uActiveCharacter].GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID)) >= 3 ) + v115 = v45; + + if ( monster_full_informations == true ) { - v120 = (SpellBuff *)138; - do - { - if ( (signed int)SkillToMastery(pParty->pPlayers[i].GetActualSkillLevel(PLAYER_SKILL_MONSTER_ID)) >= 3 ) - v115 = v45; - v120 = (SpellBuff *)((char *)v120 - 1); - } - while ( v120 ); + normal_level = 1;// + expert_level = 1;// + master_level = 1;// + grandmaster_level = 1;// + v115 = 1; } - window->DrawText(pFontSmallnum, 12, 196, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[631], 0, 0, 0); + window->DrawText(pFontSmallnum, 12, 196, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[631], 0, 0, 0);//Effects if ( !v115 ) - window->DrawText(pFontSmallnum, 28, LOBYTE(pFontSmallnum->uFontHeight) + 193, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[630], 0, 0, 0); + window->DrawText(pFontSmallnum, 28, LOBYTE(pFontSmallnum->uFontHeight) + 193, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[630], 0, 0, 0);//? else { - a4 = 0; - v51 = &pActors[uActorID].pActorBuffs[1]; - v222 = 0; - v120 = &pActors[uActorID].pActorBuffs[1]; - do - { - if ( (signed __int64)v51->uExpireTime > 0 ) - { - switch ( (int)v51 ) - { - case 0u: - v124 = 60; - a4 = (int)pGlobalTXT_LocalizationStrings[591]; - break; - case 1u: - v124 = 82; - a4 = (int)pGlobalTXT_LocalizationStrings[649]; - break; - case 2u: - v124 = 92; - a4 = (int)pGlobalTXT_LocalizationStrings[592]; - break; - case 3u: - v124 = 63; - a4 = (int)pGlobalTXT_LocalizationStrings[4]; - break; - case 4u: - v52 = pGlobalTXT_LocalizationStrings[220]; - a4 = (int)v52; - v124 = 81; - break; - case 5u: - v52 = pGlobalTXT_LocalizationStrings[162]; - a4 = (int)v52; - v124 = 81; - break; - case 6u: - v53 = pGlobalTXT_LocalizationStrings[593]; - v124 = 35; - a4 = (int)v53; - break; - case 8u: - v53 = pGlobalTXT_LocalizationStrings[608]; - v124 = 62; - a4 = (int)v53; - break; - case 7u: - case 9u: - a4 = 0; - v124 = 0; - ++v51; - v222 = v222 + 1; - v120 = v51; - __debugbreak(); // fix condition - continue; - case 0xAu: - v124 = 47; - a4 = (int)pGlobalTXT_LocalizationStrings[221]; - break; - case 0xBu: - v124 = 66; - a4 = (int)pGlobalTXT_LocalizationStrings[607]; - break; - case 0xCu: - v124 = 85; - a4 = (int)pGlobalTXT_LocalizationStrings[610]; - break; - case 0xDu: - v124 = 86; - a4 = (int)pGlobalTXT_LocalizationStrings[609]; - break; - case 0xEu: - v124 = 17; - a4 = (int)pGlobalTXT_LocalizationStrings[279]; - break; - case 0xFu: - v124 = 38; - a4 = (int)pGlobalTXT_LocalizationStrings[442]; - break; - case 0x10u: - v124 = 46; - a4 = (int)pGlobalTXT_LocalizationStrings[443]; - break; - case 0x11u: - v124 = 51; - a4 = (int)pGlobalTXT_LocalizationStrings[440]; - break; - case 0x12u: - v124 = 5; - a4 = (int)pGlobalTXT_LocalizationStrings[441]; - break; - case 0x13u: - v124 = 95; - a4 = (int)pGlobalTXT_LocalizationStrings[229]; - break; - case 0x14u: - v124 = 73; - a4 = (int)pGlobalTXT_LocalizationStrings[228]; - break; - default: - a4 = 0; - break; - } - if ( a4 ) - { - v54 = (char *)a4; - v55 = GetSpellColor(v124); - window->DrawText(pFontSmallnum, 28, LOBYTE(pFontSmallnum->uFontHeight) + 193, v55, v54, 0, 0, 0); - v50 = (LOBYTE(pFontSmallnum->uFontHeight) + 193) + *(char *)((int)pFontSmallnum + 5) - 3; - v51 = v120; - } - } + pText = ""; + pTextHeight = LOBYTE(pFontSmallnum->uFontHeight) + 193; + for ( uint i = 1; i <= 21; ++i ) + { + if ( pActors[uActorID].pActorBuffs[i].uExpireTime > 0 ) + { + switch ( i - 1 ) + { + case 0: + pTextColorID = 60; + pText = pGlobalTXT_LocalizationStrings[591];//Charmed + break; + case 1: + pTextColorID = 82; + pText = pGlobalTXT_LocalizationStrings[649];//Summoned + break; + case 2: + pTextColorID = 92; + pText = pGlobalTXT_LocalizationStrings[592];//Shrunk + break; + case 3: + pTextColorID = 63; + pText = pGlobalTXT_LocalizationStrings[4];//Afraid + break; + case 4: + pText = pGlobalTXT_LocalizationStrings[220];//Stoned + pTextColorID = 81; + break; + case 5: + pText = pGlobalTXT_LocalizationStrings[162];//Paralyzed + pTextColorID = 81; + break; + case 6: + pText = pGlobalTXT_LocalizationStrings[593];//Slowed + pTextColorID = 35; + break; + case 8: + pText = pGlobalTXT_LocalizationStrings[608];//Berserk + pTextColorID = 62; + break; + case 7: + case 9: + pText = ""; + pTextColorID = 0; + continue; + case 10: + pTextColorID = 47; + pText = pGlobalTXT_LocalizationStrings[221];//Fate + break; + case 11: + pTextColorID = 66; + pText = pGlobalTXT_LocalizationStrings[607];//Enslaved + break; + case 12: + pTextColorID = 85; + pText = pGlobalTXT_LocalizationStrings[610];//Day of Protection + break; + case 13: + pTextColorID = 86; + pText = pGlobalTXT_LocalizationStrings[609];//Hour of Power + break; + case 14: + pTextColorID = 17; + pText = pGlobalTXT_LocalizationStrings[279];//Shield + break; + case 15: + pTextColorID = 38; + pText = pGlobalTXT_LocalizationStrings[442];//Stoneskin + break; + case 16: + pTextColorID = 46; + pText = pGlobalTXT_LocalizationStrings[443];//Bless + break; + case 17: + pTextColorID = 51; + pText = pGlobalTXT_LocalizationStrings[440];//Heroism + break; + case 18: + pTextColorID = 5; + pText = pGlobalTXT_LocalizationStrings[441];//Haste + break; + case 19: + pTextColorID = 95; + pText = pGlobalTXT_LocalizationStrings[229];//Pain Reflection + break; + case 20: + pTextColorID = 73; + pText = pGlobalTXT_LocalizationStrings[228];//Hammerhands + break; + default: + pText = ""; + break; + } + if ( pText != "" ) + { + window->DrawText(pFontSmallnum, 28, pTextHeight, GetSpellColor(pTextColorID), pText, 0, 0, 0); + pTextHeight = pTextHeight + *(char *)((int)pFontSmallnum + 5) - 3; + } + } + } + if ( pText == "" ) + window->DrawText(pFontSmallnum, 28, pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[153], 0, 0, 0);//Нет + } - ++v51; - v222 = v222 + 1; - v120 = v51; - - __debugbreak(); // fix condition - } - //while ( (signed int)((char *)&v222->lpVtbl + 1) < 22 ); - while (true); - - if ( !a4 ) - window->DrawText(pFontSmallnum, 28, v50, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[153], 0, 0, 0); - } - v56 = pFontSmallnum; - a4 = v106.uViewportY; - if ( v119 ) + if ( normal_level ) { sprintf(pTmpBuf.data(), "%s\f%05u\t100%d\n", pGlobalTXT_LocalizationStrings[108], 0, pActors[uActorID].pMonsterInfo.uHP); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - a4 = a4 + LOBYTE(v56->uFontHeight) - 3; - v79 = pActors[uActorID].pMonsterInfo.uAC; - v75 = 0; - v70 = pGlobalTXT_LocalizationStrings[12]; - v67 = "%s\f%05u\t100%d\n"; + window->DrawText(pFontSmallnum, 150, (int)v106.uViewportY, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = v106.uViewportY + LOBYTE(pFontSmallnum->uFontHeight) - 3; + sprintf(pTmpBuf.data(), "%s\f%05u\t100%d\n", pGlobalTXT_LocalizationStrings[12], 0, pActors[uActorID].pMonsterInfo.uAC);//Armor Class } else { - sprintf(pTmpBuf.data(), "%s\f%05u\t100%s\n", pGlobalTXT_LocalizationStrings[108], 0, pGlobalTXT_LocalizationStrings[630]); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v79 = (unsigned int)pGlobalTXT_LocalizationStrings[630]; - v75 = 0; - v70 = pGlobalTXT_LocalizationStrings[12]; - a4 = a4 + LOBYTE(v56->uFontHeight) - 3; - v67 = "%s\f%05u\t100%s\n"; + sprintf(pTmpBuf.data(), "%s\f%05u\t100%s\n", pGlobalTXT_LocalizationStrings[108], 0, pGlobalTXT_LocalizationStrings[630]);//? + window->DrawText(pFontSmallnum, 150, (int)v106.uViewportY, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = v106.uViewportY + LOBYTE(pFontSmallnum->uFontHeight) - 3; + sprintf(pTmpBuf.data(), "%s\f%05u\t100%s\n", pGlobalTXT_LocalizationStrings[12], 0, (unsigned int)pGlobalTXT_LocalizationStrings[630]);//? } - sprintf(pTmpBuf.data(), v67, v70, v75, v79); - window->DrawText(v56, 150, a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - a4 = a4 + LOBYTE(v56->uFontHeight) - 6 + LOBYTE(v56->uFontHeight); - v95[0] = pGlobalTXT_LocalizationStrings[87]; - v95[1] = pGlobalTXT_LocalizationStrings[6]; - v95[2] = pGlobalTXT_LocalizationStrings[240]; - v95[3] = pGlobalTXT_LocalizationStrings[70]; - v95[4] = pGlobalTXT_LocalizationStrings[624]; - v95[5] = pGlobalTXT_LocalizationStrings[138]; - v95[6] = pGlobalTXT_LocalizationStrings[214]; - v95[7] = pGlobalTXT_LocalizationStrings[142]; - v95[8] = pGlobalTXT_LocalizationStrings[29]; - v95[9] = pGlobalTXT_LocalizationStrings[133]; - v95[10] = pGlobalTXT_LocalizationStrings[54]; - if ( v116 ) + window->DrawText(pFontSmallnum, 150, pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 6 + LOBYTE(pFontSmallnum->uFontHeight); + + content[0] = pGlobalTXT_LocalizationStrings[87]; + content[1] = pGlobalTXT_LocalizationStrings[6]; + content[2] = pGlobalTXT_LocalizationStrings[240]; + content[3] = pGlobalTXT_LocalizationStrings[70]; + content[4] = pGlobalTXT_LocalizationStrings[624]; + content[5] = pGlobalTXT_LocalizationStrings[138]; + content[6] = pGlobalTXT_LocalizationStrings[214]; + content[7] = pGlobalTXT_LocalizationStrings[142]; + content[8] = pGlobalTXT_LocalizationStrings[29]; + content[9] = pGlobalTXT_LocalizationStrings[133]; + content[10] = pGlobalTXT_LocalizationStrings[54]; + + if ( expert_level ) { - sprintf(pTmpBuf.data(), "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[18], 0, v95[pActors[uActorID].pMonsterInfo.uAttack1Type]); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - a4 = a4 + LOBYTE(v56->uFontHeight) - 3; - v57 = pActors[uActorID].pMonsterInfo.uAttack1DamageBonus; - if ( v57 ) + sprintf(pTmpBuf.data(), "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[18], 0, content[pActors[uActorID].pMonsterInfo.uAttack1Type]);//Attack + window->DrawText(pFontSmallnum, 150, (int)pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; + if ( pActors[uActorID].pMonsterInfo.uAttack1DamageBonus ) sprintf(pTmpBuf.data(), "%s\f%05u\t080%dd%d+%d\n", pGlobalTXT_LocalizationStrings[53], - 0, pActors[uActorID].pMonsterInfo.uAttack1DamageDiceRolls, pActors[uActorID].pMonsterInfo.uAttack1DamageDiceSides, v57); + 0, pActors[uActorID].pMonsterInfo.uAttack1DamageDiceRolls, pActors[uActorID].pMonsterInfo.uAttack1DamageDiceSides, pActors[uActorID].pMonsterInfo.uAttack1DamageBonus); else sprintf(pTmpBuf.data(), "%s\f%05u\t080%dd%d\n", pGlobalTXT_LocalizationStrings[53], 0, pActors[uActorID].pMonsterInfo.uAttack1DamageDiceRolls, pActors[uActorID].pMonsterInfo.uAttack1DamageDiceSides); @@ -979,124 +917,101 @@ else { sprintf(pTmpBuf.data(), "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[18], 0, pGlobalTXT_LocalizationStrings[630]); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - a4 = a4 + LOBYTE(v56->uFontHeight) - 3; + window->DrawText(pFontSmallnum, 150, (int)pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; sprintf(pTmpBuf.data(), "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[53], 0, pGlobalTXT_LocalizationStrings[630]); } - window->DrawText(v56, 150, a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v58 = LOBYTE(v56->uFontHeight); - a4 = a4 + v58 - 6 + v58; - if ( !i ) + window->DrawText(pFontSmallnum, 150, pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 6 + LOBYTE(pFontSmallnum->uFontHeight); + + if ( !master_level ) { - v80 = pGlobalTXT_LocalizationStrings[630]; - v76 = 0; - v71 = pGlobalTXT_LocalizationStrings[628]; - v68 = "%s\f%05u\t080%s\n"; - sprintf(pTmpBuf.data(), v68, v71, v76, v80); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v58 = LOBYTE(v56->uFontHeight); - a4 = a4 + v58 - 3; + sprintf(pTmpBuf.data(), "%s\f%05u\t080%s\n", pGlobalTXT_LocalizationStrings[628], 0, pGlobalTXT_LocalizationStrings[630]);//"Spell" "?" + window->DrawText(pFontSmallnum, 150, (int)pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; } else { - v120 = (SpellBuff *)pGlobalTXT_LocalizationStrings[628]; - v59 = &pActors[uActorID]; - v114 = pActors[uActorID].pMonsterInfo.uSpell1ID; - if ( v114 && pActors[uActorID].pMonsterInfo.uSpell2ID ) - v120 = (SpellBuff *)pGlobalTXT_LocalizationStrings[629]; - if ( v114 ) - { - sprintf(pTmpBuf.data(), "%s\f%05u\t060%s\n", v120, 0, pSpellStats->pInfos[v114].pShortName); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v58 = LOBYTE(v56->uFontHeight); - a4 = a4 + v58 - 3; - v59 = &pActors[uActorID]; - } - v60 = v59->pMonsterInfo.uSpell2ID; - if ( v60 ) - { - sprintf(pTmpBuf.data(), "\f%05u\t060%s\n", 0, pSpellStats->pInfos[v60].pShortName); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v58 = LOBYTE(v56->uFontHeight); - a4 = a4 + v58 - 3; - v59 = &pActors[uActorID]; - } - if ( !v59->pMonsterInfo.uSpell1ID && !v59->pMonsterInfo.uSpell2ID ) - { - v80 = pGlobalTXT_LocalizationStrings[153]; - v76 = 0; - v71 = pGlobalTXT_LocalizationStrings[628]; - v68 = "%s\f%05u\t060%s\n"; - sprintf(pTmpBuf.data(), v68, v71, v76, v80); - window->DrawText(v56, 150, (int)a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v58 = LOBYTE(v56->uFontHeight); - a4 = a4 + v58 - 3; - } + pText = pGlobalTXT_LocalizationStrings[628];//Spell + if ( pActors[uActorID].pMonsterInfo.uSpell1ID && pActors[uActorID].pMonsterInfo.uSpell2ID ) + pText = pGlobalTXT_LocalizationStrings[629];//Spells + if ( pActors[uActorID].pMonsterInfo.uSpell1ID ) + { + sprintf(pTmpBuf.data(), "%s\f%05u\t070%s\n", pText, 0, pSpellStats->pInfos[pActors[uActorID].pMonsterInfo.uSpell1ID].pShortName); + window->DrawText(pFontSmallnum, 150, (int)pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; + } + if ( pActors[uActorID].pMonsterInfo.uSpell2ID ) + { + sprintf(pTmpBuf.data(), "\f%05u\t070%s\n", 0, pSpellStats->pInfos[pActors[uActorID].pMonsterInfo.uSpell2ID].pShortName); + window->DrawText(pFontSmallnum, 150, (int)pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; + } + if ( !pActors[uActorID].pMonsterInfo.uSpell1ID && !pActors[uActorID].pMonsterInfo.uSpell2ID ) + { + sprintf(pTmpBuf.data(), "%s\f%05u\t070%s\n", pGlobalTXT_LocalizationStrings[628], 0, pGlobalTXT_LocalizationStrings[153]); + window->DrawText(pFontSmallnum, 150, (int)pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; + } } - a4 = a4 + v58 - 3; - window->DrawText(v56, 150, a4, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[626], 0, 0, 0); - a4 = a4 + LOBYTE(v56->uFontHeight) - 3; - v85[0] = pGlobalTXT_LocalizationStrings[87]; - v85[1] = pGlobalTXT_LocalizationStrings[6]; - v85[2] = pGlobalTXT_LocalizationStrings[240]; - v85[3] = pGlobalTXT_LocalizationStrings[70]; - v85[4] = pGlobalTXT_LocalizationStrings[142]; - v85[5] = pGlobalTXT_LocalizationStrings[214]; - v85[6] = pGlobalTXT_LocalizationStrings[29]; - v85[7] = pGlobalTXT_LocalizationStrings[133]; - v85[8] = pGlobalTXT_LocalizationStrings[54]; - v85[9] = pGlobalTXT_LocalizationStrings[624]; - v95[1] = (char *)pActors[uActorID].pMonsterInfo.uResFire; - v95[2] = (char *)pActors[uActorID].pMonsterInfo.uResAir; - v95[3] = (char *)pActors[uActorID].pMonsterInfo.uResWater; - v95[4] = (char *)pActors[uActorID].pMonsterInfo.uResEarth; - v95[5] = (char *)pActors[uActorID].pMonsterInfo.uResMind; - v95[6] = (char *)pActors[uActorID].pMonsterInfo.uResSpirit; - v95[7] = (char *)pActors[uActorID].pMonsterInfo.uResBody; - v95[8] = (char *)pActors[uActorID].pMonsterInfo.uResLight; - v95[9] = (char *)pActors[uActorID].pMonsterInfo.uResPhysical; - v95[10] = (char *)pActors[uActorID].pMonsterInfo.uResDark; - if ( v112 ) + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; + window->DrawText(pFontSmallnum, 150, pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pGlobalTXT_LocalizationStrings[626], 0, 0, 0);//Immune + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; + + string_name[0] = pGlobalTXT_LocalizationStrings[87];//Fire + string_name[1] = pGlobalTXT_LocalizationStrings[6];//Air + string_name[2] = pGlobalTXT_LocalizationStrings[240]; + string_name[3] = pGlobalTXT_LocalizationStrings[70]; + string_name[4] = pGlobalTXT_LocalizationStrings[142]; + string_name[5] = pGlobalTXT_LocalizationStrings[214]; + string_name[6] = pGlobalTXT_LocalizationStrings[29]; + string_name[7] = pGlobalTXT_LocalizationStrings[133]; + string_name[8] = pGlobalTXT_LocalizationStrings[54]; + string_name[9] = pGlobalTXT_LocalizationStrings[624]; + + content[0] = (char *)pActors[uActorID].pMonsterInfo.uResFire; + content[1] = (char *)pActors[uActorID].pMonsterInfo.uResAir; + content[2] = (char *)pActors[uActorID].pMonsterInfo.uResWater; + content[3] = (char *)pActors[uActorID].pMonsterInfo.uResEarth; + content[4] = (char *)pActors[uActorID].pMonsterInfo.uResMind; + content[5] = (char *)pActors[uActorID].pMonsterInfo.uResSpirit; + content[6] = (char *)pActors[uActorID].pMonsterInfo.uResBody; + content[7] = (char *)pActors[uActorID].pMonsterInfo.uResLight; + content[8] = (char *)pActors[uActorID].pMonsterInfo.uResPhysical; + content[9] = (char *)pActors[uActorID].pMonsterInfo.uResDark; + + if ( grandmaster_level ) { - v124 = 0; - do + for ( uint i = 0; i < 10; i++ ) { - v62 = v95[v124+1]; - if ( v62 == (char *)200 ) + if ( content[i] == (char *)200 ) { - v81 = pGlobalTXT_LocalizationStrings[625]; + pText = pGlobalTXT_LocalizationStrings[625];//Immune } else { - if ( v62 ) - v81 = pGlobalTXT_LocalizationStrings[627]; + if ( content[i] ) + pText = pGlobalTXT_LocalizationStrings[627];//Resistant else - v81 = pGlobalTXT_LocalizationStrings[153]; + pText = pGlobalTXT_LocalizationStrings[153];//None } - sprintf(pTmpBuf.data(), "%s\f%05u\t070%s\n", v85[v124], 0, v81); - window->DrawText(v56, 170, a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v63 = LOBYTE(v56->uFontHeight); - v124 += 4; - a4 = a4 + v63 - 3; + sprintf(pTmpBuf.data(), "%s\f%05u\t070%s\n", string_name[i], 0, pText); + window->DrawText(pFontSmallnum, 170, pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; } - while ( v124 < 40 ); } else { - i = 0; - do + for ( uint i = 0; i < 10; ++i ) { - sprintf(pTmpBuf.data(), "%s\f%05u\t070%s\n", v85[i], 0, pGlobalTXT_LocalizationStrings[630]); // "?" - window->DrawText(v56, 170, a4, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); - v65 = LOBYTE(v56->uFontHeight); - ++i; - a4 = a4 + v65 - 3; + sprintf(pTmpBuf.data(), "%s\f%05u\t070%s\n", string_name[i], 0, pGlobalTXT_LocalizationStrings[630]); // "?" + window->DrawText(pFontSmallnum, 170, pTextHeight, TargetColor(0xE1u, 255, 0x9Bu), pTmpBuf.data(), 0, 0, 0); + pTextHeight = pTextHeight + LOBYTE(pFontSmallnum->uFontHeight) - 3; } - while ( i < 10 ); } if ( (signed __int64)pParty->pPartyBuffs[PARTY_BUFF_DETECT_LIFE].uExpireTime > 0 ) { - sprintf(pTmpBuf.data(), "%s: %d", pGlobalTXT_LocalizationStrings[650], pActors[uActorID].sCurrentHP); + sprintf(pTmpBuf.data(), "%s: %d", pGlobalTXT_LocalizationStrings[650], pActors[uActorID].sCurrentHP);//Current Hit Points pFontSmallnum->GetLineWidth(pTmpBuf.data()); window->DrawTitleText(pFontSmallnum, 0, window->uFrameHeight - LOBYTE(pFontSmallnum->uFontHeight) - 12, 0, pTmpBuf.data(), 3); } diff -r 69efd5d1ab5c -r c70d526669ec Viewport.cpp --- a/Viewport.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/Viewport.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -287,7 +287,7 @@ if ( !(pObjectList->pObjects[pSpriteObjects[v21].uObjectDescID].uFlags & 0x10) && a2.y < 1000 && pSpriteObjects[v21].uObjectDescID && (unsigned int)v0 < 0x2000000 ) { - if ( pItemsTable->pItems[pSpriteObjects[v21].stru_24.uItemID].uEquipType == 18 ) + if ( pSpriteObjects[v21].stru_24.GetItemEquipType() == 18 ) { party_finds_gold(pSpriteObjects[v21].stru_24.uSpecEnchantmentType, 0); viewparams->bRedrawGameUI = 1; @@ -342,7 +342,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); @@ -396,7 +396,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); @@ -445,7 +445,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); @@ -531,7 +531,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); @@ -597,7 +597,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); @@ -650,7 +650,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); @@ -700,7 +700,7 @@ extern int UnprojectX(int); v9 = UnprojectX(v1->x); a1.Create(pParty->sRotationY + v9, 184, 200, 0); - pTextureID = pIcons_LOD->LoadTexture(pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); + pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE); if (pTextureID != -1) pIcons_LOD->pTextures[pTextureID].Release(); pMouse->RemoveHoldingItem(); diff -r 69efd5d1ab5c -r c70d526669ec mm7_2.cpp --- a/mm7_2.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/mm7_2.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -4295,6 +4295,10 @@ int window_total_width = client_width + window_borders_width, window_total_height = client_height + window_borders_height; + + if (GetMenu(hwnd)) + window_total_height += GetSystemMetrics(SM_CYMENU); + MoveWindow(hWnd, (GetSystemMetrics(SM_CXSCREEN) - window_total_width) / 2, (GetSystemMetrics(SM_CYSCREEN) - window_total_height) / 2, window_total_width, @@ -5111,6 +5115,7 @@ bool MM_Main(const wchar_t *pCmdLine) { IntegrityTest(); + char test[1024]; sprintfex(test, "^Pi[%s]: знахар^R[ь;ка;]", "Золтан"); diff -r 69efd5d1ab5c -r c70d526669ec mm7_4.cpp --- a/mm7_4.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/mm7_4.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -3640,23 +3640,23 @@ { case BuildingType_WeaponShop: { - test = pItemsTable->pItems[item->uItemID].uEquipType <= 2; + test = item->GetItemEquipType() <= 2; break; } case BuildingType_ArmorShop: { - test = pItemsTable->pItems[item->uItemID].uEquipType >= 3; + test = item->GetItemEquipType() >= 3; break; } case BuildingType_MagicShop: { - test = pItemsTable->pItems[item->uItemID].uSkillType == 38 || pItemsTable->pItems[item->uItemID].uEquipType == 16; + test = item->GetPlayerSkillType() == 38 || item->GetItemEquipType() == 16; break; } case BuildingType_AlchemistShop: { - test = pItemsTable->pItems[item->uItemID].uEquipType == 13 || pItemsTable->pItems[item->uItemID].uEquipType == 14 - || (pItemsTable->pItems[item->uItemID].uEquipType > 14 && !(pItemsTable->pItems[item->uItemID].uEquipType != 17 + test = item->GetItemEquipType() == 13 || item->GetItemEquipType() == 14 + || (item->GetItemEquipType() > 14 && !(item->GetItemEquipType() != 17 || (signed int)item->uItemID < 740) && item->uItemID != 771); break; } diff -r 69efd5d1ab5c -r c70d526669ec mm7_5.cpp --- a/mm7_5.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/mm7_5.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -5030,7 +5030,7 @@ item->uItemID < ITEM_POTION_CATALYST && // cant recharge item->uItemID > ITEM_POTION_REJUVENATION) // all potions { - if (pItemsTable->pItems[item->uItemID].uEquipType != EQUIP_WAND) // can recharge only wands + if (item->GetItemEquipType() != EQUIP_WAND) // can recharge only wands { pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); return; @@ -5058,11 +5058,11 @@ { if (item->IsBroken() || // cant harden broken items item->uItemID >= ITEM_ARTIFACT_PUCK || // cant harden artifacts - pItemsTable->pItems[item->uItemID].uEquipType < EQUIP_OFF_HAND || - pItemsTable->pItems[item->uItemID].uEquipType > EQUIP_WAND) + item->GetItemEquipType() < EQUIP_OFF_HAND || + item->GetItemEquipType() > EQUIP_WAND) goto __invalid_item; - item->uAttributes |= ITEM_AURA_EFFECT_RED | ITEM_ENCHANTED; + item->uAttributes |= ITEM_AURA_EFFECT_RED | ITEM_HARDENED; _50C9A8_item_enchantment_timer = 256; pMouse->RemoveHoldingItem(); @@ -5085,7 +5085,7 @@ item->IsBroken() || item->uSpecEnchantmentType || item->uEnchantmentType || - pItemsTable->pItems[item->uItemID].uEquipType >= EQUIP_ARMOUR) // only melee weapons and bows + item->GetItemEquipType() >= EQUIP_ARMOUR) // only melee weapons and bows goto __invalid_item; item->UpdateTempBonus(pParty->uTimePlayed); @@ -5326,7 +5326,7 @@ // end alchemy - player->pInventoryItemList[item_pid].uEnchantmentType = v9 + pItemsTable->pItems[pParty->pPickedItem.uItemID].uDamageDice; + player->pInventoryItemList[item_pid].uEnchantmentType = v9 + pParty->pPickedItem.GetDamageDice(); switch ( pParty->pPickedItem.uItemID ) { case 0xC8u: diff -r 69efd5d1ab5c -r c70d526669ec mm7_6.cpp --- a/mm7_6.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/mm7_6.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -251,7 +251,7 @@ } else { - if ( pItemsTable->pItems[pActor->array_000234[3].uItemID].uEquipType == 18 ) + if ( pActor->array_000234[3].GetItemEquipType() == 18 ) { v14 = pActor->array_000234[3].uSpecEnchantmentType; pActor->array_000234[3].Reset(); @@ -275,10 +275,10 @@ ShowStatusBarString(pTmpBuf2.data(), 2u); v4 = Dst.uItemID; v5 = Dst.uItemID; - if ( pItemsTable->pItems[Dst.uItemID].uEquipType == 12 ) + if ( Dst.GetItemEquipType() == 12 ) { v5 = Dst.uItemID; - v6 = rand() % 6 + pItemsTable->pItems[Dst.uItemID].uDamageMod + 1; + v6 = rand() % 6 + Dst.GetDamageMod() + 1; Dst.uNumCharges = v6; Dst.uMaxCharges = v6; v4 = Dst.uItemID; @@ -1103,7 +1103,7 @@ { //v28b = &v1->pInventoryItems[v4].uItemID; //v6 = v1->pInventoryItems[v4].uItemID;//*((int *)v5 + 124); - if (pItemsTable->pItems[item->uItemID].uEquipType == EQUIP_WAND) + if (item->GetItemEquipType() == EQUIP_WAND) { if (item->uNumCharges <= 0) player->pEquipment.uMainHand = 0; // wand discharged - unequip @@ -1213,7 +1213,7 @@ { int main_hand_idx = player->pEquipment.uMainHand; if (player->HasItemEquipped(EQUIP_MAIN_HAND)) - v34 = pItemsTable->pItems[*(int *)&player->pInventoryItemList[main_hand_idx - 1]].uSkillType; + v34 = player->pInventoryItemList[main_hand_idx - 1].GetPlayerSkillType(); pTurnEngine->ApplyPlayerAction(); } diff -r 69efd5d1ab5c -r c70d526669ec mm7_data.h --- a/mm7_data.h Tue Sep 24 23:18:38 2013 +0600 +++ b/mm7_data.h Tue Sep 24 23:18:57 2013 +0600 @@ -4,6 +4,7 @@ #include "OSAPI.h" #include #include +#include "NZIArray.h" typedef char _UNKNOWN; typedef unsigned int uint; @@ -283,44 +284,6 @@ return uint64(x) > uint64(x+y); } -template -class NZIArray : std::array<_Ty, _Size> -{ -public: - reference ZerothIndex() - { - return std::array<_Ty, _Size>::operator [](0); - } - - reference operator[](size_type _Pos) - { // subscript nonmutable sequence -#if _ITERATOR_DEBUG_LEVEL == 2 - assert(_Pos != 0 && "not allowed to access zeroth element"); - -#elif _ITERATOR_DEBUG_LEVEL == 1 - _SCL_SECURE_VALIDATE_RANGE(_Pos != 0); -#endif /* _ITERATOR_DEBUG_LEVEL */ - - __analysis_assume(_Pos != 0); - - return std::array<_Ty, _Size>::operator [](_Pos); - } - - const_reference operator[](size_type _Pos) const - { // subscript nonmutable sequence -#if _ITERATOR_DEBUG_LEVEL == 2 - assert(_Pos != 0 && "not allowed to access zeroth element"); - -#elif _ITERATOR_DEBUG_LEVEL == 1 - _SCL_SECURE_VALIDATE_RANGE(_Pos != 0); -#endif /* _ITERATOR_DEBUG_LEVEL */ - - __analysis_assume(_Pos != 0); - - return std::array<_Ty, _Size>::operator [](_Pos); - } -}; //------------------------------------------------------------------------- // Data declarations diff -r 69efd5d1ab5c -r c70d526669ec stru6.cpp --- a/stru6.cpp Tue Sep 24 23:18:38 2013 +0600 +++ b/stru6.cpp Tue Sep 24 23:18:57 2013 +0600 @@ -918,7 +918,7 @@ if ( result < 545 ) { - __debugbreak(); // find out what kind of spells are these + //__debugbreak(); // find out what kind of spells are these // when summoned light elemental attacks //cast spell from trees in Avlee result -= 500;