Mercurial > mm7
diff mm7_5.cpp @ 223:1bd823f52e3a
Merge
author | Gloval |
---|---|
date | Sun, 17 Feb 2013 11:41:44 +0400 |
parents | 8113753ed2ae 0c64754c7fd4 |
children | c879446b4a22 0df4136b6aac 24de34910d3e |
line wrap: on
line diff
--- a/mm7_5.cpp Sun Feb 17 11:29:10 2013 +0400 +++ b/mm7_5.cpp Sun Feb 17 11:41:44 2013 +0400 @@ -69,9 +69,9 @@ unsigned int v2; // edx@7 Actor *pActor; // ecx@13 int v4; // ecx@18 - NPCData *pNPCData0; // eax@18 - int v6; // edx@20 - int v7; // ecx@29 + //NPCData *pNPCData0; // eax@18 + //int v6; // edx@20 + //int v7; // ecx@29 unsigned int v8; // edx@59 unsigned int v9; // ecx@60 unsigned int v10; // ecx@73 @@ -244,7 +244,7 @@ const char *v177; // [sp+0h] [bp-5FCh]@629 char *v178; // [sp+0h] [bp-5FCh]@637 int v179; // [sp+4h] [bp-5F8h]@0 - signed int _this; // [sp+14h] [bp-5E8h]@22 + //signed int _this; // [sp+14h] [bp-5E8h]@22 signed int thisa; // [sp+14h] [bp-5E8h]@251 signed int thisb; // [sp+14h] [bp-5E8h]@272 Player *pPlayer7; // [sp+14h] [bp-5E8h]@373 @@ -333,50 +333,56 @@ //goto _actor_init_dlg; pActor->InitializeDialogue(v0); continue; - case UIMSG_86: - case UIMSG_87: - if ( bNoNPCHiring != 1 && !pCurrentScreen ) - { + case UIMSG_StartHireling1Dialogue: + case UIMSG_StartHireling2Dialogue: + { + if (bNoNPCHiring || pCurrentScreen) + continue; + if ( pMessageQueue_50CBD0->uNumMessages ) pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; uAction = 0; - uNumSeconds = uMessage - 134; + int hireling_idx = uMessage - UIMSG_StartHireling1Dialogue; v4 = 0; - pNPCData0 = pParty->pHirelings; - do - { - if ( pNPCData0->pName ) - { - v6 = uAction++; - pTmpBuf[v6] = v4; - } - ++pNPCData0; - ++v4; - } - while ( (signed int)pNPCData0 < (signed int)&pParty->pPickedItem ); - _this = 0; - if ( (signed int)pNPCStats->uNumNewNPCs > 0 ) - { - pNPCData4 = pNPCStats->pNewNPCData; - do - { - if ( pNPCData4->uFlags & 0x80 - && (!pParty->pHirelings[0].pName || strcmp(pNPCData4->pName, pParty->pHirelings[0].pName)) - && (!pParty->pHirelings[1].pName || strcmp(pNPCData4->pName, pParty->pHirelings[1].pName)) ) + + for (uint i = 0; i < 2; ++i) + //pNPCData0 = pParty->pHirelings; + //do + { + if (pParty->pHirelings[i].pName) + //{ + //v6 = uAction++; + pTmpBuf[uAction++] = i; + //} + //++pNPCData0; + //++v4; + } + //while ( (signed int)pNPCData0 < (signed int)&pParty->pPickedItem ); + + //_this = 0; + for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i) + { + auto npc = pNPCStats->pNewNPCData + i; + //do + //{ + if (npc->uFlags & 0x80 && + (!pParty->pHirelings[0].pName || strcmp(npc->pName, pParty->pHirelings[0].pName)) && + (!pParty->pHirelings[1].pName || strcmp(npc->pName, pParty->pHirelings[1].pName)) ) { - v7 = uAction++; - pTmpBuf[v7] = _this + 2; + //v7 =; + pTmpBuf[uAction++] = i + 2; } - ++_this; - ++pNPCData4; - } - while ( _this < (signed int)pNPCStats->uNumNewNPCs ); - } - if ( (signed int)(uNumSeconds + (unsigned __int8)pParty->field_709) < uAction ) + //++_this; + //++pNPCData4; + //} + //while ( _this < (signed int)pNPCStats->uNumNewNPCs ); + } + + if ( (signed int)(hireling_idx + (unsigned __int8)pParty->field_709) < uAction ) { //Actor::Actor(&actor); memset(&actor, 0, 0x344u); - actor.uNPC_ID += -1 - (unsigned __int8)pParty->field_709 - uNumSeconds; + actor.uNPC_ID += -1 - (unsigned __int8)pParty->field_709 - hireling_idx; pActor = &actor; //_actor_init_dlg: pActor->InitializeDialogue(v0); @@ -2962,7 +2968,7 @@ case UIMSG_4E: if ( dword_50654C && byte_506550 ) { - v173 = pSpellStats->pInfos[dword_50654C + 11 * pPlayers[uActiveCharacter]->pNumSpellBookPage].pName; + v173 = pSpellStats->pInfos[dword_50654C + 11 * pPlayers[uActiveCharacter]->lastOpenedSpellbookPage].pName; v157 = pGlobalTXT_LocalizationStrings[483]; _sprintex_2args_draw_status_and_continue: sprintf(pTmpBuf, v157, v173); @@ -3019,7 +3025,7 @@ v127 = 203; goto _play_sound_and_continue; } - v99 = dword_50654C + 11 * pPlayers[uActiveCharacter]->pNumSpellBookPage; + v99 = dword_50654C + 11 * pPlayers[uActiveCharacter]->lastOpenedSpellbookPage; pPlayers[uActiveCharacter]->uQuickSpell = v99; stru_A750F8[uActiveCharacter + 3]._494836(v99, uActiveCharacter); if ( uActiveCharacter ) @@ -3038,7 +3044,7 @@ { if ( *(short *)thisl ) { - if ( pPlayer3->pNumSpellBookPage == v101 ) + if ( pPlayer3->lastOpenedSpellbookPage == v101 ) uAction = (int)pNPCData4; v102 = (int)pNPCData4; pNPCData4 = (NPCData *)((char *)pNPCData4 + 1); @@ -3073,7 +3079,7 @@ uAction = 0; } sub_41140B(); - pPlayers[uActiveCharacter]->pNumSpellBookPage = LOBYTE(v217[uAction]); + pPlayers[uActiveCharacter]->lastOpenedSpellbookPage = LOBYTE(v217[uAction]); pGUIWindow_CurrentMenu->OpenSpellBook(); v165 = 0; v151 = 0; @@ -3085,10 +3091,10 @@ v127 = rand() % 2 + 204; goto _play_sound_and_continue; case UIMSG_57: - if ( pTurnEngine->field_4 == 3 || !uActiveCharacter || uMessageParam == pPlayers[uActiveCharacter]->pNumSpellBookPage ) + if ( pTurnEngine->field_4 == 3 || !uActiveCharacter || uMessageParam == pPlayers[uActiveCharacter]->lastOpenedSpellbookPage ) continue; sub_41140B(); - pPlayers[uActiveCharacter]->pNumSpellBookPage = uMessageParam; + pPlayers[uActiveCharacter]->lastOpenedSpellbookPage = uMessageParam; pGUIWindow_CurrentMenu->OpenSpellBook(); v165 = 0; v151 = 0; @@ -3619,7 +3625,7 @@ //LABEL_733: GUIWindow::Create(v9, v8, v133, v137, pWindowType1, (int)pButton2, v163); continue; - case UIMSG_194: + case UIMSG_Game_Action: if ( pMessageQueue_50CBD0->uNumMessages ) pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; OnPressSpace(); @@ -12738,7 +12744,7 @@ v1 = pPlayers[uActiveCharacter]; v10 = _this; - v2 = &pSpellStats->pInfos[(signed int)((char *)_this + 11 * v1->pNumSpellBookPage) + 1]; + v2 = &pSpellStats->pInfos[(signed int)((char *)_this + 11 * v1->lastOpenedSpellbookPage) + 1]; if ( pMouse->GetCursorPos(&a2)->y <= 250 ) v3 = pMouse->GetCursorPos(&a2)->y + 30; else @@ -12797,14 +12803,14 @@ a1.DrawText(pFontSmallnum, 120, 44, 0, pTmpBuf2, 0, 0, 0); a1.uFrameWidth = 108; a1.uFrameZ = a1.uFrameX + 107; - a1.DrawTitleText(pFontComic, 0xCu, 0x4Bu, 0, pSkillNames[v1->pNumSpellBookPage + 12], 3u); + a1.DrawTitleText(pFontComic, 0xCu, 0x4Bu, 0, pSkillNames[v1->lastOpenedSpellbookPage + 12], 3u); sprintf( pTmpBuf, "%s\n%d", pGlobalTXT_LocalizationStrings[522], *(&pSpellDatas[0].field_12 //temp_fix field_14 - + ((unsigned int)LOBYTE(v1->pActiveSkills[v1->pNumSpellBookPage + 12]) >> 6) - + 10 * (int)((char *)v10 + 11 * v1->pNumSpellBookPage))); + + ((unsigned int)LOBYTE(v1->pActiveSkills[v1->lastOpenedSpellbookPage + 12]) >> 6) + + 10 * (int)((char *)v10 + 11 * v1->lastOpenedSpellbookPage))); a1.DrawTitleText(pFontComic, 0xCu, a1.uFrameHeight - LOBYTE(pFontComic->uFontHeight) - 16, 0, pTmpBuf, 3u); dword_507B00_spell_info_to_draw_in_popup = 0; } @@ -13130,56 +13136,44 @@ // 4E1D3A: using guessed type __int16 word_4E1D3A[]; //----- (00411300) -------------------------------------------------------- -Texture *__fastcall LoadSpellbook(unsigned int uID) -{ - unsigned int v1; // esi@1 +void LoadSpellbook(unsigned int school) +{ + //unsigned int v1; // esi@1 Player *pPlayer; // ecx@1 char v3; // al@1 - int v4; // edi@5 - Texture *result; // eax@6 - char *v6; // edi@7 - unsigned int v7; // eax@7 - unsigned __int8 v8; // sf@8 - unsigned __int8 v9; // of@8 + //int v4; // edi@5 + //Texture *result; // eax@6 + //unsigned char *v6; // edi@7 + //unsigned int v7; // eax@7 + //unsigned __int8 v8; // sf@8 + //unsigned __int8 v9; // of@8 char pContainer[20]; // [sp+Ch] [bp-1Ch]@7 - Texture *v11; // [sp+20h] [bp-8h]@5 - int v12; // [sp+24h] [bp-4h]@5 + //Texture *v11; // [sp+20h] [bp-8h]@5 + //int v12; // [sp+24h] [bp-4h]@5 byte_506550 = 0; - v1 = uID; + //v1 = uID; pPlayer = pPlayers[uActiveCharacter]; v3 = pPlayer->uQuickSpell; - if ( v3 && (unsigned __int8)v3 / 11 == v1 ) - dword_50654C = (unsigned __int8)v3 - 11 * v1; + if ( v3 && (unsigned __int8)v3 / 11 == school ) + dword_50654C = (unsigned __int8)v3 - 11 * school; else dword_50654C = 0; - v4 = 1; - v12 = 1; - v11 = (Texture *)&pPlayer->field_152[11 * v1 + 63]; - do - { - result = v11; - if ( v11->pName[v4] ) - { - v6 = &byte_4E2430[12 * v1] + v4; - sprintf(pContainer, "SB%sS%02d", spellbook_texture_filename_suffices[v1], (unsigned __int8)*v6); - v7 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); - dword_506408[v12] = &pIcons_LOD->pTextures[v7]; - sprintf(pContainer, "SB%sC%02d", spellbook_texture_filename_suffices[v1], (unsigned __int8)*v6); - result = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE)]; - dword_5063D8[v12] = result; - } - v4 = v12 + 1; - v9 = v12++ > 12;//v9 = __OFSUB__(v12 + 1, 12); - v8 = v12++ - 11 < 0; - } - while ( v8 ^ v9 ); - return result; -} -// 4E1D18: using guessed type char *spellbook_texture_filename_suffices[8]; -// 506408: using guessed type int dword_506408[]; -// 50654C: using guessed type int dword_50654C; -// 506550: using guessed type char byte_506550; + + char *v11 = &pPlayer->field_152[11 * school + 63]; + + for (uint i = 1; i < 12; ++i) + { + if (v11[i]) + { + sprintf(pContainer, "SB%sS%02d", spellbook_texture_filename_suffices[school], pSpellbookSpellIndices[school][i]); + dword_506408[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); + + sprintf(pContainer, "SB%sC%02d", spellbook_texture_filename_suffices[school], pSpellbookSpellIndices[school][i]); + dword_5063D8[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); + } + } +} //----- (0041140B) -------------------------------------------------------- GUIWindow *__cdecl sub_41140B() @@ -13279,7 +13273,7 @@ v0 = 0; if ( uActiveCharacter ) - v0 = pParty->pPlayers[uActiveCharacter-1].pNumSpellBookPage;//*((char *)&pParty->pPartyBuffs[5].uExpireTime + 6972 * uActiveCharacter + 2); + v0 = pParty->pPlayers[uActiveCharacter-1].lastOpenedSpellbookPage;//*((char *)&pParty->pPartyBuffs[5].uExpireTime + 6972 * uActiveCharacter + 2); pRenderer->DrawTextureIndexed(8u, 8u, pTextures_5064A0[v0]); pRenderer->DrawTextureIndexed(0x1DCu, 0x1C2u, pTexture_50643C); pRenderer->DrawTextureIndexed(0x231u, 0x1C2u, pTexture_506448); @@ -13318,7 +13312,7 @@ sub_412AF9(); v0 = pPlayers[uActiveCharacter]; - v1 = 11 * v0->pNumSpellBookPage; + v1 = 11 * v0->lastOpenedSpellbookPage; v2 = pIcons_LOD->FindTextureByName("Pending"); v3 = (Texture *)(v2 != -1 ? (int)&pIcons_LOD->pTextures[v2] : 0); pRenderer->ClearZBuffer(0, 479); @@ -13344,14 +13338,14 @@ } if ( v6->pLevelOfDetail0 ) { - v7 = 2 * (12 * v0->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2430[12 * v0->pNumSpellBookPage + v4])); + v7 = 2 * (12 * v0->lastOpenedSpellbookPage + pSpellbookSpellIndices[v0->lastOpenedSpellbookPage][v4]); v19 = pViewport->uViewportY + dword_4E20D0[v7 + 1]; v17 = pViewport->uViewportX + dword_4E20D0[v7]; if ( BYTE1(v6->pBits) & 2 ) pRenderer->DrawTextureTransparent(v17, v19, v6); else pRenderer->DrawTextureIndexed(v17, v19, v6); - v8 = 2 * (12 * v0->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2430[12 * v0->pNumSpellBookPage] + v4)); + v8 = 2 * (12 * v0->lastOpenedSpellbookPage + pSpellbookSpellIndices[v0->lastOpenedSpellbookPage][v4]); pRenderer->_4A612A(dword_4E20D0[v8], dword_4E20D0[v8 + 1], v23, v4); } } @@ -13368,7 +13362,7 @@ if ( v11->pLevelOfDetail0 ) { v21 = dword_5063D8[v10]; - v12 = 2 * (12 * v0->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2430[12 * v0->pNumSpellBookPage] + v10)); + v12 = 2 * (12 * v0->lastOpenedSpellbookPage + pSpellbookSpellIndices[v0->lastOpenedSpellbookPage][v10]); v20 = pViewport->uViewportY + dword_4E20D0[v12 + 1]; v18 = pViewport->uViewportX + dword_4E20D0[v12]; if ( BYTE1(v11->pBits) & 2 ) @@ -13386,7 +13380,7 @@ { if ( *(short *)a2.x ) { - if ( v0->pNumSpellBookPage == v13 ) + if ( v0->lastOpenedSpellbookPage == v13 ) { pPageTexture = pTextures_tabs[v13][1]; switch ( v13 ) @@ -16179,6 +16173,7 @@ return; } } + if ( pParty->pPickedItem.uItemID )//нажатие на портрет перса правой кнопкой мыши с раствором { //v1 = 0; @@ -16195,6 +16190,7 @@ } //while ( v1 < 4 ); } + pEventTimer->Pause(); if ( pCurrentScreen <= SCREEN_CHEST ) {