# HG changeset patch # User Nomad # Date 1379970007 -7200 # Node ID be43171d7bc62cefeee5b7b9a9f5484798133ae3 # Parent 7153ee05d088304049e2b8a2ce56b12979f32435# Parent a395359afc8f6055bf516a988cffd6fe73509c74 Merge diff -r 7153ee05d088 -r be43171d7bc6 Actor.h --- a/Actor.h Mon Sep 23 22:58:32 2013 +0200 +++ b/Actor.h Mon Sep 23 23:00:07 2013 +0200 @@ -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 7153ee05d088 -r be43171d7bc6 Indoor.cpp --- a/Indoor.cpp Mon Sep 23 22:58:32 2013 +0200 +++ b/Indoor.cpp Mon Sep 23 23:00:07 2013 +0200 @@ -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 7153ee05d088 -r be43171d7bc6 Player.cpp --- a/Player.cpp Mon Sep 23 22:58:32 2013 +0200 +++ b/Player.cpp Mon Sep 23 23:00:07 2013 +0200 @@ -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 diff -r 7153ee05d088 -r be43171d7bc6 UI/UICharacter.cpp --- a/UI/UICharacter.cpp Mon Sep 23 22:58:32 2013 +0200 +++ b/UI/UICharacter.cpp Mon Sep 23 23:00:07 2013 +0200 @@ -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 7153ee05d088 -r be43171d7bc6 UI/UIGuilds.cpp --- a/UI/UIGuilds.cpp Mon Sep 23 22:58:32 2013 +0200 +++ b/UI/UIGuilds.cpp Mon Sep 23 23:00:07 2013 +0200 @@ -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 7153ee05d088 -r be43171d7bc6 UI/UIPopup.cpp --- a/UI/UIPopup.cpp Mon Sep 23 22:58:32 2013 +0200 +++ b/UI/UIPopup.cpp Mon Sep 23 23:00:07 2013 +0200 @@ -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; @@ -153,7 +153,6 @@ //try to identify if (!inspect_item->IsIdentified()) { - //v11 = inspect_item; if ( pPlayers[uActiveCharacter]->CanIdentify(inspect_item) == 1 ) inspect_item->SetIdentified(); v83 = SPEECH_9; @@ -332,7 +331,6 @@ 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; @@ -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 7153ee05d088 -r be43171d7bc6 stru6.cpp --- a/stru6.cpp Mon Sep 23 22:58:32 2013 +0200 +++ b/stru6.cpp Mon Sep 23 23:00:07 2013 +0200 @@ -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;