# HG changeset patch # User Nomad # Date 1349871675 -7200 # Node ID 2ca04ccb612a381a949858b1a07ac3058b5b6724 # Parent ac0fb48cd27aacc053595cfe758692112662e53f NoCD, main menu, various diff -r ac0fb48cd27a -r 2ca04ccb612a Actor.cpp --- a/Actor.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Actor.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -237,7 +237,7 @@ LABEL_17: if ( (uDialogue_SpeakingActorNPC_ID & 0x80000000u) != 0 ) v9 = 4; - v11 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)10, v9, 0); + v11 = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)10, v9, 0); pDialogueWindow = v11; if ( v5->uFlags & 0x80 ) { diff -r ac0fb48cd27a -r 2ca04ccb612a Arcomage.cpp --- a/Arcomage.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Arcomage.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -225,7 +225,7 @@ TranslateMessage(&pArcomageGame->msg); DispatchMessageA(&pArcomageGame->msg); } - if ( pAsyncMouse ) + if (pAsyncMouse) { EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncMouse); v4 = *((unsigned int *)pAsyncMouse + 7); @@ -1381,7 +1381,7 @@ ++v3; } while ( (signed int)v3 < (signed int)&unk_5052C8 ); - if ( pAsyncMouse ) + if (pAsyncMouse) { pAsyncMouse->_409E3D(*((unsigned char *)pAsyncMouse + 103)); pAsyncMouse->_46B944(); @@ -5714,7 +5714,7 @@ int pXY[2]; // [sp+18h] [bp-Ch]@5 int v10; // [sp+20h] [bp-4h]@3 - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_409E3D(1); pAudioPlayer->StopChannels(-1, -1); strcpy(pArcomageGame->pPlayer1Name, pArcomagePlayer1Name); diff -r ac0fb48cd27a -r 2ca04ccb612a AudioPlayer.cpp --- a/AudioPlayer.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/AudioPlayer.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -76,7 +76,7 @@ v2 = 1; while ( 1 ) { - if ( v1->pSounds[v2].uType != 1 + if ( v1->pSounds[v2].eType != SOUND_DESC_SYSTEM || (sprintf(pSoundName, "%s", pSounds[v2].pSoundName), v1->pSounds[v2].pSoundData[0] = ::LoadSound(pSoundName, (char *)0xFFFFFFFF, pSounds[v2].uSoundID), !pAudioPlayer->b3DSoundInitialized) @@ -367,8 +367,8 @@ for ( i = 0; i < (signed int)v2->uNumSounds; ++v3 ) { v5 = &v2->pSounds[v3]; - v6 = v5->uType; - if ( v6 != 1 && (a2 || v6 != 4) ) + v6 = v5->eType; + if ( v6 != SOUND_DESC_SYSTEM && (a2 || v6 != SOUND_DESC_LOCK) ) { v7 = v5->pSoundData[0]; if ( v7 ) @@ -386,32 +386,32 @@ void SoundList::_4A9DCD(unsigned int uSoundID, char a3) { unsigned int v3; // esi@1 - SoundList *v4; // edi@1 + //SoundList *v4; // edi@1 SoundDesc *v5; // eax@1 void *v6; // ecx@8 v3 = uSoundID; - v4 = this; + //v4 = this; v5 = &this->pSounds[uSoundID]; - if ( v5->uType != 1 ) + if ( v5->eType != SOUND_DESC_SYSTEM ) { if ( v5->uFlags & 2 && v5->p3DSound && a3 ) { if ( LOBYTE(v5->bDecompressed) ) AIL_mem_free_lock(v5->p3DSound); - v4->pSounds[v3].p3DSound = 0; - v4->pSounds[v3].uFlags &= 0xFFFFFFFEu; + pSounds[v3].p3DSound = 0; + pSounds[v3].uFlags &= 0xFFFFFFFEu; } - v6 = v4->pSounds[v3].pSoundData[0]; + v6 = pSounds[v3].pSoundData[0]; if ( v6 ) { ReleaseSoundData(v6); - v4->pSounds[v3].pSoundData[0] = 0; - v4->pSounds[v3].uFlags &= 0xFFFFFFFEu; + pSounds[v3].pSoundData[0] = 0; + pSounds[v3].uFlags &= 0xFFFFFFFEu; } } } -// 4D830C: using guessed type int __stdcall AIL_mem_free_lock(int); + //----- (004A9E3D) -------------------------------------------------------- void SoundList::ToFile() @@ -513,18 +513,18 @@ v13 = v11 == 0; v14 = v2->uNumSounds; if ( v13 ) - v12[v14].uType = SOUND_DESC_LOCK; + v12[v14].eType = SOUND_DESC_LOCK; else - v12[v14].uType = SOUND_DESC_LEVEL; + v12[v14].eType = SOUND_DESC_LEVEL; } else { - v2->pSounds[v2->uNumSounds].uType = SOUND_DESC_SWAP; + v2->pSounds[v2->uNumSounds].eType = SOUND_DESC_SWAP; } } else { - v2->pSounds[v2->uNumSounds].uType = SOUND_DESC_SYSTEM; + v2->pSounds[v2->uNumSounds].eType = SOUND_DESC_SYSTEM; } if ( v19.field_0 >= 4 && !_strcmpi(v19.pProperties[3], "3D") ) { @@ -850,7 +850,7 @@ v71 = &pSoundList->pSounds[v92]; if ( !v71->pSoundData[0] ) { - if ( v71->uType == 2 ) + if (v71->eType == SOUND_DESC_SWAP) pSoundList->_4A9A67(eSoundID, 0); } } @@ -1775,32 +1775,32 @@ //----- (004AB71F) -------------------------------------------------------- void AudioPlayer::StopChannels(int uStartChannel, int uEndChannel) { - AudioPlayer *v3; // esi@1 + //AudioPlayer *v3; // esi@1 int v4; // ecx@1 char *v5; // edi@4 int v6; // ebx@12 MixerChannel *pChannel; // edi@14 - _STREAM *v8; // esi@23 + //_STREAM *v8; // esi@23 int v9; // [sp+4h] [bp-4h]@3 - v3 = this; + //v3 = this; v4 = 0; - if ( v3->bPlayerReady ) + if ( bPlayerReady ) { - if ( v3->b3DSoundInitialized ) + if ( b3DSoundInitialized ) { v9 = 0; - if ( v3->uNum3DSamples > 0 ) + if ( uNum3DSamples > 0 ) { - v5 = (char *)&v3->p3DSamples[0].field_8; + v5 = (char *)&p3DSamples[0].field_8; do { if ( (uStartChannel == -1 || v4 < uStartChannel || v4 > uEndChannel) && *(int *)v5 - && pSoundList->pSounds[*(int *)v5].uType != 1 ) + && pSoundList->pSounds[*(int *)v5].eType != SOUND_DESC_SYSTEM) { AIL_end_3D_sample(*((int **)v5 - 2)); - v3->_4ABF23((AudioPlayer_3DSample *)(v5 - 8)); + _4ABF23((AudioPlayer_3DSample *)(v5 - 8)); *((int *)v5 - 1) = 0; v4 = v9; } @@ -1808,32 +1808,32 @@ v5 += 16; v9 = v4; } - while ( v4 < v3->uNum3DSamples ); + while ( v4 < uNum3DSamples ); } } v6 = 0; - if ( v3->hDigDriver && v3->uMixerChannels > 0 ) + if ( hDigDriver && uMixerChannels > 0 ) { - pChannel = v3->pMixerChannels; + pChannel = pMixerChannels; do { if ( (uStartChannel == -1 || v6 < uStartChannel || v6 > uEndChannel) - && pSoundList->pSounds[pChannel->uSourceTrackIdx].uType != 1 ) + && pSoundList->pSounds[pChannel->uSourceTrackIdx].eType != SOUND_DESC_SYSTEM) { AIL_end_sample(pChannel->hSample); - v3->_4ABE55(pChannel); + _4ABE55(pChannel); pChannel->dword_000004 = 0; } ++v6; ++pChannel; } - while ( v6 < v3->uMixerChannels ); + while (v6 < uMixerChannels); } - if ( v3->hSequence ) - AIL_end_sequence(v3->hSequence); - v8 = v3->hStream; - if ( v8 ) - AIL_pause_stream(v8, 1); + if (hSequence) + AIL_end_sequence(hSequence); + //v8 = hStream; + if (hStream) + AIL_pause_stream(hStream, 1); } } @@ -2142,7 +2142,7 @@ void AudioPlayer::_4ABE55(MixerChannel *pChannel) { int v2; // ebx@1 - AudioPlayer *v3; // esi@1 + //AudioPlayer *v3; // esi@1 SoundDesc *v4; // eax@2 unsigned __int8 v5; // zf@5 unsigned __int8 v6; // sf@5 @@ -2158,11 +2158,11 @@ int v16; // [sp+50h] [bp-4h]@5 v2 = 0; - v3 = this; + //v3 = this; if ( pSoundList->pSounds ) { v4 = &pSoundList->pSounds[pChannel->uSourceTrackIdx]; - if ( v4->uType == 2 ) + if ( v4->eType == SOUND_DESC_SWAP) { if ( v4->pSoundData[0] && !(v4->uFlags & 1) ) { @@ -2187,7 +2187,7 @@ ++v2; v7 += 16; } - while ( v2 < v3->uMixerChannels ); + while ( v2 < uMixerChannels ); if ( !v15 ) { LABEL_16: @@ -2199,10 +2199,10 @@ { v11 = v14[v10]; v12 = 16 * (v14[v10++] + 47); - v3->pMixerChannels[v11].uSourceTrackID = 0; + pMixerChannels[v11].uSourceTrackID = 0; v13 = __OFSUB__(v10, v16); v6 = v10 - v16 < 0; - *(unsigned int *)((char *)&v3->bEAXSupported + v12) = 0; + *(unsigned int *)((char *)&bEAXSupported + v12) = 0; } while ( v6 ^ v13 ); } @@ -2286,7 +2286,7 @@ void AudioPlayer::_4ABF23(AudioPlayer_3DSample *a2) { int v2; // ebx@1 - AudioPlayer *v3; // esi@1 + //AudioPlayer *v3; // esi@1 SoundDesc *v4; // eax@2 unsigned __int8 v5; // zf@5 unsigned __int8 v6; // sf@5 @@ -2301,11 +2301,11 @@ int v15; // [sp+50h] [bp-4h]@5 v2 = 0; - v3 = this; + //v3 = this; if ( pSoundList->pSounds ) { v4 = &pSoundList->pSounds[a2->field_8]; - if ( v4->uType == 2 ) + if ( v4->eType == SOUND_DESC_SWAP) { if ( v4->p3DSound && !(v4->uFlags & 1) ) { @@ -2330,7 +2330,7 @@ ++v2; v7 += 16; } - while ( v2 < v3->uNum3DSamples ); + while ( v2 < uNum3DSamples ); if ( !v14 ) { LABEL_16: @@ -2341,10 +2341,10 @@ do { v11 = v13[v10++]; - *(&v3->bEAXSupported + 4 * (v11 + 2)) = 0; + *(&bEAXSupported + 4 * (v11 + 2)) = 0; v12 = __OFSUB__(v10, v15); v6 = v10 - v15 < 0; - v3->p3DSamples[v11].field_8 = 0; + p3DSamples[v11].field_8 = 0; } while ( v6 ^ v12 ); } diff -r ac0fb48cd27a -r 2ca04ccb612a AudioPlayer.h --- a/AudioPlayer.h Tue Oct 09 13:09:08 2012 +0200 +++ b/AudioPlayer.h Wed Oct 10 14:21:15 2012 +0200 @@ -55,6 +55,10 @@ #pragma pack(push, 1) struct MixerChannel { + inline MixerChannel(): + hSample(nullptr), dword_000004(0), uSourceTrackIdx(0), uSourceTrackID(0) + {} + _SAMPLE *hSample; int dword_000004; unsigned int uSourceTrackIdx; @@ -95,7 +99,8 @@ { //----- (004A9669) -------------------------------------------------------- AudioPlayer(): - bPlayerReady(false) + bPlayerReady(false), b3DSoundInitialized(false), + hStream(nullptr) { uMixerChannels = 16; field_2D0_time_left = 256; @@ -197,7 +202,7 @@ { char pSoundName[32]; unsigned int uSoundID; - SOUND_DESC_TYPE uType; + SOUND_DESC_TYPE eType; int uFlags; void *pSoundData[17]; void *p3DSound; diff -r ac0fb48cd27a -r 2ca04ccb612a CShow.h --- a/CShow.h Tue Oct 09 13:09:08 2012 +0200 +++ b/CShow.h Wed Oct 10 14:21:15 2012 +0200 @@ -41,7 +41,7 @@ char v10; // [sp+4h] [bp-8h]@4 int a3; // [sp+Bh] [bp-1h]@14 - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); switch ( eVideo ) { @@ -100,7 +100,7 @@ } if ( bShowMouseAfterPlayback ) { - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); } } diff -r ac0fb48cd27a -r 2ca04ccb612a DecalBuilder.cpp --- a/DecalBuilder.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/DecalBuilder.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -73,24 +73,28 @@ //----- (0049B490) -------------------------------------------------------- bool DecalBuilder::AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9) { - double v10; // ST1C_8@1 + //double v10; // ST1C_8@1 char v11; // ST24_1@1 - double v12; // ST1C_8@1 - double v13; // ST1C_8@1 + //double v12; // ST1C_8@1 + //double v13; // ST1C_8@1 int a7a; // [sp+40h] [bp+18h]@1 - float arg14a; // [sp+44h] [bp+1Ch]@1 - float arg14b; // [sp+44h] [bp+1Ch]@1 - float arg14c; // [sp+44h] [bp+1Ch]@1 + //float arg14a; // [sp+44h] [bp+1Ch]@1 + //float arg14b; // [sp+44h] [bp+1Ch]@1 + //float arg14c; // [sp+44h] [bp+1Ch]@1 - arg14a = b * 255.0; + /*arg14a = b * 255.0; v10 = arg14a + 6.7553994e15; v11 = LOBYTE(v10); arg14b = g * 255.0; v12 = arg14b + 6.7553994e15; a7a = LODWORD(v12); arg14c = r * 255.0; - v13 = arg14c + 6.7553994e15; - return pBloodsplatContainer->AddBloodsplat(x, y, z, radius, SLOBYTE(v13), a7a, v11); + v13 = arg14c + 6.7553994e15;*/ + return pBloodsplatContainer->AddBloodsplat(x, y, z, radius, + //SLOBYTE(v13), a7a, v11); + r * 255.0f, + g * 255.0f, + b * 255.0f); } //----- (0049B525) -------------------------------------------------------- diff -r ac0fb48cd27a -r 2ca04ccb612a GUIProgressBar.cpp --- a/GUIProgressBar.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/GUIProgressBar.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -28,7 +28,7 @@ char Str1[64]; // [sp+4h] [bp-78h]@16 v2 = this; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); if ( v2->pLoadingBg.pPixels ) return 0; @@ -120,7 +120,7 @@ int v3; // edi@7 v1 = this; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); if ( v1->uType == 1 ) { diff -r ac0fb48cd27a -r 2ca04ccb612a GUIWindow.cpp --- a/GUIWindow.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/GUIWindow.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -362,7 +362,7 @@ v1 = this; if ( !this ) return; - v2 = this->uWindowType; + v2 = this->eWindowType; if ( (signed int)v2 > 18 ) { v5 = v2 - 19; @@ -452,7 +452,7 @@ v1->pControlsHead = 0; v1->pControlsTail = 0; v1->uNumControls = 0; - v1->uWindowType = 0; + v1->eWindowType = WINDOW_null; v10 = v1->field_3C; v11 = uNumVisibleWindows; while ( v10 < v11 ) @@ -2123,11 +2123,11 @@ //----- (0041C432) -------------------------------------------------------- -GUIWindow *GUIWindow::Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uWindowType, int a4, int a5) +GUIWindow *GUIWindow::Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, WindowType eWindowType, int a4, int a5) { unsigned int uNextFreeWindowID; // ebp@1 - int *v8; // eax@1 - GUIWindow *pWindow; // esi@4 + //int *v8; // eax@1 + //GUIWindow *pWindow; // esi@4 int v10; // eax@4 unsigned int v11; // ebx@15 NPCData *v12; // ebp@15 @@ -2152,16 +2152,14 @@ int a4a; // [sp+20h] [bp+10h]@15 uNextFreeWindowID = 0; - v8 = (int *)&pWindowList[0].uWindowType; - do + for (uNextFreeWindowID = 0; uNextFreeWindowID < 20; ++uNextFreeWindowID) { - if ( !*v8 ) + if (pWindowList[uNextFreeWindowID].eWindowType == WINDOW_null) break; - v8 += 21; - ++uNextFreeWindowID; } - while ( (signed int)v8 < (signed int)&pVisibleWindowsIdxs[6] ); - pWindow = &pWindowList[uNextFreeWindowID]; + + + auto pWindow = &pWindowList[uNextFreeWindowID]; pWindow->uFrameWidth = uWidth; pWindow->uFrameZ = uX + uWidth - 1; pWindow->uFrameW = uY + uHeight - 1; @@ -2172,21 +2170,21 @@ ++v10; pWindow->uFrameY = uY; pWindow->uFrameHeight = uHeight; - pWindow->uWindowType = uWindowType; + pWindow->eWindowType = eWindowType; pWindow->field_44 = 0; uNumVisibleWindows = v10; pWindow->field_3C = v10; pVisibleWindowsIdxs[v10] = uNextFreeWindowID + 1; - if ( (signed int)uWindowType <= 20 ) + if ( (signed int)eWindowType <= 20 ) { - if ( uWindowType != 20 ) + if (eWindowType != WINDOW_Chest) { - switch ( uWindowType ) + switch (eWindowType) { - case 9u: + case WINDOW_Book: pWindow->InitializeBookView(); break; - case 0xAu: + case WINDOW_A: dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 4; ptr_5076F4 = pWindow->CreateButton( @@ -2199,8 +2197,8 @@ 0x71u, 0, 0, - pGlobalTXT_LocalizationStrings[79], - (Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0), + pGlobalTXT_LocalizationStrings[79], //"Exit" + (Texture *)(uTextureID_506438 != -1 ? &pIcons_LOD->pTextures[uTextureID_506438] : 0), 0); if ( pWindow->ptr_1C != (void *)1 ) { @@ -2211,7 +2209,7 @@ { if ( v12->joins ) { - pWindow->CreateButton(0x1E0u, 0x82u, 0x8Cu, v11, 1, 0, 0x88u, 0xDu, 0, nullstring, 0); + pWindow->CreateButton(0x1E0u, 0x82u, 0x8Cu, v11, 1, 0, 0x88u, 0xDu, 0, "", 0); a4a = 1; } v13 = (void *)v12->bDrawSomeAnim; @@ -2383,7 +2381,7 @@ pWindow->_41D08F(a4a, 1, 0, 1); } break; - case 0x11u: + case WINDOW_11: dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 17; ptr_5076F4 = pWindow->CreateButton( @@ -2428,11 +2426,11 @@ 0); pWindow->CreateButton(8u, 8u, 0x1CCu, 0x158u, 1, 0, 0x5Au, 1u, 0, pWindow->str_48, 0); break; - case 0x12u: + case WINDOW_12: InitializeBookTextures(); pWindow->_411621(); break; - case 0x13u: + case WINDOW_13: dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; pKeyActionMap->_459E5A(0, 15, pWindow); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 19; @@ -2448,7 +2446,7 @@ pWindow->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, nullstring, 0); return pWindow; } - if ( uWindowType == 25 ) + if (eWindowType == WINDOW_HouseInterior) { uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 13; ptr_5076F4 = pWindow->CreateButton( @@ -2514,7 +2512,7 @@ } else { - if ( uWindowType == 26 ) + if (eWindowType == WINDOW_1A) { dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 18; @@ -2559,7 +2557,7 @@ pWindow->CreateButton(8u, 8u, 0x1CCu, 0x158u, 1, 0, 0x19Bu, 1u, 0, pWindow->str_48, 0); return pWindow; } - if ( uWindowType == 27 ) + if (eWindowType == WINDOW_1B) { pEventTimer->Pause(); pAudioPlayer->StopChannels(-1, -1); @@ -2567,9 +2565,9 @@ ShowStatusBarString(pGlobalTXT_LocalizationStrings[39], 2u); return pWindow; } - if ( uWindowType == 30 ) + if (eWindowType == WINDOW_1E) goto LABEL_62; - if ( uWindowType == 31 ) + if (eWindowType == WINDOW_1F) { pMouse->SetCursorBitmap("MICON2"); ptr_5076F4 = pWindow->CreateButton( diff -r ac0fb48cd27a -r 2ca04ccb612a GUIWindow.h --- a/GUIWindow.h Tue Oct 09 13:09:08 2012 +0200 +++ b/GUIWindow.h Wed Oct 10 14:21:15 2012 +0200 @@ -30,17 +30,26 @@ /* 298 */ -enum WindowType +enum WindowType: unsigned __int32 { - WINDOW_Credits = 0x1, + WINDOW_null = 0, + WINDOW_MainMenu = 0x1, WINDOW_CharacterRecord = 0x4, WINDOW_Options = 0x6, WINDOW_Book = 0x9, + WINDOW_A = 10, + WINDOW_11 = 17, + WINDOW_12 = 18, + WINDOW_13 = 19, WINDOW_Chest = 0x14, WINDOW_HouseInterior = 0x19, + WINDOW_1A = 26, + WINDOW_1B = 27, + WINDOW_1E = 30, + WINDOW_1F = 31, WINDOW_FinalWindow = 0x46, WINDOW_KeyMappingOptions = 0x69, - WINDOW_VideoOptions = 0x6A, + WINDOW_VideoOptions = 0x6A }; /* 155 */ @@ -63,7 +72,7 @@ char _41D3B7(); char _41D73D_draw_buff_tooltip(); - static GUIWindow *Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uWindowType, int a4, int a5); + static GUIWindow *Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, enum WindowType eType, int a4, int a5); unsigned int uFrameX; unsigned int uFrameY; @@ -71,7 +80,7 @@ unsigned int uFrameHeight; unsigned int uFrameZ; unsigned int uFrameW; - unsigned int uWindowType; + WindowType eWindowType; void *ptr_1C; unsigned int uNumControls; int field_24; @@ -100,6 +109,7 @@ UIMSG_00 = 0x0, UIMSG_ChangeGameState = 0x5, UIMSG_PlayArcomage = 0x1D, + UIMSG_ExitToWindows = 0x39, UIMSG_LoadGame = 0x52, UIMSG_SaveGame = 0x53, UIMSG_ShowStatus_DateTime = 0x5C, diff -r ac0fb48cd27a -r 2ca04ccb612a Game.cpp --- a/Game.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Game.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -51,7 +51,7 @@ Render *v0; // esi@3 int _null; // ebx@6 float v2; // ST24_4@11 - double v3; // ST28_8@11 + //double v3; // ST28_8@11 int v4; // edi@26 int v5; // eax@35 @@ -100,8 +100,9 @@ if ( pRenderer->pRenderD3D ) { v2 = (double)(((signed int)pMiscTimer->uTotalGameTimeElapsed >> 2) & 0x1F) * 0.032258064 * 6.0; - v3 = v2 + 6.7553994e15; - pRenderer->field_1036A8_bitmapid = LODWORD(v3); + //v3 = v2 + 6.7553994e15; + //pRenderer->field_1036A8_bitmapid = LODWORD(v3); + pRenderer->field_1036A8_bitmapid = floorf(v2); } if ( uCurrentlyLoadedLevelType == LEVEL_Indoor) @@ -260,7 +261,7 @@ LOBYTE(dword_6BE364_game_settings_1) = dword_6BE364_game_settings_1 | 0x80; dword_6BE340 = 2; uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard ) pAsyncKeyboard->Resume(); @@ -292,7 +293,7 @@ v2->Present(); continue; } - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46B736_consume_click_lists(v3); if ( pVideoPlayer->pSmackerMovie && !SmackWait(pVideoPlayer->pSmackerMovie) ) { @@ -743,9 +744,9 @@ { struct tagRECT Rect; // [sp+0h] [bp-10h]@6 - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); - if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard ) + if (pGame->pKeyboardInstance->bUsingAsynKeyboard && pAsyncKeyboard) pAsyncKeyboard->Suspend(); WriteWindowsRegistryInt("startinwindow", pRenderer->bWindowMode); if ( GetWindowRect(hWnd, &Rect) && pRenderer->bWindowMode ) @@ -757,10 +758,13 @@ WriteWindowsRegistryInt("valAlwaysRun", bAlwaysRun); pItemsTable->Release(); pNPCStats->Release(); - pAsyncKeyboard->Release(); - pAsyncMouse->Release(); - if ( pMouse ) + if (pAsyncKeyboard) + pAsyncKeyboard->Release(); + if (pAsyncMouse) + pAsyncMouse->Release(); + if (pMouse) pMouse->Deactivate(); + pAudioPlayer->Release(); pNew_LOD->FreeSubIndexAndIO(); pGames_LOD->FreeSubIndexAndIO(); @@ -783,12 +787,12 @@ int Game::_44EC23(stru148 *a2, int *a3, signed int a4) { double v4; // st7@4 - double v5; // ST00_8@4 + //double v5; // ST00_8@4 signed int v6; // eax@5 - double v7; // ST00_8@6 + //double v7; // ST00_8@6 signed int result; // eax@8 - double v9; // ST00_8@9 - double v10; // ST00_8@11 + //double v9; // ST00_8@9 + //double v10; // ST00_8@11 float a2a; // [sp+14h] [bp+8h]@4 float a3a; // [sp+18h] [bp+Ch]@4 float a3b; // [sp+18h] [bp+Ch]@6 @@ -801,12 +805,14 @@ a2a = v4; *a3 |= 2u; a3a = (1.0 - this->_E28_timed_gamma_strength) * v4; - v5 = a3a + 6.7553994e15; - if ( SLODWORD(v5) >= 0 ) + //v5 = a3a + 6.7553994e15; + //if ( SLODWORD(v5) >= 0 ) + if (floorf(a3a) >= 0 ) { a3b = (1.0 - this->_E28_timed_gamma_strength) * a2a; - v7 = a3b + 6.7553994e15; - v6 = LODWORD(v7); + //v7 = a3b + 6.7553994e15; + //v6 = LODWORD(v7); + v6 = floorf(a3b); } else { @@ -814,13 +820,15 @@ } if ( a4 >= v6 ) { - a4a = (1.0 - this->_E28_timed_gamma_strength) * a2a; - v9 = a4a + 6.7553994e15; - if ( SLODWORD(v9) >= 0 ) + a4a = (1.0 - _E28_timed_gamma_strength) * a2a; + //v9 = a4a + 6.7553994e15; + //if ( SLODWORD(v9) >= 0 ) + if (floorf(a4a) >= 0) { - a4b = (1.0 - this->_E28_timed_gamma_strength) * a2a; - v10 = a4b + 6.7553994e15; - result = LODWORD(v10); + a4b = (1.0 - _E28_timed_gamma_strength) * a2a; + //v10 = a4b + 6.7553994e15; + //result = LODWORD(v10); + result = floorf(a4b); } else { @@ -861,10 +869,10 @@ double v4; // st7@3 double v5; // ST00_8@3 signed int v6; // eax@4 - double v7; // ST00_8@5 + //double v7; // ST00_8@5 signed int result; // eax@7 double v9; // ST00_8@8 - double v10; // ST00_8@10 + //double v10; // ST00_8@10 float v11; // [sp+14h] [bp+8h]@3 float v12; // [sp+18h] [bp+Ch]@3 float v13; // [sp+18h] [bp+Ch]@5 @@ -881,8 +889,9 @@ if ( SLODWORD(v5) >= 0 ) { v13 = (1.0 - this->_E28_timed_gamma_strength) * v11; - v7 = v13 + 6.7553994e15; - v6 = LODWORD(v7); + //v7 = v13 + 6.7553994e15; + //v6 = LODWORD(v7); + v6 = floorf(v13); } else { @@ -890,13 +899,14 @@ } if ( a4 >= v6 ) { - v14 = (1.0 - this->_E28_timed_gamma_strength) * v11; + v14 = (1.0 - _E28_timed_gamma_strength) * v11; v9 = v14 + 6.7553994e15; if ( SLODWORD(v9) >= 0 ) { - v15 = (1.0 - this->_E28_timed_gamma_strength) * v11; - v10 = v15 + 6.7553994e15; - result = LODWORD(v10); + v15 = (1.0 - _E28_timed_gamma_strength) * v11; + //v10 = v15 + 6.7553994e15; + //result = LODWORD(v10); + result = floorf(v15); } else { diff -r ac0fb48cd27a -r 2ca04ccb612a Indoor.cpp --- a/Indoor.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Indoor.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -53,16 +53,16 @@ void __fastcall sub_43F39E(IndoorLocation_drawstru *_this) { int *v1; // ecx@1 - double v2; // ST30_8@3 - double v3; // ST30_8@6 - double v4; // ST28_8@6 + //double v2; // ST30_8@3 + //double v3; // ST30_8@6 + //double v4; // ST28_8@6 int v5; // eax@4 int v6; // eax@7 unsigned int v7; // ebx@8 BLVSector *v8; // esi@8 unsigned __int16 *v9; // edi@8 int i; // [sp+18h] [bp-8h]@7 - unsigned __int8 v11; // [sp+1Ch] [bp-4h]@3 + //unsigned __int8 v11; // [sp+1Ch] [bp-4h]@3 signed int v12; // [sp+1Ch] [bp-4h]@8 pBLVRenderParams->Set(_this); @@ -73,24 +73,24 @@ uNumBillboardsToDraw = 0; if ( !byte_4D864C || !(BYTE1(pGame->uFlags) & 0x10) ) { - v2 = pParty->flt_TorchlightColorB + 6.7553994e15; - v11 = LOBYTE(v2); + //v2 = pParty->flt_TorchlightColorB + 6.7553994e15; + //v11 = LOBYTE(v2); if ( (signed __int64)pParty->pPartyBuffs[16].uExpireTime <= 0 ) v5 = 800; else v5 = 800 * pParty->pPartyBuffs[16].uPower; LOBYTE(v1) = byte_4E94D0; - v4 = pParty->flt_TorchlightColorR + 6.7553994e15; - v3 = pParty->flt_TorchlightColorG + 6.7553994e15; + //v4 = pParty->flt_TorchlightColorR + 6.7553994e15; + //v3 = pParty->flt_TorchlightColorG + 6.7553994e15; pMobileLightsStack->AddLight( SLOWORD(pBLVRenderParams->vPartyPos.x), SLOWORD(pBLVRenderParams->vPartyPos.y), SLOWORD(pBLVRenderParams->vPartyPos.z), SLOWORD(pBLVRenderParams->uRadius), v5, - LOBYTE(v4), - LOBYTE(v3), - v11, + floorf(pParty->flt_TorchlightColorR), + floorf(pParty->flt_TorchlightColorG), + floorf(pParty->flt_TorchlightColorB), v1); } PrepareWallsRenderList_BLV(); diff -r ac0fb48cd27a -r 2ca04ccb612a IndoorCamera.h --- a/IndoorCamera.h Tue Oct 09 13:09:08 2012 +0200 +++ b/IndoorCamera.h Wed Oct 10 14:21:15 2012 +0200 @@ -10,11 +10,8 @@ { sRotationX = 0; sRotationY = 0; - __debugbreak(); - { - //LODWORD(flt_1C_fov) = 0x44FA0000u; - //LODWORD(flt_20_inv_1C) = 0x4203126Fu; - } + flt_1C_fov = 2000.0f; + flt_20_inv_1C = 32.768002f; field_4C = 0; } diff -r ac0fb48cd27a -r 2ca04ccb612a IndoorCameraD3D.cpp --- a/IndoorCameraD3D.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/IndoorCameraD3D.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -505,12 +505,12 @@ RenderVertexSoft vert[20]; // [sp+0h] [bp-680h]@1 RenderVertexD3D3 pD3DVertices[5]; // [sp+3C0h] [bp-2C0h]@15 RenderVertexSoft a1; // [sp+640h] [bp-40h]@1 - double v24; // [sp+670h] [bp-10h]@25 - double v25; // [sp+678h] [bp-8h]@1 + //double v24; // [sp+670h] [bp-10h]@25 + //double v25; // [sp+678h] [bp-8h]@1 v7 = this; a1.flt_2C = 0.0; - HIDWORD(v25) = (int)this; + //HIDWORD(v25) = (int)this; v8 = (char *)&vert[0].flt_2C; v9 = 20; do @@ -640,8 +640,12 @@ do { LODWORD(a7) = *((int *)v13 - 3); - v25 = a7 + 6.7553994e15; - v24 = *((float *)v13 - 4) + 6.7553994e15; + //v25 = a7 + 6.7553994e15; + auto _v25 = floorf(a7); + + //v24 = *((float *)v13 - 4) + 6.7553994e15; + auto _v24 = floorf(*((float *)v13 - 4)); + v14 = *(int *)v13; v15 = *(int *)v13; v16 = (*(int *)v13 >> 3) & 0x1F; @@ -657,7 +661,7 @@ } v13 += 32; --uNumD3DVertices; - pRenderer->pTargetSurface[LODWORD(v24) + pRenderer->uTargetSurfacePitch * LODWORD(v25)] = v18 | v16 | (unsigned __int16)v17; + pRenderer->pTargetSurface[(uint)_v24 + pRenderer->uTargetSurfacePitch * (uint)_v25] = v18 | v16 | (unsigned __int16)v17; } while ( uNumD3DVertices ); } diff -r ac0fb48cd27a -r 2ca04ccb612a LOD.cpp --- a/LOD.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/LOD.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -1910,34 +1910,34 @@ //----- (00461954) -------------------------------------------------------- void LOD::File::AllocSubIndicesAndIO(unsigned int uNumSubIndices, unsigned int uBufferSize) { - LOD::File *v3; // esi@1 + //LOD::File *v3; // esi@1 LOD::Directory *pSubIndices_dup; // eax@3 char v5; // zf@3 - v3 = this; - if ( this->pSubIndices ) + //v3 = this; + if (pSubIndices) { MessageBoxA(0, "Attempt to reset a LOD subindex!", "MM6", MB_ICONEXCLAMATION); - pAllocator->FreeChunk(v3->pSubIndices); - v3->pSubIndices = 0; + pAllocator->FreeChunk(pSubIndices); + pSubIndices = nullptr; } pSubIndices_dup = (LOD::Directory *)pAllocator->AllocNamedChunk( - v3->pSubIndices, + pSubIndices, 32 * uNumSubIndices, "LODsub"); - v5 = v3->pIOBuffer == 0; - v3->pSubIndices = pSubIndices_dup; + v5 = pIOBuffer == 0; + pSubIndices = pSubIndices_dup; if ( !v5 ) { MessageBoxA(0, "Attempt to reset a LOD IObuffer!", "MM6", MB_ICONEXCLAMATION); - pAllocator->FreeChunk(v3->pIOBuffer); - v3->pIOBuffer = 0; - v3->uIOBufferSize = 0; + pAllocator->FreeChunk(pIOBuffer); + pIOBuffer = 0; + uIOBufferSize = 0; } if ( uBufferSize ) { - v3->pIOBuffer = (unsigned __int8 *)pAllocator->AllocNamedChunk(v3->pIOBuffer, uBufferSize, "LODio"); - v3->uIOBufferSize = uBufferSize; + pIOBuffer = (unsigned __int8 *)pAllocator->AllocNamedChunk(pIOBuffer, uBufferSize, "LODio"); + uIOBufferSize = uBufferSize; } } @@ -2861,7 +2861,7 @@ strcpy(v8->pName, pContainer); if (pRenderer->pRenderD3D && v8->pBits & 2 && dword_011BA8) { - if ( !pHardwareSurfaces || !pHardwareTextures ) + if (!pHardwareSurfaces || !pHardwareTextures) { pHardwareSurfaces = new IDirectDrawSurface *[1000]; memset(pHardwareSurfaces, 0, 1000 * sizeof(IDirectDrawSurface4 *)); @@ -3108,6 +3108,17 @@ } +Texture *LODFile_IconsBitmaps::LoadTexturePtr(const char *pContainer, enum TEXTURE_TYPE uTextureType) +{ + uint id = LoadTexture(pContainer, uTextureType); + if (id == -1) + { + Log::Warning(L"LOD error\\no container: \"%S\"", pContainer); + return nullptr; + } + return &pTextures[id]; +} + //----- (0040FB20) -------------------------------------------------------- unsigned int LODFile_IconsBitmaps::LoadTexture(const char *pContainer, enum TEXTURE_TYPE uTextureType) { diff -r ac0fb48cd27a -r 2ca04ccb612a LOD.h --- a/LOD.h Tue Oct 09 13:09:08 2012 +0200 +++ b/LOD.h Wed Oct 10 14:21:15 2012 +0200 @@ -134,6 +134,7 @@ bool LoadIconsOrEvents(const char *pLODFilename); void ReleaseAll(); unsigned int LoadTexture(const char *pContainer, enum TEXTURE_TYPE uTextureType = TEXTURE_DEFAULT); + Texture *LoadTexturePtr(const char *pContainer, enum TEXTURE_TYPE uTextureType = TEXTURE_DEFAULT); int LoadTextureFromLOD(Texture *pOutTex, const char *pContainer, enum TEXTURE_TYPE eTextureType); int ReloadTexture(Texture *pDst, const char *pContainer, int mode); void ReleaseHardwareTextures(); diff -r ac0fb48cd27a -r 2ca04ccb612a LightmapBuilder.cpp --- a/LightmapBuilder.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/LightmapBuilder.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -72,9 +72,9 @@ int arg0; // [sp+2Ch] [bp-40h]@21 int v29; // [sp+30h] [bp-3Ch]@21 int v30; // [sp+34h] [bp-38h]@21 - double v31; // [sp+38h] [bp-34h]@21 - double v32; // [sp+40h] [bp-2Ch]@21 - double v33; // [sp+48h] [bp-24h]@21 + //double v31; // [sp+38h] [bp-34h]@21 + //double v32; // [sp+40h] [bp-2Ch]@21 + //double v33; // [sp+48h] [bp-24h]@21 int v34; // [sp+50h] [bp-1Ch]@24 LightmapBuilder *thisa; // [sp+54h] [bp-18h]@1 int v36; // [sp+58h] [bp-14h]@21 @@ -163,15 +163,17 @@ a6 = v20; v36 = v21; v37 = v19[20]; - v33 = a6 + 6.7553994e15; + //v33 = a6 + 6.7553994e15; a6 = *((float *)v19 + 100) * 255.0; - v32 = a6 + 6.7553994e15; + //v32 = a6 + 6.7553994e15; a6 = *((float *)v19 + 120) * 255.0; - v31 = a6 + 6.7553994e15; - v38 = __PAIR__(LODWORD(v32), LODWORD(v31)); - v22 = LODWORD(v31) | ((LODWORD(v32) | (LODWORD(v33) << 8)) << 8); - if ( !(LODWORD(v31) | ((LODWORD(v32) | (LODWORD(v33) << 8)) << 8)) ) - v22 = 0xFFFFFFu; + //v31 = a6 + 6.7553994e15; + //v38 = __PAIR__(LODWORD(v32), LODWORD(v31)); + v38 = __PAIR__((int)floorf(a6), (int)floorf(a6)); + //v22 = LODWORD(v31) | ((LODWORD(v32) | (LODWORD(v33) << 8)) << 8); + v22 = (int)floorf(a6) | (((int)floorf(a6) | ((int)floorf(a6) << 8)) << 8); + if (!v22) + v22 = 0x00FFFFFF; v27 = a7; v23 = (int)a5; v26 = (Vec3_float_ *)a9; @@ -257,7 +259,7 @@ float v61; // [sp+24h] [bp-28h]@8 float v62; // [sp+28h] [bp-24h]@8 Vec3_float_ a1; // [sp+2Ch] [bp-20h]@8 - double v64; // [sp+38h] [bp-14h]@8 + //double v64; // [sp+38h] [bp-14h]@8 int pLightmapVertices_; // [sp+40h] [bp-Ch]@5 float v66; // [sp+44h] [bp-8h]@5 char v67; // [sp+4Bh] [bp-1h]@2 @@ -359,28 +361,31 @@ a1.z = a5; a1.y = v30; a1.Normalize(); - v64 = v62 + 6.7553994e15; - LODWORD(a5) = LODWORD(v64); - v64 = v61 + 6.7553994e15; - arg0c = LODWORD(v64); - v64 = v60 + 6.7553994e15; - arg8 = LODWORD(v64); - HIDWORD(v64) = abs(*(int *)(v25 + 8) - (signed)LODWORD(a5)); + //v64 = v62 + 6.7553994e15; + //LODWORD(a5) = LODWORD(v64); + LODWORD(a5) = floorf(v62); + //v64 = v61 + 6.7553994e15; + //arg0c = LODWORD(v64); + arg0c = floorf(v61); + //v64 = v60 + 6.7553994e15; + //arg8 = LODWORD(v64); + arg8 = floorf(v60); + auto v64 /*HIDWORD(v64)*/ = abs(*(int *)(v25 + 8) - (signed)LODWORD(a5)); arg0a = abs(*(int *)(v25 + 4) - arg0c); v31 = abs(*(int *)v25 - arg8); LODWORD(a5) = v31; v32 = arg0a; - v33 = HIDWORD(v64); + v33 = v64;//HIDWORD(v64); if ( v31 < arg0a ) { v34 = v31; v31 = arg0a; v32 = v34; } - if ( v31 < SHIDWORD(v64) ) + if ( v31 < v64)//SHIDWORD(v64) ) { v35 = v31; - v31 = HIDWORD(v64); + v31 = v64;//HIDWORD(v64); v33 = v35; } if ( v32 < (signed int)v33 ) @@ -806,7 +811,7 @@ char v21; // c2@12 char v22; // c3@12 signed int v23; // [sp+10h] [bp-4h]@2 - float pLighta; // [sp+1Ch] [bp+8h]@13 + //float pLighta; // [sp+1Ch] [bp+8h]@13 signed int a2a; // [sp+20h] [bp+Ch]@4 v7 = pLight; @@ -841,8 +846,8 @@ stru_F8AD28._blv_lights_rs[*pSlot] = (double)pLight->uLightColorR * 0.0039215689; stru_F8AD28._blv_lights_gs[*pSlot] = (double)pLight->uLightColorG * 0.0039215689; stru_F8AD28._blv_lights_bs[*pSlot] = (double)pLight->uLightColorB * 0.0039215689; - pLighta = v13; - stru_F8AD28._blv_lights_light_dot_faces[*pSlot] = abs(COERCE_UNSIGNED_INT64(pLighta + 6.7553994e15)); + //pLighta = v13; + stru_F8AD28._blv_lights_light_dot_faces[*pSlot] = abs((int)floorf(v13));//COERCE_UNSIGNED_INT64(pLighta + 6.7553994e15)); result = (BLVFace *)*pSlot; stru_F8AD28._blv_lights_smthngs[(*pSlot)++] = v7->field_B; LOBYTE(result) = 1; @@ -1035,16 +1040,20 @@ v7 = a5; LODWORD(a5) = *(unsigned int *)(LODWORD(a5) + 8); - v24 = a5 + 6.7553994e15; - v26 = LODWORD(v24); + //v24 = a5 + 6.7553994e15; + v26 = floorf(a5);//LODWORD(v24); LODWORD(a5) = *(unsigned int *)(LODWORD(v7) + 4); - v24 = a5 + 6.7553994e15; + //v24 = a5 + 6.7553994e15; + auto _v24 = floorf(a5); LODWORD(a5) = *(unsigned int *)LODWORD(v7); - v23 = a5 + 6.7553994e15; - *(_QWORD *)((char *)&v24 + 4) = __PAIR__(LODWORD(v24), LODWORD(v23)); + //v23 = a5 + 6.7553994e15; + auto _v23 = floorf(a5); + //*(_QWORD *)((char *)&v24 + 4) = __PAIR__(LODWORD(v24), LODWORD(v23)); v26 = abs((signed)LODWORD(a1.z) - v26); - v25 = abs((signed)LODWORD(a1.y) - (signed)LODWORD(v24)); - v8 = abs((int)a1.x - (signed)LODWORD(v23)); + //v25 = abs((signed)LODWORD(a1.y) - (signed)LODWORD(v24)); + //v8 = abs((int)a1.x - (signed)LODWORD(v23)); + v25 = abs((signed)LODWORD(a1.y) - (signed)_v24); + v8 = abs((int)a1.x - (signed)_v23); LODWORD(a5) = v8; v9 = v25; v10 = v26; @@ -1548,8 +1557,8 @@ float v17; // ST04_4@17 double v18; // st7@17 int result; // eax@19 - double v20; // ST14_8@20 - double v21; // ST14_8@20 + //double v20; // ST14_8@20 + //double v21; // ST14_8@20 double v22; // st7@20 int v23; // ecx@20 double v24; // st6@20 @@ -1633,11 +1642,13 @@ else { a5a = ((double)a1->field_A - v15->field_2C) * v15->field_4 + v15->field_24 - 0.5; - v20 = a5a + 6.7553994e15; - a5b = (double)SLODWORD(v20); + //v20 = a5a + 6.7553994e15; + //a5b = (double)SLODWORD(v20); + a5b = (double)floorf(a5a); a1a = ((double)a1->field_A - *(float *)(v14 + 44)) * *(float *)(v14 + 4) + *(float *)(v14 + 36) + 0.5; - v21 = a1a + 6.7553994e15; - v22 = (double)SLODWORD(v21); + //v21 = a1a + 6.7553994e15; + //v22 = (double)SLODWORD(v21); + v22 = (double)floorf(a1a); result = v9->field_8; v23 = v9->field_C; v24 = -((a3a - a2a) / (v22 - a5b)); @@ -1985,17 +1996,22 @@ v30 = a1->field_C10 & 0xFFi64; a1b = BYTE2(a1->field_C10); v7 = arg4; - v31 = v6; + //v31 = v6; *((float *)&v30 + 1) = (double)v30 * v4->flt_C14; a1c = (double)a1b * v4->flt_C14 * arg4->x; - v29 = a1c + 6.7553994e15; - arg4a = LODWORD(v29); - a1d = v31 * v7->y; + //v29 = a1c + 6.7553994e15; + //arg4a = LODWORD(v29); + arg4a = floorf(a1c); + + a1d = v6 * v7->y; v29 = a1d + 6.7553994e15; LODWORD(v31) = LODWORD(v29); + a1e = *((float *)&v30 + 1) * v7->z; + v29 = a1e + 6.7553994e15; HIDWORD(v30) = LODWORD(v29); + v8 = uCurrentlyLoadedLevelType; v9 = LODWORD(v29) | ((LODWORD(v31) | (arg4a << 8)) << 8); if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) diff -r ac0fb48cd27a -r 2ca04ccb612a Mouse.cpp --- a/Mouse.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Mouse.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -25,7 +25,7 @@ { unsigned int v3; // eax@2 - if ( pAsyncMouse ) + if (pAsyncMouse) { *pX = *((int *)pAsyncMouse + 6); v3 = *((int *)pAsyncMouse + 7); @@ -41,11 +41,8 @@ //----- (004698A6) -------------------------------------------------------- void Mouse::RemoveHoldingItem() { - Mouse *v1; // esi@1 - - v1 = this; pParty->pPickedItem.Reset(); - if ( _strcmpi(v1->pCurrentCursorName, "MICON2") ) + if (strcmpi(pCurrentCursorName, "MICON2")) SetCursorBitmap("MICON1"); } @@ -109,7 +106,7 @@ v3 = LoadCursorA(GetModuleHandleW(nullptr), "Arrow"); SetClassLongA(hWnd, GCL_HCURSOR, (LONG)v3); v4 = (int)pAsyncMouse; - if ( pAsyncMouse ) + if (pAsyncMouse) { v10 = 0.0; v5 = 0.0; @@ -125,7 +122,7 @@ v7 = (LONG)LoadCursorA(GetModuleHandleW(nullptr), "Target"); SetClassLongA(hWnd, -12, v7); v4 = (int)pAsyncMouse; - if ( pAsyncMouse ) + if (pAsyncMouse) { v10 = 14.0; v5 = 14.0; @@ -157,7 +154,7 @@ v1 = this; this->field_8 = 1; - if ( pAsyncMouse ) + if (pAsyncMouse) { v2 = *((int *)pAsyncMouse + 6); Point.x = *((int *)pAsyncMouse + 6); @@ -175,7 +172,7 @@ v1->uMouseClickY = result; if ( pRenderer->bWindowMode ) goto LABEL_16; - if ( pAsyncMouse ) + if (pAsyncMouse) goto LABEL_24; if ( v2 < 0 ) v2 = 0; @@ -187,7 +184,7 @@ { result = 479; LABEL_16: - if ( pAsyncMouse ) + if (pAsyncMouse) goto LABEL_24; if ( pRenderer->bWindowMode && (v2 < 0 || result < 0 || v2 > 639 || result > 479) ) goto LABEL_23; @@ -253,7 +250,7 @@ v2 = pAsyncMouse; result = a2; - if ( pAsyncMouse ) + if (pAsyncMouse) { a2->x = *((int *)pAsyncMouse + 6); v4 = *((int *)v2 + 7); @@ -475,7 +472,7 @@ pItemsTable->pItems[pParty->pPickedItem.uItemID].pIconName, TEXTURE_16BIT_PALETTE); v3 = (Texture *)(v2 != -1 ? (int)&pIcons_LOD->pTextures[v2] : 0); - if ( pAsyncMouse ) + if (pAsyncMouse) { v4 = *((int *)pAsyncMouse + 6); v5 = *((int *)pAsyncMouse + 7); @@ -612,10 +609,10 @@ //----- (00465C2C) -------------------------------------------------------- void AsyncMouse::Release() { - if ( pAsyncMouse ) + if (pAsyncMouse) { pAsyncMouse->Suspend(); - if ( pAsyncMouse ) + if (pAsyncMouse) (**(void (__stdcall ***)(int))pAsyncMouse)(1); } pAsyncMouse = 0; diff -r ac0fb48cd27a -r 2ca04ccb612a NPC.h --- a/NPC.h Tue Oct 09 13:09:08 2012 +0200 +++ b/NPC.h Wed Oct 10 14:21:15 2012 +0200 @@ -1,6 +1,18 @@ #pragma once +struct NPCTopic +{ + const char *pTopic; + const char *pText; +}; + +extern NPCTopic pNPCTopics[789]; + + + + + /* 136 */ #pragma pack(push, 1) struct NPCData @@ -65,6 +77,10 @@ #pragma pack(push, 1) struct NPCStats { + inline NPCStats(): + pNPCTextTXT_Raw(nullptr), pNPCTopicTXT_Raw(nullptr), pNPCDistTXT_Raw(nullptr) + {} + void Initialize2(); void Initialize1(); void Initialize(); diff -r ac0fb48cd27a -r 2ca04ccb612a Player.cpp --- a/Player.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Player.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -7649,7 +7649,7 @@ if ( v36 != 13 ) { LABEL_178: - if ( pGUIWindow_CurrentMenu && pGUIWindow_CurrentMenu->uWindowType ) + if ( pGUIWindow_CurrentMenu && pGUIWindow_CurrentMenu->eWindowType != WINDOW_null) { if ( !v73 ) goto LABEL_187; @@ -7740,7 +7740,7 @@ } if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions && pGUIWindow_CurrentMenu - && pGUIWindow_CurrentMenu->uWindowType + && pGUIWindow_CurrentMenu->eWindowType != WINDOW_null && (signed int)pMessageQueue_50CBD0->uNumMessages < 40 ) { pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113; diff -r ac0fb48cd27a -r 2ca04ccb612a Render.cpp --- a/Render.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/Render.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -5485,10 +5485,10 @@ { if ( v1->field_40110 ) { - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46BAEC(); pRenderD3D->Present(0); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46BB0A(); } } @@ -6463,7 +6463,7 @@ result = pSurface->Lock(0, pDesc, uLockFlags, 0); if ( result == DDERR_SURFACELOST ) { - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); v6 = v4->Restore(); if ( v6 ) @@ -6493,7 +6493,7 @@ if ( pRenderer->pRenderD3D ) pRenderD3D->HandleLostResources(); result = pRenderer->pDirectDraw4->RestoreAllSurfaces(); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); } else @@ -8759,7 +8759,7 @@ //HWLTexture *pHWLTexture; // esi@1 //signed int result; // eax@1 //IDirectDrawSurface **v9; // ebx@9 - IDirectDrawSurface4 *v10; // edi@11 + //IDirectDrawSurface4 *v10; // edi@11 //int v11; // ebx@11 HRESULT v12; // eax@14 unsigned __int16 *v13; // ecx@19 @@ -8767,9 +8767,9 @@ DWORD v15; // edx@20 HRESULT v16; // eax@23 stru350 Dst; // [sp+Ch] [bp-F8h]@12 - DDSURFACEDESC2 desc; // [sp+6Ch] [bp-98h]@13 - DDSCAPS2 v19; // [sp+E8h] [bp-1Ch]@13 - int v20; // [sp+100h] [bp-4h]@12 + //DDSURFACEDESC2 desc; // [sp+6Ch] [bp-98h]@13 + //DDSCAPS2 v19; // [sp+E8h] [bp-1Ch]@13 + //int v20; // [sp+100h] [bp-4h]@12 auto pHWLTexture = pD3DBitmaps.LoadTexture(pName, bMipMaps); if ( pHWLTexture ) @@ -8784,50 +8784,60 @@ bMipMaps, uMinDeviceTextureDim) ) Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0); - v10 = *pOutSurface; + //v10 = *pOutSurface; //v11 = 0; if ( bMipMaps ) { Dst._450DDE(); - v20 = 0; - Dst._450DF1((const char *)dword_4EFCBC, (const char *)dword_4EFCBC); + //v20 = 0; + Dst._450DF1(&stru_4EFCBC, &stru_4EFCBC); + + IDirectDrawSurface4 *pNextSurf = *pOutSurface; while ( 1 ) { - memset(&v19, 0, 0x10u); - v19.dwCaps = 0x401000u; // DDSCAPS_TEXTURE | DDSCAPS_MIPMAP - memset(&desc, 0, 0x7Cu); - desc.dwSize = 124; - if ( LockSurface_DDraw4(v10, &desc, 0x21u) ) + DDSCAPS2 v19; + memset(&v19, 0, sizeof(DDSCAPS2)); + v19.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP; + + DDSURFACEDESC2 desc; + memset(&desc, 0, sizeof(DDSURFACEDESC2)); + desc.dwSize = sizeof(DDSURFACEDESC2); + + if ( LockSurface_DDraw4(pNextSurf, &desc, 0x21u) ) { Dst.sub_451007_scale_image_bicubic( - (int)pHWLTexture->pPixels, + pHWLTexture->pPixels, pHWLTexture->uWidth, pHWLTexture->uHeight, pHWLTexture->uWidth, - (signed int)desc.lpSurface, + (unsigned short *)desc.lpSurface, desc.dwWidth, desc.dwHeight, desc.lPitch >> 1, 0, 0); - ErrD3D(v10->Unlock(0)); - bMipMaps = 0x4D86ACu; - } - if ( v10->GetAttachedSurface(&v19, (LPDIRECTDRAWSURFACE4 *)&pName) ) + ErrD3D(pNextSurf->Unlock(0)); + //bMipMaps = 0x4D86ACu; + } + if (FAILED(pNextSurf->GetAttachedSurface(&v19, &pNextSurf))) break; - v10 = (IDirectDrawSurface4 *)pName; + //v10 = (IDirectDrawSurface4 *)pName; //v11 = 0; } - v20 = -1; + //v20 = -1; //nullsub_1(); } else { - memset(&v19, 0, 0x10u); - v19.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP; - memset(&desc, 0, 0x7Cu); - desc.dwSize = 124; - if ( LockSurface_DDraw4(v10, &desc, 0x21u) ) + DDSCAPS2 v19; + memset(&v19, 0, sizeof(DDSCAPS2)); + v19.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP; + + DDSURFACEDESC2 desc; + memset(&desc, 0, sizeof(DDSURFACEDESC2)); + desc.dwSize = sizeof(DDSURFACEDESC2); + + if ( LockSurface_DDraw4(*pOutSurface, &desc, 0x21u) ) { bMipMaps = 0; v13 = pHWLTexture->pPixels; @@ -8853,11 +8863,11 @@ } while ( bMipMaps < desc.dwHeight ); } - ErrD3D(v10->Unlock(0)); - } - } - free(pHWLTexture->pPixels); - free(pHWLTexture); + ErrD3D((*pOutSurface)->Unlock(0)); + } + } + delete [] pHWLTexture->pPixels; + delete pHWLTexture; return true; } return false; @@ -10972,7 +10982,7 @@ pMiscTimer->Resume(); pAsyncMouse->Release(); CreateAsyncMouse(); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Clip(); } } @@ -11021,14 +11031,6 @@ //----- (004524D8) -------------------------------------------------------- HWLTexture *RenderHWLContainer::LoadTexture(const char *pName, int bMipMaps) { - //RenderHWLContainer *v3; // esi@1 - unsigned int v4; // eax@1 - int v5; // ebx@2 - int v6; // edi@3 - //HWLTexture *result; // eax@8 - //HWLTexture *pTex; // edi@9 - //char *v9; // ebx@9 - //unsigned __int16 *v10; // eax@9 int v11; // eax@13 int v12; // ecx@13 void *v13; // eax@13 @@ -11042,60 +11044,68 @@ int v21; // ecx@16 int v22; // eax@16 int v23; // esi@16 - //char Str1[20]; // [sp+Ch] [bp-28h]@1 - unsigned int pSource; // [sp+20h] [bp-14h]@10 unsigned __int16 *v26; // [sp+24h] [bp-10h]@13 int v27; // [sp+28h] [bp-Ch]@14 int v28; // [sp+2Ch] [bp-8h]@13 - unsigned int DstBuf; // [sp+30h] [bp-4h]@9 - int pDesta; // [sp+3Ch] [bp+8h]@2 - void *pDestc; // [sp+3Ch] [bp+8h]@10 int pDestb; // [sp+3Ch] [bp+8h]@15 //v3 = this; //sprintf(Str1, "%s", pName); - v4 = uNumItems; - if ( v4 && (v5 = 0, pDesta = uNumItems, (signed int)v4 > 0) ) - { - while ( 1 ) - { - v6 = v5 + (pDesta - v5) / 2; - if ( !_strcmpi(pName, pSpriteNames[v6]) ) - break; - if ( _strcmpi(pName, pSpriteNames[v6]) <= 0 ) - pDesta = v5 + (pDesta - v5) / 2; - else - v5 = v6 + 1; - if ( v5 >= pDesta ) - return false; - } - fseek(pFile, pSpriteOffsets[v6], SEEK_SET); + //v4 = uNumItems; + if (!uNumItems) + return nullptr; + + //{ + //v5 = 0, pDesta = uNumItems; + uint idx1 = 0, + idx2 = uNumItems; + while (true) + { + auto i = idx1 + (idx2 - idx1) / 2; + + auto res = strcmpi(pName, pSpriteNames[i]); + if (!res) + { + fseek(pFile, pSpriteOffsets[i], SEEK_SET); + break; + } + else if (res < 0) + idx2 = idx1 + (idx2 - idx1) / 2; + else + idx1 = i + 1; + + if ( idx1 >= idx2 ) + return false; + } + + + uint uCompressedSize = 0; + fread(&uCompressedSize, 4, 1, pFile); auto pTex = new HWLTexture; - fread(&DstBuf, 4u, 1u, pFile); - fread(&pTex->field_18, 4u, 1u, pFile); - fread(&pTex->field_1C, 4u, 1u, pFile); - fread(&pTex->field_20, 4u, 1u, pFile); - fread(&pTex->field_24, 4u, 1u, pFile); - //v9 = (char *)&pTex->uWidth; - fread(&pTex->uWidth, 4u, 1u, pFile); - fread(&pTex->uHeight, 4u, 1u, pFile); - fread(&pTex->field_30, 4u, 1u, pFile); - fread(&pTex->field_34, 4u, 1u, pFile); - //v10 = new unsigned __int16[pTex->uWidth * pTex->uHeight]; + fread(&pTex->field_18, 4, 1, pFile); + fread(&pTex->field_1C, 4, 1, pFile); + fread(&pTex->field_20, 4, 1, pFile); + fread(&pTex->field_24, 4, 1, pFile); + fread(&pTex->uWidth, 4, 1, pFile); + fread(&pTex->uHeight, 4, 1, pFile); + fread(&pTex->field_30, 4, 1, pFile); + fread(&pTex->field_34, 4, 1, pFile); + pTex->pPixels = new unsigned __int16[pTex->uWidth * pTex->uHeight]; - if ( DstBuf ) - { - pDestc = new char[DstBuf]; - fread(pDestc, 1u, DstBuf, pFile); - pSource = 2 * pTex->uWidth * pTex->uHeight; - zlib::MemUnzip(pTex->pPixels, &pSource, pDestc, DstBuf); - delete [] pDestc; + if (uCompressedSize) + { + auto pCompressedData = new char[uCompressedSize]; + { + fread(pCompressedData, 1, uCompressedSize, pFile); + auto uDecompressedSize = pTex->uWidth * pTex->uHeight * sizeof(short); + zlib::MemUnzip(pTex->pPixels, &uDecompressedSize, pCompressedData, uCompressedSize); + } + delete [] pCompressedData; } else - { fread(pTex->pPixels, 2, pTex->uWidth * pTex->uHeight, pFile); - } + if ( field_61A94_scale_hwls_to_half ) { v11 = pTex->uHeight / 2; @@ -11142,12 +11152,12 @@ } return pTex; //result = pTex; - } - else - { +// } +// else +// { //LABEL_8: - return nullptr; - } +// return nullptr; +// } } //----- (0045271F) -------------------------------------------------------- diff -r ac0fb48cd27a -r 2ca04ccb612a Render.h --- a/Render.h Tue Oct 09 13:09:08 2012 +0200 +++ b/Render.h Wed Oct 10 14:21:15 2012 +0200 @@ -116,6 +116,11 @@ #pragma pack(push, 1) struct HWLTexture { + inline HWLTexture(): + field_0(0), field_4(0), field_8(0), + field_C(0), field_10(0), field_14(0) + {} + int field_0; int field_4; int field_8; diff -r ac0fb48cd27a -r 2ca04ccb612a Texture.h --- a/Texture.h Tue Oct 09 13:09:08 2012 +0200 +++ b/Texture.h Wed Oct 10 14:21:15 2012 +0200 @@ -331,19 +331,32 @@ +struct stru355 +{ + int field_0; + int field_4; + int field_8; + int field_C; + int field_10; + int field_14; + int field_18; + int field_1C; +}; /* 390 */ #pragma pack(push, 1) struct stru350 { stru350 *_450DDE(); - void *_450DF1(const char *Src, const char *a3); + bool _450DF1(const stru355 *p1, const stru355 *p2); unsigned int _450F55(int a2); int _450FB1(int a2); - int sub_451007_scale_image_bicubic(int a2, signed int a3, signed int a4, int a5, signed int a6, signed int a7, signed int a8, int a9, int a10, int a11); + int sub_451007_scale_image_bicubic(unsigned short *pSrc, int srcWidth, int srcHeight, int srcPitch, + unsigned short *pDst, int dstWidth, int dstHeight, int dstPitch, + int a9, int a10); - int field_0[8]; - int array_20[8]; + stru355 field_0; + stru355 field_20; int field_40; int field_44; int field_48; diff -r ac0fb48cd27a -r 2ca04ccb612a VideoPlayer.cpp --- a/VideoPlayer.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/VideoPlayer.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -1130,7 +1130,7 @@ if ( EnterHouse((enum HOUSE_TYPE)165) ) { pAudioPlayer->PlaySound(SOUND_0, 0, 0, -1, 0, 0, 0, 0); - ptr_507BC0 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior, 165, 0); + ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0); ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0); ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0); ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0); diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_1.cpp --- a/mm7_1.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_1.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -1569,7 +1569,7 @@ { while ( 2 ) { - v4 = (GUIWindow *)&pWindowList_at_506F50_minus1_indexing[21 * pVisibleWindowsIdxs[v2]]; + v4 = &pWindowList[pVisibleWindowsIdxs[v2] - 1]; for ( result = v4->pControlsHead; result; result = result->pNext ) { if ( result->uHotkey == v3 ) @@ -1619,14 +1619,16 @@ for ( i = uNumVisibleWindows; i >= 0; --i ) { result = 84 * pVisibleWindowsIdxs[i]; - for ( j = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); j; j = j->pNext ) + //for ( j = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); j; j = j->pNext ) + for ( j = pWindowList[pVisibleWindowsIdxs[i] - 1].pControlsHead; j; j = j->pNext ) j->field_28 = 0; } } for ( k = uNumVisibleWindows; k >= 0; --k ) { result = 84 * pVisibleWindowsIdxs[k]; - for ( l = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); l; l = l->pNext ) + //for ( l = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); l; l = l->pNext ) + for ( l = pWindowList[pVisibleWindowsIdxs[k] - 1].pControlsHead; l; l = l->pNext ) { LOBYTE(result) = v10; if ( l->uHotkey == v10 ) @@ -1671,7 +1673,7 @@ pFontCreate->field_3 = 0; for (uint i = 0; i < 20; ++i) - pWindowList[i].uWindowType = 0; + pWindowList[i].eWindowType = WINDOW_null; uNumVisibleWindows = -1; memset(pVisibleWindowsIdxs, 0, sizeof(pVisibleWindowsIdxs)); @@ -1753,7 +1755,8 @@ uTextureID_BUTTYES2 = pIcons_LOD->LoadTexture("BUTTYES2", TEXTURE_16BIT_PALETTE); uTextureID_BUTTMAKE = pIcons_LOD->LoadTexture("BUTTMAKE", TEXTURE_16BIT_PALETTE); uTextureID_BUTTMAKE2 = pIcons_LOD->LoadTexture("BUTTMAKE2", TEXTURE_16BIT_PALETTE); - pGUIWindow0 = GUIWindow::Create(0, 0, 640u, 480u, WINDOW_Credits, 0, 0); + + pGUIWindow0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); pGUIWindow0->CreateButton(7u, 8u, 0x1CCu, 0x157u, 1, 0, 0xAu, 0, 0, nullstring, 0); pGUIWindow0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0); pGUIWindow0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0); @@ -3922,7 +3925,7 @@ char v4; // al@17 bool v5; // eax@21 GUIButton Dst; // [sp+8h] [bp-DCh]@19 - double v7; // [sp+C4h] [bp-20h]@17 + //double v7; // [sp+C4h] [bp-20h]@17 float v8; // [sp+CCh] [bp-18h]@17 __int64 v9; // [sp+D0h] [bp-14h]@17 unsigned int v10; // [sp+D8h] [bp-Ch]@9 @@ -3973,11 +3976,11 @@ } v9 = v3; v8 = (double)v3 * 0.001953125 * 120.0; - v7 = v8 + 6.7553994e15; - HIDWORD(v9) = LODWORD(v7); - v4 = LOBYTE(v7) + 1; - byte_4E2BC8 = LOBYTE(v7) + 1; - if ( (unsigned __int8)(LOBYTE(v7) + 1) >= 0x78u ) + //v7 = v8 + 6.7553994e15; + HIDWORD(v9) = floorf(v8);//LODWORD(v7); + v4 = (int)floorf(v8) % 256 + 1;//LOBYTE(v7) + 1; + byte_4E2BC8 = v4; + if ( (unsigned __int8)(v4) >= 0x78u ) { v4 = 1; byte_4E2BC8 = 1; @@ -5077,7 +5080,7 @@ if ( !v25 ) { if ( v23->IsInteractive() ) - v26 = (const char *)dword_722240[2 * stru_5E4C90.field_0[v24->field_1C]]; + v26 = pNPCTopics[stru_5E4C90.field_0[v24->field_1C] + 379].pTopic; else v26 = pDecorationList->pDecorations[v24->uDecorationDescID].field_20; goto LABEL_87; @@ -5365,7 +5368,7 @@ bRingsShownInCharScreen = 0; CharacterUI_LoadPaperdollTextures(); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = v1; - v2 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_CharacterRecord, uActiveCharacter, 0); + v2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_CharacterRecord, uActiveCharacter, 0); pCharacterScreen_StatsBtn = v2->CreateButton( pViewport->uViewportX + 12, pViewport->uViewportY + 308, @@ -5474,7 +5477,7 @@ bRingsShownInCharScreen = 0; CharacterUI_LoadPaperdollTextures(); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 23; - v2 = GUIWindow::Create(0, 0, 640u, 480u, WINDOW_HouseInterior|WINDOW_Options, v1, 0); + v2 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|WINDOW_Options), v1, 0); ptr_50767C = v2->CreateButton( 394u, 318u, diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_2.cpp --- a/mm7_2.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_2.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -546,7 +546,7 @@ { v65 = pFontArrus; pOutString = pFontArrus; - strcpy(pTmpBuf, pStr_72217C); + strcpy(pTmpBuf, pNPCTopics[354].pText); v78.uFrameWidth = 460; v78.uFrameZ = 452; v62 = v65->CalcTextHeight(pTmpBuf, &v78, 12, 0) + 7; @@ -596,7 +596,7 @@ v66 = (174 - pFontArrus->CalcTextHeight(v26, &v79, 0, 0)) / 2 + 138; goto LABEL_98; } - strcpy(pTmpBuf, *(const char **)&dword_721E24[8 * (unsigned int)ptr_507BC0->ptr_1C]); + strcpy(pTmpBuf, pNPCTopics[(uint)ptr_507BC0->ptr_1C + 247].pText); v78.uFrameWidth = 460; v78.uFrameZ = 452; v61 = pFontArrus->CalcTextHeight(pTmpBuf, &v78, 12, 0); @@ -3132,7 +3132,7 @@ // 50C9DC: using guessed type int dword_50C9DC; //----- (004BBA85) -------------------------------------------------------- -int __cdecl sub_4BBA85_bounties() +const char *sub_4BBA85_bounties() { int v0; // edi@1 signed __int64 v1; // qax@2 @@ -3142,11 +3142,11 @@ __int16 v5; // ax@14 char v6; // zf@14 Player *v7; // ebx@16 - int result; // eax@19 + const char *result; // eax@19 uDialogueType = 83; pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 640u, 350u, WINDOW_Credits, 0, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 350, WINDOW_MainMenu, 0, 0); ptr_5076F4 = pDialogueWindow->CreateButton( 471u, 445u, @@ -3158,7 +3158,7 @@ 0, 0, pGlobalTXT_LocalizationStrings[34],// "Cancel" - (Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0), + (Texture *)(uTextureID_506438 != -1 ? &pIcons_LOD->pTextures[uTextureID_506438] : 0), 0); pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, nullstring, 0); pDialogueWindow->CreateButton(480u, 160u, 140u, 30u, 1, 0, 0, 0x53u, 0, nullstring, 0); @@ -3193,9 +3193,9 @@ if ( v6 ) { v6 = v5 == 0; - result = dword_722164; + result = pNPCTopics[351].pText; if ( v6 ) - result = dword_722174; + result = pNPCTopics[353].pText; } else { @@ -3213,16 +3213,11 @@ pParty->field_750[v4] = 0; pParty->field_75A[v4] = 0; } - result = dword_72216C; + result = pNPCTopics[352].pText; } dword_F8B1A4 = (char *)result; return result; } -// 722164: using guessed type int dword_722164; -// 72216C: using guessed type int dword_72216C; -// 722174: using guessed type int dword_722174; -// F8B19C: using guessed type int dword_F8B19C; -// F8B1A0: using guessed type __int16 word_F8B1A0; //----- (004BBCDD) -------------------------------------------------------- void __cdecl sub_4BBCDD() @@ -3698,7 +3693,7 @@ GUIButton *__cdecl sub_4BCA33() { pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x159u, WINDOW_Credits, 0, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x159u, WINDOW_MainMenu, 0, 0); ptr_5076F4 = pDialogueWindow->CreateButton( 0x1D7u, 0x1BDu, @@ -3814,12 +3809,12 @@ { LABEL_9: pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x159u, WINDOW_Credits, v1, v1); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x159u, WINDOW_MainMenu, v1, v1); ptr_5076F4 = pDialogueWindow->CreateButton( - 526u, - 445u, - 75u, - 33u, + 526, + 445, + 75, + 33, 1, v1, 0x71u, @@ -4081,9 +4076,9 @@ { v1 = 0; v27 = v26 == v13; - v29 = dword_722164; + v29 = (int)pNPCTopics[351].pText; if ( v27 ) - v29 = dword_722174; + v29 = (int)pNPCTopics[353].pText; dword_F8B1A4 = (char *)v29; } else @@ -4103,7 +4098,7 @@ pParty->field_75A[v25] = v13; } v1 = 0; - dword_F8B1A4 = (char *)dword_72216C; + dword_F8B1A4 = pNPCTopics[352].pText; } goto LABEL_196; } @@ -4121,12 +4116,12 @@ switch ( v55 ) { case 96: - pDialogueWindow->uWindowType = 1; + pDialogueWindow->eWindowType = WINDOW_MainMenu; sub_4BCA33(); sub_4B3703((void *)dword_F8B198); break; case 101: - pDialogueWindow->uWindowType = 1; + pDialogueWindow->eWindowType = WINDOW_MainMenu; sub_4BCA33(); sub_4B3A72(dword_F8B198); break; @@ -4203,7 +4198,7 @@ { if ( v55 == 94 ) { - pDialogueWindow->uWindowType = 1; + pDialogueWindow->eWindowType = WINDOW_MainMenu; sub_4BCA33(); sub_4B3AD4(dword_F8B198); } @@ -5115,7 +5110,7 @@ pRenderer->EndScene(); free(_this.pPixels); _this.pPixels = 0; - ptr_507BC0 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_Credits, 0, 0); + ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); pWindow.uFrameX = 75; pWindow.uFrameY = 60; pWindow.uFrameWidth = 469; @@ -6120,12 +6115,14 @@ //----- (00451007) -------------------------------------------------------- -int stru350::sub_451007_scale_image_bicubic(int a2, signed int a3, signed int a4, int a5, signed int a6, signed int a7, signed int a8, int a9, int a10, int a11) -{ - signed int v11; // esi@1 - signed int result; // eax@1 - signed int v13; // edi@8 - signed int v14; // ecx@10 +int stru350::sub_451007_scale_image_bicubic(unsigned short *pSrc, int srcWidth, int srcHeight, int srcPitch, + unsigned short *pDst, int dstWidth, int dstHeight, int dstPitch, + int a10, int a11) +{ + int v11; // esi@1 + int result; // eax@1 + int v13; // edi@8 + int v14; // ecx@10 double v15; // st7@11 double v16; // st6@11 float v17; // ST3C_4@12 @@ -6135,9 +6132,9 @@ int v21; // eax@18 unsigned int v22; // ecx@25 unsigned int v23; // eax@29 - signed int v24; // ecx@29 - signed int v25; // edi@33 - signed int v26; // ecx@35 + unsigned __int16 *v24; // ecx@29 + int v25; // edi@33 + int v26; // ecx@35 double v27; // st7@36 double v28; // st6@36 float v29; // ST34_4@37 @@ -6146,10 +6143,10 @@ int v32; // eax@41 int v33; // eax@43 unsigned int v34; // ecx@50 - __int16 v35; // ax@54 - signed int v36; // ecx@54 - signed int v37; // edi@58 - signed int v38; // ecx@60 + unsigned __int16 v35; // ax@54 + unsigned __int16 *v36; // ecx@54 + int v37; // edi@58 + int v38; // ecx@60 double v39; // st7@61 double v40; // st6@61 float v41; // ST34_4@62 @@ -6159,9 +6156,9 @@ int v45; // eax@68 unsigned int v46; // ecx@75 char v47; // al@79 - signed int v48; // ecx@79 - signed int v49; // edi@86 - signed int v50; // ecx@88 + unsigned __int16 *v48; // ecx@79 + int v49; // edi@86 + int v50; // ecx@88 double v51; // st7@89 double v52; // st6@89 float v53; // ST34_4@90 @@ -6171,9 +6168,9 @@ int v57; // eax@96 unsigned int v58; // ecx@103 unsigned int v59; // eax@107 - signed int v60; // ecx@107 - signed int v61; // edi@111 - signed int v62; // ecx@113 + unsigned __int16 *v60; // ecx@107 + int v61; // edi@111 + int v62; // ecx@113 double v63; // st7@114 double v64; // st6@114 float v65; // ST34_4@115 @@ -6182,10 +6179,10 @@ int v68; // eax@119 int v69; // eax@121 unsigned int v70; // ecx@128 - __int16 v71; // ax@132 - signed int v72; // ecx@132 - signed int v73; // edi@136 - signed int v74; // ecx@138 + unsigned __int16 v71; // ax@132 + unsigned __int16 *v72; // ecx@132 + int v73; // edi@136 + int v74; // ecx@138 double v75; // st7@139 double v76; // st6@139 float v77; // ST34_4@140 @@ -6195,9 +6192,9 @@ int v81; // eax@146 unsigned int v82; // ecx@153 char v83; // al@157 - signed int v84; // ecx@157 - signed int v85; // edi@164 - signed int v86; // ecx@166 + unsigned __int16 *v84; // ecx@157 + int v85; // edi@164 + int v86; // ecx@166 double v87; // st7@167 double v88; // st6@167 float v89; // ST34_4@168 @@ -6208,9 +6205,9 @@ int v94; // eax@173 unsigned int v95; // ecx@181 unsigned int v96; // eax@185 - signed int v97; // ecx@185 - signed int v98; // edi@189 - signed int v99; // ecx@191 + unsigned __int16 *v97; // ecx@185 + int v98; // edi@189 + int v99; // ecx@191 double v100; // st7@192 double v101; // st6@192 float v102; // ST34_4@193 @@ -6220,10 +6217,10 @@ int v106; // eax@196 int v107; // eax@198 unsigned int v108; // ecx@206 - __int16 v109; // ax@210 - signed int v110; // ecx@210 - signed int v111; // edi@214 - signed int v112; // ecx@216 + unsigned __int16 v109; // ax@210 + unsigned __int16 *v110; // ecx@210 + int v111; // edi@214 + int v112; // ecx@216 double v113; // st7@217 double v114; // st6@217 float v115; // ST34_4@218 @@ -6234,12 +6231,13 @@ int v120; // eax@223 unsigned int v121; // ecx@231 char v122; // al@235 - signed int v123; // ecx@235 + unsigned __int16 *v123; // ecx@235 double v124; // [sp+Ch] [bp-7Ch]@12 double v125; // [sp+Ch] [bp-7Ch]@37 double v126; // [sp+Ch] [bp-7Ch]@62 double v127; // [sp+Ch] [bp-7Ch]@90 - double v128; // [sp+Ch] [bp-7Ch]@115 + //double v128; // [sp+Ch] [bp-7Ch]@115 + uint _v128; double v129; // [sp+Ch] [bp-7Ch]@140 double v130; // [sp+Ch] [bp-7Ch]@168 double v131; // [sp+Ch] [bp-7Ch]@193 @@ -6248,7 +6246,8 @@ double v134; // [sp+14h] [bp-74h]@37 double v135; // [sp+14h] [bp-74h]@62 double v136; // [sp+14h] [bp-74h]@90 - double v137; // [sp+14h] [bp-74h]@115 + //double v137; // [sp+14h] [bp-74h]@115 + uint _v137; double v138; // [sp+14h] [bp-74h]@140 double v139; // [sp+14h] [bp-74h]@168 double v140; // [sp+14h] [bp-74h]@193 @@ -6257,7 +6256,8 @@ double v143; // [sp+1Ch] [bp-6Ch]@37 double v144; // [sp+1Ch] [bp-6Ch]@62 double v145; // [sp+1Ch] [bp-6Ch]@90 - double v146; // [sp+1Ch] [bp-6Ch]@115 + //double v146; // [sp+1Ch] [bp-6Ch]@115 + uint _v146; double v147; // [sp+1Ch] [bp-6Ch]@140 double v148; // [sp+1Ch] [bp-6Ch]@168 double v149; // [sp+1Ch] [bp-6Ch]@193 @@ -6266,7 +6266,8 @@ double v152; // [sp+24h] [bp-64h]@37 double v153; // [sp+24h] [bp-64h]@62 double v154; // [sp+24h] [bp-64h]@90 - double v155; // [sp+24h] [bp-64h]@115 + //double v155; // [sp+24h] [bp-64h]@115 + uint _v155; double v156; // [sp+24h] [bp-64h]@140 double v157; // [sp+24h] [bp-64h]@168 double v158; // [sp+24h] [bp-64h]@193 @@ -6286,43 +6287,43 @@ int v172; // [sp+48h] [bp-40h]@91 int v173; // [sp+48h] [bp-40h]@116 int v174; // [sp+48h] [bp-40h]@141 - int v175; // [sp+4Ch] [bp-3Ch]@13 + unsigned __int16 *v175; // [sp+4Ch] [bp-3Ch]@13 int *v176; // [sp+50h] [bp-38h]@15 int *v177; // [sp+50h] [bp-38h]@40 int *v178; // [sp+50h] [bp-38h]@65 int *v179; // [sp+50h] [bp-38h]@93 int *v180; // [sp+50h] [bp-38h]@118 int *v181; // [sp+50h] [bp-38h]@143 - int v182; // [sp+50h] [bp-38h]@169 - int v183; // [sp+50h] [bp-38h]@194 - int v184; // [sp+50h] [bp-38h]@219 - int v185; // [sp+54h] [bp-34h]@38 - int v186; // [sp+54h] [bp-34h]@63 - int v187; // [sp+54h] [bp-34h]@91 - int v188; // [sp+54h] [bp-34h]@116 - int v189; // [sp+54h] [bp-34h]@141 + char *v182; // [sp+50h] [bp-38h]@169 + char *v183; // [sp+50h] [bp-38h]@194 + char *v184; // [sp+50h] [bp-38h]@219 + unsigned __int16 *v185; // [sp+54h] [bp-34h]@38 + unsigned __int16 *v186; // [sp+54h] [bp-34h]@63 + unsigned __int16 *v187; // [sp+54h] [bp-34h]@91 + unsigned __int16 *v188; // [sp+54h] [bp-34h]@116 + unsigned __int16 *v189; // [sp+54h] [bp-34h]@141 signed int v190; // [sp+54h] [bp-34h]@170 signed int v191; // [sp+54h] [bp-34h]@195 signed int v192; // [sp+54h] [bp-34h]@220 - signed int v193; // [sp+5Ch] [bp-2Ch]@7 - signed int v194; // [sp+5Ch] [bp-2Ch]@32 - signed int v195; // [sp+5Ch] [bp-2Ch]@57 - signed int v196; // [sp+5Ch] [bp-2Ch]@85 - signed int v197; // [sp+5Ch] [bp-2Ch]@110 - signed int v198; // [sp+5Ch] [bp-2Ch]@135 - signed int v199; // [sp+5Ch] [bp-2Ch]@163 - signed int v200; // [sp+5Ch] [bp-2Ch]@188 - signed int v201; // [sp+5Ch] [bp-2Ch]@213 - stru350 *v202; // [sp+60h] [bp-28h]@1 - signed int v203; // [sp+64h] [bp-24h]@12 - signed int v204; // [sp+64h] [bp-24h]@37 - signed int v205; // [sp+64h] [bp-24h]@62 - signed int v206; // [sp+64h] [bp-24h]@90 - signed int v207; // [sp+64h] [bp-24h]@115 - signed int v208; // [sp+64h] [bp-24h]@140 - signed int v209; // [sp+64h] [bp-24h]@168 - signed int v210; // [sp+64h] [bp-24h]@193 - signed int v211; // [sp+64h] [bp-24h]@218 + unsigned __int16 *v193; // [sp+5Ch] [bp-2Ch]@7 + unsigned __int16 *v194; // [sp+5Ch] [bp-2Ch]@32 + unsigned __int16 *v195; // [sp+5Ch] [bp-2Ch]@57 + unsigned __int16 *v196; // [sp+5Ch] [bp-2Ch]@85 + unsigned __int16 *v197; // [sp+5Ch] [bp-2Ch]@110 + unsigned __int16 *v198; // [sp+5Ch] [bp-2Ch]@135 + unsigned __int16 *v199; // [sp+5Ch] [bp-2Ch]@163 + unsigned __int16 *v200; // [sp+5Ch] [bp-2Ch]@188 + unsigned __int16 *v201; // [sp+5Ch] [bp-2Ch]@213 + //stru350 *v202; // [sp+60h] [bp-28h]@1 + int v203; // [sp+64h] [bp-24h]@12 + int v204; // [sp+64h] [bp-24h]@37 + int v205; // [sp+64h] [bp-24h]@62 + int v206; // [sp+64h] [bp-24h]@90 + int v207; // [sp+64h] [bp-24h]@115 + int v208; // [sp+64h] [bp-24h]@140 + int v209; // [sp+64h] [bp-24h]@168 + int v210; // [sp+64h] [bp-24h]@193 + int v211; // [sp+64h] [bp-24h]@218 float v212; // [sp+6Ch] [bp-1Ch]@11 float v213; // [sp+6Ch] [bp-1Ch]@36 float v214; // [sp+6Ch] [bp-1Ch]@61 @@ -6372,52 +6373,52 @@ unsigned int v258; // [sp+84h] [bp-4h]@168 unsigned int v259; // [sp+84h] [bp-4h]@193 unsigned int v260; // [sp+84h] [bp-4h]@218 - signed int v261; // [sp+A0h] [bp+18h]@10 - float v262; // [sp+A0h] [bp+18h]@12 - float v263; // [sp+A0h] [bp+18h]@12 - unsigned int v264; // [sp+A0h] [bp+18h]@12 - signed int v265; // [sp+A0h] [bp+18h]@35 - float v266; // [sp+A0h] [bp+18h]@37 - float v267; // [sp+A0h] [bp+18h]@37 - unsigned int v268; // [sp+A0h] [bp+18h]@37 - signed int v269; // [sp+A0h] [bp+18h]@60 - float v270; // [sp+A0h] [bp+18h]@62 - float v271; // [sp+A0h] [bp+18h]@62 - unsigned int v272; // [sp+A0h] [bp+18h]@62 - signed int v273; // [sp+A0h] [bp+18h]@88 - float v274; // [sp+A0h] [bp+18h]@90 - float v275; // [sp+A0h] [bp+18h]@90 - unsigned int v276; // [sp+A0h] [bp+18h]@90 - signed int v277; // [sp+A0h] [bp+18h]@113 - float v278; // [sp+A0h] [bp+18h]@115 - float v279; // [sp+A0h] [bp+18h]@115 - unsigned int v280; // [sp+A0h] [bp+18h]@115 - signed int v281; // [sp+A0h] [bp+18h]@138 - float v282; // [sp+A0h] [bp+18h]@140 - float v283; // [sp+A0h] [bp+18h]@140 - unsigned int v284; // [sp+A0h] [bp+18h]@140 - signed int v285; // [sp+A0h] [bp+18h]@166 - float v286; // [sp+A0h] [bp+18h]@168 - float v287; // [sp+A0h] [bp+18h]@168 - unsigned int v288; // [sp+A0h] [bp+18h]@168 - signed int v289; // [sp+A0h] [bp+18h]@191 - float v290; // [sp+A0h] [bp+18h]@193 - float v291; // [sp+A0h] [bp+18h]@193 - unsigned int v292; // [sp+A0h] [bp+18h]@193 - signed int v293; // [sp+A0h] [bp+18h]@216 - float v294; // [sp+A0h] [bp+18h]@218 - float v295; // [sp+A0h] [bp+18h]@218 - unsigned int v296; // [sp+A0h] [bp+18h]@218 - int v297; // [sp+ACh] [bp+24h]@8 - int v298; // [sp+ACh] [bp+24h]@33 - int v299; // [sp+ACh] [bp+24h]@86 - int v300; // [sp+ACh] [bp+24h]@111 - int v301; // [sp+ACh] [bp+24h]@164 - int v302; // [sp+ACh] [bp+24h]@189 + signed int a6a; // [sp+A0h] [bp+18h]@10 + float a6s; // [sp+A0h] [bp+18h]@12 + float a6t; // [sp+A0h] [bp+18h]@12 + unsigned int a6b; // [sp+A0h] [bp+18h]@12 + signed int a6c; // [sp+A0h] [bp+18h]@35 + float a6u; // [sp+A0h] [bp+18h]@37 + float a6v; // [sp+A0h] [bp+18h]@37 + unsigned int a6d; // [sp+A0h] [bp+18h]@37 + signed int a6e; // [sp+A0h] [bp+18h]@60 + float a6w; // [sp+A0h] [bp+18h]@62 + float a6x; // [sp+A0h] [bp+18h]@62 + unsigned int a6f; // [sp+A0h] [bp+18h]@62 + signed int a6g; // [sp+A0h] [bp+18h]@88 + float a6y; // [sp+A0h] [bp+18h]@90 + float a6z; // [sp+A0h] [bp+18h]@90 + unsigned int a6h; // [sp+A0h] [bp+18h]@90 + signed int a6i; // [sp+A0h] [bp+18h]@113 + float a6ba; // [sp+A0h] [bp+18h]@115 + float a6bb; // [sp+A0h] [bp+18h]@115 + unsigned int a6j; // [sp+A0h] [bp+18h]@115 + signed int a6k; // [sp+A0h] [bp+18h]@138 + float a6bc; // [sp+A0h] [bp+18h]@140 + float a6bd; // [sp+A0h] [bp+18h]@140 + unsigned int a6l; // [sp+A0h] [bp+18h]@140 + signed int a6m; // [sp+A0h] [bp+18h]@166 + float a6be; // [sp+A0h] [bp+18h]@168 + float a6bf; // [sp+A0h] [bp+18h]@168 + unsigned int a6n; // [sp+A0h] [bp+18h]@168 + signed int a6o; // [sp+A0h] [bp+18h]@191 + float a6bg; // [sp+A0h] [bp+18h]@193 + float a6bh; // [sp+A0h] [bp+18h]@193 + unsigned int a6p; // [sp+A0h] [bp+18h]@193 + signed int a6q; // [sp+A0h] [bp+18h]@216 + float a6bi; // [sp+A0h] [bp+18h]@218 + float a6bj; // [sp+A0h] [bp+18h]@218 + unsigned int a6r; // [sp+A0h] [bp+18h]@218 + int a9a; // [sp+ACh] [bp+24h]@8 + int a9b; // [sp+ACh] [bp+24h]@33 + int a9c; // [sp+ACh] [bp+24h]@86 + int a9d; // [sp+ACh] [bp+24h]@111 + int a9e; // [sp+ACh] [bp+24h]@164 + int a9f; // [sp+ACh] [bp+24h]@189 v11 = 0; - result = this->field_0[3]; - v202 = this; + result = this->field_0.field_C; + //v202 = this; v230 = 0; if ( result != 8 ) { @@ -6425,47 +6426,47 @@ { if ( result != 32 ) return result; - result = this->array_20[3]; + result = this->field_20.field_C; if ( result != 8 ) { if ( result != 16 ) { - if ( result != 32 || (result = a6, v193 = a6, v231 = 0, a8 <= 0) ) + if ( result != 32 || (result = (int)pDst, v193 = pDst, v231 = 0, dstHeight <= 0) ) return result; - v13 = a7; - v297 = 4 * (a9 - a7); + v13 = dstWidth; + a9a = 4 * (dstPitch - dstWidth); while ( 1 ) { v14 = 0; - v261 = 0; - if ( a7 > v11 ) + a6a = 0; + if ( dstWidth > v11 ) break; LABEL_30: - v193 += v297; + v193 = (unsigned __int16 *)((char *)v193 + a9a); ++v231; result = v231; - if ( v231 >= a8 ) + if ( v231 >= dstHeight ) return result; v11 = 0; } - v221 = (double)a7; - v212 = (double)a3; - v15 = (double)a8; - v16 = (double)a4; + v221 = (double)dstWidth; + v212 = (double)srcWidth; + v15 = (double)dstHeight; + v16 = (double)srcHeight; while ( 1 ) { - v262 = (double)v261 / v221 * v212; - v151 = v262 + 6.7553994e15; + a6s = (double)a6a / v221 * v212; + v151 = floorf(a6s);//a6s + 6.7553994e15; v203 = v14 + 1; - v263 = (double)(v14 + 1) / v221 * v212; - v142 = v263 + 6.7553994e15; + a6t = (double)(v14 + 1) / v221 * v212; + v142 = floorf(a6t);//a6t + 6.7553994e15; v17 = (double)v231 / v15 * v16; - v133 = v17 + 6.7553994e15; + v133 = floorf(v17);//v17 + 6.7553994e15; v18 = (double)(v231 + 1) / v15 * v16; - v124 = v18 + 6.7553994e15; + v124 = floorf(v18);//v18 + 6.7553994e15; v19 = (LODWORD(v124) - LODWORD(v133)) * (LODWORD(v142) - LODWORD(v151)); v252 = 0; - v264 = 0; + a6b = 0; v240 = 0i64; if ( SLODWORD(v133) < SLODWORD(v124) ) break; @@ -6473,27 +6474,27 @@ v22 = (unsigned int)v240 / ((LODWORD(v124) - LODWORD(v133)) * (LODWORD(v142) - LODWORD(v151))); if ( v19 ) { - v264 /= v19; + a6b /= v19; v252 /= v19; HIDWORD(v240) /= v19; } if ( v22 != 255 ) v22 &= 0x7FFFFFFFu; - v23 = v202->_450F55(HIDWORD(v240) | ((v252 | ((v264 | (v22 << 8)) << 8)) << 8)); + v23 = _450F55(HIDWORD(v240) | ((v252 | ((a6b | (v22 << 8)) << 8)) << 8)); v24 = v193; - v193 += 4; - *(int *)v24 = v23; + v193 += 2; + *(_DWORD *)v24 = v23; v14 = v203; - v261 = v203; - if ( v203 >= a7 ) + a6a = v203; + if ( v203 >= dstWidth ) goto LABEL_30; } v160 = LODWORD(v124) - LODWORD(v133); - v175 = a2 + 4 * (LODWORD(v151) + a5 * LODWORD(v133)); + v175 = &pSrc[2 * (LODWORD(v151) + srcPitch * LODWORD(v133))]; while ( SLODWORD(v151) >= SLODWORD(v142) ) { LABEL_24: - v175 += 4 * a5; + v175 += 2 * srcPitch; --v160; if ( !v160 ) goto LABEL_25; @@ -6508,7 +6509,7 @@ v230 = 1; v13 = v20 != a11 ? 0xFF : 0; } - v21 = v202->_450FB1(v20); + v21 = _450FB1(v20); if ( !v230 ) break; LODWORD(v240) = v13 + v240; @@ -6524,50 +6525,50 @@ } LODWORD(v240) = ((unsigned int)v21 >> 24) + v240; LABEL_22: - v264 += BYTE2(v21); + a6b += BYTE2(v21); v252 += BYTE1(v21); HIDWORD(v240) += (unsigned __int8)v21; goto LABEL_23; } - result = a6; - v194 = a6; + result = (int)pDst; + v194 = pDst; v232 = 0; - if ( a8 <= 0 ) + if ( dstHeight <= 0 ) return result; - v25 = a7; - v298 = 2 * (a9 - a7); + v25 = dstWidth; + a9b = 2 * (dstPitch - dstWidth); while ( 1 ) { v26 = 0; - v265 = 0; - if ( a7 > v11 ) + a6c = 0; + if ( dstWidth > v11 ) break; LABEL_55: - v194 += v298; + v194 = (unsigned __int16 *)((char *)v194 + a9b); ++v232; result = v232; - if ( v232 >= a8 ) + if ( v232 >= dstHeight ) return result; v11 = 0; } - v222 = (double)a7; - v213 = (double)a3; - v27 = (double)a8; - v28 = (double)a4; + v222 = (double)dstWidth; + v213 = (double)srcWidth; + v27 = (double)dstHeight; + v28 = (double)srcHeight; while ( 1 ) { - v266 = (double)v265 / v222 * v213; - v125 = v266 + 6.7553994e15; + a6u = (double)a6c / v222 * v213; + v125 = a6u + 6.7553994e15; v204 = v26 + 1; - v267 = (double)(v26 + 1) / v222 * v213; - v134 = v267 + 6.7553994e15; + a6v = (double)(v26 + 1) / v222 * v213; + v134 = a6v + 6.7553994e15; v29 = (double)v232 / v27 * v28; v143 = v29 + 6.7553994e15; v30 = (double)(v232 + 1) / v27 * v28; v152 = v30 + 6.7553994e15; v31 = (LODWORD(v152) - LODWORD(v143)) * (LODWORD(v134) - LODWORD(v125)); v253 = 0; - v268 = 0; + a6d = 0; v241 = 0i64; if ( SLODWORD(v143) < SLODWORD(v152) ) break; @@ -6575,27 +6576,27 @@ v34 = (unsigned int)v241 / ((LODWORD(v152) - LODWORD(v143)) * (LODWORD(v134) - LODWORD(v125))); if ( v31 ) { - v268 /= v31; + a6d /= v31; v253 /= v31; HIDWORD(v241) /= v31; } if ( v34 != 255 ) v34 &= 0x7FFFFFFFu; - v35 = v202->_450F55(HIDWORD(v241) | ((v253 | ((v268 | (v34 << 8)) << 8)) << 8)); + v35 = _450F55(HIDWORD(v241) | ((v253 | ((a6d | (v34 << 8)) << 8)) << 8)); v36 = v194; - v194 += 2; - *(short *)v36 = v35; + ++v194; + *v36 = v35; v26 = v204; - v265 = v204; - if ( v204 >= a7 ) + a6c = v204; + if ( v204 >= dstWidth ) goto LABEL_55; } v170 = LODWORD(v152) - LODWORD(v143); - v185 = a2 + 4 * (LODWORD(v125) + a5 * LODWORD(v143)); + v185 = &pSrc[2 * (LODWORD(v125) + srcPitch * LODWORD(v143))]; while ( SLODWORD(v125) >= SLODWORD(v134) ) { LABEL_49: - v185 += 4 * a5; + v185 += 2 * srcPitch; --v170; if ( !v170 ) goto LABEL_50; @@ -6610,7 +6611,7 @@ v230 = 1; v25 = v32 != a11 ? 0xFF : 0; } - v33 = v202->_450FB1(v32); + v33 = _450FB1(v32); if ( !v230 ) break; LODWORD(v241) = v25 + v241; @@ -6626,49 +6627,49 @@ } LODWORD(v241) = ((unsigned int)v33 >> 24) + v241; LABEL_47: - v268 += BYTE2(v33); + a6d += BYTE2(v33); v253 += BYTE1(v33); HIDWORD(v241) += (unsigned __int8)v33; goto LABEL_48; } - result = a6; - v195 = a6; + result = (int)pDst; + v195 = pDst; v233 = 0; - if ( a8 <= 0 ) + if ( dstHeight <= 0 ) return result; - v37 = a7; + v37 = dstWidth; while ( 1 ) { v38 = 0; - v269 = 0; - if ( a7 > v11 ) + a6e = 0; + if ( dstWidth > v11 ) break; LABEL_80: - v195 += a9 - a7; + v195 = (unsigned __int16 *)((char *)v195 + dstPitch - dstWidth); ++v233; result = v233; - if ( v233 >= a8 ) + if ( v233 >= dstHeight ) return result; v11 = 0; } - v223 = (double)a7; - v214 = (double)a3; - v39 = (double)a8; - v40 = (double)a4; + v223 = (double)dstWidth; + v214 = (double)srcWidth; + v39 = (double)dstHeight; + v40 = (double)srcHeight; while ( 1 ) { - v270 = (double)v269 / v223 * v214; - v126 = v270 + 6.7553994e15; + a6w = (double)a6e / v223 * v214; + v126 = a6w + 6.7553994e15; v205 = v38 + 1; - v271 = (double)(v38 + 1) / v223 * v214; - v135 = v271 + 6.7553994e15; + a6x = (double)(v38 + 1) / v223 * v214; + v135 = a6x + 6.7553994e15; v41 = (double)v233 / v39 * v40; v144 = v41 + 6.7553994e15; v42 = (double)(v233 + 1) / v39 * v40; v153 = v42 + 6.7553994e15; v43 = (LODWORD(v153) - LODWORD(v144)) * (LODWORD(v135) - LODWORD(v126)); v254 = 0; - v272 = 0; + a6f = 0; v242 = 0i64; if ( SLODWORD(v144) < SLODWORD(v153) ) break; @@ -6676,26 +6677,27 @@ v46 = (unsigned int)v242 / ((LODWORD(v153) - LODWORD(v144)) * (LODWORD(v135) - LODWORD(v126))); if ( v43 ) { - v272 /= v43; + a6f /= v43; v254 /= v43; HIDWORD(v242) /= v43; } if ( v46 != 255 ) v46 &= 0x7FFFFFFFu; - v47 = v202->_450F55(HIDWORD(v242) | ((v254 | ((v272 | (v46 << 8)) << 8)) << 8)); - v48 = v195++; - *(char *)v48 = v47; + v47 = _450F55(HIDWORD(v242) | ((v254 | ((a6f | (v46 << 8)) << 8)) << 8)); + v48 = v195; + v195 = (unsigned __int16 *)((char *)v195 + 1); + *(_BYTE *)v48 = v47; v38 = v205; - v269 = v205; - if ( v205 >= a7 ) + a6e = v205; + if ( v205 >= dstWidth ) goto LABEL_80; } v171 = LODWORD(v153) - LODWORD(v144); - v186 = a2 + 4 * (LODWORD(v126) + a5 * LODWORD(v144)); + v186 = &pSrc[2 * (LODWORD(v126) + srcPitch * LODWORD(v144))]; while ( SLODWORD(v126) >= SLODWORD(v135) ) { LABEL_74: - v186 += 4 * a5; + v186 += 2 * srcPitch; --v171; if ( !v171 ) goto LABEL_75; @@ -6710,7 +6712,7 @@ v230 = 1; v37 = v44 != a11 ? 0xFF : 0; } - v45 = v202->_450FB1(v44); + v45 = _450FB1(v44); if ( !v230 ) break; LODWORD(v242) = v37 + v242; @@ -6726,52 +6728,52 @@ } LODWORD(v242) = ((unsigned int)v45 >> 24) + v242; LABEL_72: - v272 += BYTE2(v45); + a6f += BYTE2(v45); v254 += BYTE1(v45); HIDWORD(v242) += (unsigned __int8)v45; goto LABEL_73; } - result = this->array_20[3]; + result = this->field_20.field_C; if ( result != 8 ) { if ( result != 16 ) { - if ( result != 32 || (result = a6, v196 = a6, v234 = 0, a8 <= 0) ) + if ( result != 32 || (result = (int)pDst, v196 = pDst, v234 = 0, dstHeight <= 0) ) return result; - v49 = a7; - v299 = 4 * (a9 - a7); + v49 = dstWidth; + a9c = 4 * (dstPitch - dstWidth); while ( 1 ) { v50 = 0; - v273 = 0; - if ( a7 > v11 ) + a6g = 0; + if ( dstWidth > v11 ) break; LABEL_108: - v196 += v299; + v196 = (unsigned __int16 *)((char *)v196 + a9c); ++v234; result = v234; - if ( v234 >= a8 ) + if ( v234 >= dstHeight ) return result; v11 = 0; } - v224 = (double)a7; - v215 = (double)a3; - v51 = (double)a8; - v52 = (double)a4; + v224 = (double)dstWidth; + v215 = (double)srcWidth; + v51 = (double)dstHeight; + v52 = (double)srcHeight; while ( 1 ) { - v274 = (double)v273 / v224 * v215; - v127 = v274 + 6.7553994e15; + a6y = (double)a6g / v224 * v215; + v127 = a6y + 6.7553994e15; v206 = v50 + 1; - v275 = (double)(v50 + 1) / v224 * v215; - v136 = v275 + 6.7553994e15; + a6z = (double)(v50 + 1) / v224 * v215; + v136 = a6z + 6.7553994e15; v53 = (double)v234 / v51 * v52; v145 = v53 + 6.7553994e15; v54 = (double)(v234 + 1) / v51 * v52; v154 = v54 + 6.7553994e15; v55 = (LODWORD(v154) - LODWORD(v145)) * (LODWORD(v136) - LODWORD(v127)); v255 = 0; - v276 = 0; + a6h = 0; v243 = 0i64; if ( SLODWORD(v145) < SLODWORD(v154) ) break; @@ -6779,27 +6781,27 @@ v58 = (unsigned int)v243 / ((LODWORD(v154) - LODWORD(v145)) * (LODWORD(v136) - LODWORD(v127))); if ( v55 ) { - v276 /= v55; + a6h /= v55; v255 /= v55; HIDWORD(v243) /= v55; } if ( v58 != 255 ) v58 &= 0x7FFFFFFFu; - v59 = v202->_450F55(HIDWORD(v243) | ((v255 | ((v276 | (v58 << 8)) << 8)) << 8)); + v59 = _450F55(HIDWORD(v243) | ((v255 | ((a6h | (v58 << 8)) << 8)) << 8)); v60 = v196; - v196 += 4; - *(int *)v60 = v59; + v196 += 2; + *(_DWORD *)v60 = v59; v50 = v206; - v273 = v206; - if ( v206 >= a7 ) + a6g = v206; + if ( v206 >= dstWidth ) goto LABEL_108; } v172 = LODWORD(v154) - LODWORD(v145); - v187 = a2 + 2 * (LODWORD(v127) + a5 * LODWORD(v145)); + v187 = &pSrc[LODWORD(v127) + srcPitch * LODWORD(v145)]; while ( SLODWORD(v127) >= SLODWORD(v136) ) { LABEL_102: - v187 += 2 * a5; + v187 += srcPitch; --v172; if ( !v172 ) goto LABEL_103; @@ -6808,13 +6810,13 @@ v164 = LODWORD(v136) - LODWORD(v127); while ( 1 ) { - v56 = *(short *)v179; + v56 = *(_WORD *)v179; if ( a10 ) { v230 = 1; v49 = v56 != a11 ? 0xFF : 0; } - v57 = v202->_450FB1(v56); + v57 = _450FB1(v56); if ( !v230 ) break; LODWORD(v243) = v49 + v243; @@ -6830,93 +6832,104 @@ } LODWORD(v243) = ((unsigned int)v57 >> 24) + v243; LABEL_100: - v276 += BYTE2(v57); + a6h += BYTE2(v57); v255 += BYTE1(v57); HIDWORD(v243) += (unsigned __int8)v57; goto LABEL_101; } - result = a6; - v197 = a6; + result = (int)pDst; + v197 = pDst; v235 = 0; - if ( a8 <= 0 ) + if ( dstHeight <= 0 ) return result; - v61 = a7; - v300 = 2 * (a9 - a7); + v61 = dstWidth; + a9d = 2 * (dstPitch - dstWidth); while ( 1 ) { v62 = 0; - v277 = 0; - if ( a7 > v11 ) + a6i = 0; + if ( dstWidth > v11 ) break; LABEL_133: - v197 += v300; + v197 = (unsigned __int16 *)((char *)v197 + a9d); ++v235; result = v235; - if ( v235 >= a8 ) + if ( v235 >= dstHeight ) return result; v11 = 0; } - v225 = (double)a7; - v216 = (double)a3; - v63 = (double)a8; - v64 = (double)a4; + v225 = (double)dstWidth; + v216 = (double)srcWidth; + v63 = (double)dstHeight; + v64 = (double)srcHeight; while ( 1 ) { - v278 = (double)v277 / v225 * v216; - v128 = v278 + 6.7553994e15; + a6ba = (double)a6i / v225 * v216; + _v128 = floorf(a6ba); + //v128 = a6ba + 6.7553994e15; v207 = v62 + 1; - v279 = (double)(v62 + 1) / v225 * v216; - v137 = v279 + 6.7553994e15; + a6bb = (double)(v62 + 1) / v225 * v216; + //v137 = a6bb + 6.7553994e15; + _v137 = floorf(a6bb); v65 = (double)v235 / v63 * v64; - v146 = v65 + 6.7553994e15; + //v146 = v65 + 6.7553994e15; + _v146 = floorf(v65); v66 = (double)(v235 + 1) / v63 * v64; - v155 = v66 + 6.7553994e15; - v67 = (LODWORD(v155) - LODWORD(v146)) * (LODWORD(v137) - LODWORD(v128)); + //v155 = v66 + 6.7553994e15; + _v155 = floorf(v66); + //v67 = (LODWORD(v155) - LODWORD(v146)) * (LODWORD(v137) - LODWORD(v128)); + v67 = (_v155 - _v146) * (_v137 - _v128); v256 = 0; - v280 = 0; + a6j = 0; v244 = 0i64; - if ( SLODWORD(v146) < SLODWORD(v155) ) + //if ( SLODWORD(v146) < SLODWORD(v155) ) + if (_v146 < _v155) break; LABEL_128: - v70 = (unsigned int)v244 / ((LODWORD(v155) - LODWORD(v146)) * (LODWORD(v137) - LODWORD(v128))); + //v70 = (unsigned int)v244 / ((LODWORD(v155) - LODWORD(v146)) * (LODWORD(v137) - LODWORD(v128))); + v70 = (unsigned int)v244 / ((_v155 - _v146) * (_v137 - _v128)); if ( v67 ) { - v280 /= v67; + a6j /= v67; v256 /= v67; HIDWORD(v244) /= v67; } if ( v70 != 255 ) v70 &= 0x7FFFFFFFu; - v71 = v202->_450F55(HIDWORD(v244) | ((v256 | ((v280 | (v70 << 8)) << 8)) << 8)); + v71 = _450F55(HIDWORD(v244) | ((v256 | ((a6j | (v70 << 8)) << 8)) << 8)); v72 = v197; - v197 += 2; - *(short *)v72 = v71; + ++v197; + *v72 = v71; v62 = v207; - v277 = v207; - if ( v207 >= a7 ) + a6i = v207; + if ( v207 >= dstWidth ) goto LABEL_133; } - v173 = LODWORD(v155) - LODWORD(v146); - v188 = a2 + 2 * (LODWORD(v128) + a5 * LODWORD(v146)); - while ( SLODWORD(v128) >= SLODWORD(v137) ) + //v173 = LODWORD(v155) - LODWORD(v146); + v173 = _v155 - _v146; + //v188 = &pSrc[LODWORD(v128) + srcPitch * LODWORD(v146)]; + v188 = &pSrc[_v128 + srcPitch * _v146]; + //while ( SLODWORD(v128) >= SLODWORD(v137) ) + while (_v128 >= _v137) { LABEL_127: - v188 += 2 * a5; + v188 += srcPitch; --v173; if ( !v173 ) goto LABEL_128; } v180 = (int *)v188; - v165 = LODWORD(v137) - LODWORD(v128); + //v165 = LODWORD(v137) - LODWORD(v128); + v165 = _v137 - _v128; while ( 1 ) { - v68 = *(short *)v180; + v68 = *(_WORD *)v180; if ( a10 ) { v230 = 1; v61 = v68 != a11 ? 0xFF : 0; } - v69 = v202->_450FB1(v68); + v69 = _450FB1(v68); if ( !v230 ) break; LODWORD(v244) = v61 + v244; @@ -6932,49 +6945,49 @@ } LODWORD(v244) = ((unsigned int)v69 >> 24) + v244; LABEL_125: - v280 += BYTE2(v69); + a6j += BYTE2(v69); v256 += BYTE1(v69); HIDWORD(v244) += (unsigned __int8)v69; goto LABEL_126; } - result = a6; - v198 = a6; + result = (int)pDst; + v198 = pDst; v236 = 0; - if ( a8 <= 0 ) + if ( dstHeight <= 0 ) return result; - v73 = a7; + v73 = dstWidth; while ( 1 ) { v74 = 0; - v281 = 0; - if ( a7 > v11 ) + a6k = 0; + if ( dstWidth > v11 ) break; LABEL_158: - v198 += a9 - a7; + v198 = (unsigned __int16 *)((char *)v198 + dstPitch - dstWidth); ++v236; result = v236; - if ( v236 >= a8 ) + if ( v236 >= dstHeight ) return result; v11 = 0; } - v226 = (double)a7; - v217 = (double)a3; - v75 = (double)a8; - v76 = (double)a4; + v226 = (double)dstWidth; + v217 = (double)srcWidth; + v75 = (double)dstHeight; + v76 = (double)srcHeight; while ( 1 ) { - v282 = (double)v281 / v226 * v217; - v129 = v282 + 6.7553994e15; + a6bc = (double)a6k / v226 * v217; + v129 = a6bc + 6.7553994e15; v208 = v74 + 1; - v283 = (double)(v74 + 1) / v226 * v217; - v138 = v283 + 6.7553994e15; + a6bd = (double)(v74 + 1) / v226 * v217; + v138 = a6bd + 6.7553994e15; v77 = (double)v236 / v75 * v76; v147 = v77 + 6.7553994e15; v78 = (double)(v236 + 1) / v75 * v76; v156 = v78 + 6.7553994e15; v257 = 0; v79 = (LODWORD(v156) - LODWORD(v147)) * (LODWORD(v138) - LODWORD(v129)); - v284 = 0; + a6l = 0; v245 = 0i64; if ( SLODWORD(v147) < SLODWORD(v156) ) break; @@ -6982,26 +6995,27 @@ v82 = (unsigned int)v245 / ((LODWORD(v156) - LODWORD(v147)) * (LODWORD(v138) - LODWORD(v129))); if ( v79 ) { - v284 /= v79; + a6l /= v79; v257 /= v79; HIDWORD(v245) /= v79; } if ( v82 != 255 ) v82 &= 0x7FFFFFFFu; - v83 = v202->_450F55(HIDWORD(v245) | ((v257 | ((v284 | (v82 << 8)) << 8)) << 8)); - v84 = v198++; - *(char *)v84 = v83; + v83 = _450F55(HIDWORD(v245) | ((v257 | ((a6l | (v82 << 8)) << 8)) << 8)); + v84 = v198; + v198 = (unsigned __int16 *)((char *)v198 + 1); + *(_BYTE *)v84 = v83; v74 = v208; - v281 = v208; - if ( v208 >= a7 ) + a6k = v208; + if ( v208 >= dstWidth ) goto LABEL_158; } v174 = LODWORD(v156) - LODWORD(v147); - v189 = a2 + 2 * (LODWORD(v129) + a5 * LODWORD(v147)); + v189 = &pSrc[LODWORD(v129) + srcPitch * LODWORD(v147)]; while ( SLODWORD(v129) >= SLODWORD(v138) ) { LABEL_152: - v189 += 2 * a5; + v189 += srcPitch; --v174; if ( !v174 ) goto LABEL_153; @@ -7010,13 +7024,13 @@ v181 = (int *)v189; while ( 1 ) { - v80 = *(short *)v181; + v80 = *(_WORD *)v181; if ( a10 ) { v230 = 1; v73 = v80 != a11 ? 0xFF : 0; } - v81 = v202->_450FB1(v80); + v81 = _450FB1(v80); if ( !v230 ) break; LODWORD(v245) = v73 + v245; @@ -7032,37 +7046,37 @@ } LODWORD(v245) = ((unsigned int)v81 >> 24) + v245; LABEL_150: - v284 += BYTE2(v81); + a6l += BYTE2(v81); v257 += BYTE1(v81); HIDWORD(v245) += (unsigned __int8)v81; goto LABEL_151; } - result = this->array_20[3]; + result = this->field_20.field_C; if ( result == 8 ) { - result = a6; - v201 = a6; + result = (int)pDst; + v201 = pDst; v239 = 0; - if ( a8 <= 0 ) + if ( dstHeight <= 0 ) return result; - v111 = a7; + v111 = dstWidth; while ( 1 ) { v112 = 0; - v293 = 0; - if ( a7 <= v11 ) + a6q = 0; + if ( dstWidth <= v11 ) goto LABEL_236; - v229 = (double)a7; - v220 = (double)a3; - v113 = (double)a8; - v114 = (double)a4; + v229 = (double)dstWidth; + v220 = (double)srcWidth; + v113 = (double)dstHeight; + v114 = (double)srcHeight; do { - v294 = (double)v293 / v229 * v220; - v132 = v294 + 6.7553994e15; + a6bi = (double)a6q / v229 * v220; + v132 = a6bi + 6.7553994e15; v211 = v112 + 1; - v295 = (double)(v112 + 1) / v229 * v220; - v141 = v295 + 6.7553994e15; + a6bj = (double)(v112 + 1) / v229 * v220; + v141 = a6bj + 6.7553994e15; v115 = (double)v239 / v113 * v114; v150 = v115 + 6.7553994e15; v116 = (double)(v239 + 1) / v113 * v114; @@ -7070,25 +7084,25 @@ v251 = 0; v117 = (LODWORD(v159) - LODWORD(v150)) * (LODWORD(v141) - LODWORD(v132)); v260 = 0; - v296 = 0; + a6r = 0; v248 = 0; if ( SLODWORD(v150) >= SLODWORD(v159) ) goto LABEL_231; v169 = LODWORD(v159) - LODWORD(v150); - v184 = a2 + a5 * LODWORD(v150); + v184 = (char *)pSrc + srcPitch * LODWORD(v150); do { v118 = LODWORD(v132); v192 = LODWORD(v132); while ( v118 < SLODWORD(v141) ) { - v119 = *(char *)(v184 + v192); + v119 = (unsigned __int8)v184[v192]; if ( a10 ) { v230 = 1; v111 = v119 != a11 ? 0xFF : 0; } - v120 = v202->_450FB1(v119); + v120 = _450FB1(v119); if ( v230 ) { v248 += v111; @@ -7103,14 +7117,14 @@ { v248 += (unsigned int)v120 >> 24; } - v296 += BYTE2(v120); + a6r += BYTE2(v120); v260 += BYTE1(v120); v251 += (unsigned __int8)v120; LABEL_228: ++v192; v118 = v192; } - v184 += a5; + v184 += srcPitch; --v169; } while ( v169 ); @@ -7118,54 +7132,55 @@ v121 = v248 / ((LODWORD(v159) - LODWORD(v150)) * (LODWORD(v141) - LODWORD(v132))); if ( v117 ) { - v296 /= v117; + a6r /= v117; v260 /= v117; v251 /= v117; } if ( v121 != 255 ) v121 &= 0x7FFFFFFFu; - v122 = v202->_450F55(v251 | ((v260 | ((v296 | (v121 << 8)) << 8)) << 8)); - v123 = v201++; - *(char *)v123 = v122; + v122 = _450F55(v251 | ((v260 | ((a6r | (v121 << 8)) << 8)) << 8)); + v123 = v201; + v201 = (unsigned __int16 *)((char *)v201 + 1); + *(_BYTE *)v123 = v122; v112 = v211; - v293 = v211; - } - while ( v211 < a7 ); + a6q = v211; + } + while ( v211 < dstWidth ); LABEL_236: - v201 += a9 - a7; + v201 = (unsigned __int16 *)((char *)v201 + dstPitch - dstWidth); ++v239; result = v239; - if ( v239 >= a8 ) + if ( v239 >= dstHeight ) return result; v11 = 0; } } if ( result == 16 ) { - result = a6; - v200 = a6; + result = (int)pDst; + v200 = pDst; v238 = 0; - if ( a8 <= 0 ) + if ( dstHeight <= 0 ) return result; - v98 = a7; - v302 = 2 * (a9 - a7); + v98 = dstWidth; + a9f = 2 * (dstPitch - dstWidth); while ( 1 ) { v99 = 0; - v289 = 0; - if ( a7 <= v11 ) + a6o = 0; + if ( dstWidth <= v11 ) goto LABEL_211; - v228 = (double)a7; - v219 = (double)a3; - v100 = (double)a8; - v101 = (double)a4; + v228 = (double)dstWidth; + v219 = (double)srcWidth; + v100 = (double)dstHeight; + v101 = (double)srcHeight; do { - v290 = (double)v289 / v228 * v219; - v131 = v290 + 6.7553994e15; + a6bg = (double)a6o / v228 * v219; + v131 = a6bg + 6.7553994e15; v210 = v99 + 1; - v291 = (double)(v99 + 1) / v228 * v219; - v140 = v291 + 6.7553994e15; + a6bh = (double)(v99 + 1) / v228 * v219; + v140 = a6bh + 6.7553994e15; v102 = (double)v238 / v100 * v101; v149 = v102 + 6.7553994e15; v103 = (double)(v238 + 1) / v100 * v101; @@ -7173,25 +7188,25 @@ v250 = 0; v104 = (LODWORD(v158) - LODWORD(v149)) * (LODWORD(v140) - LODWORD(v131)); v259 = 0; - v292 = 0; + a6p = 0; v247 = 0; if ( SLODWORD(v149) >= SLODWORD(v158) ) goto LABEL_206; v168 = LODWORD(v158) - LODWORD(v149); - v183 = a2 + a5 * LODWORD(v149); + v183 = (char *)pSrc + srcPitch * LODWORD(v149); do { v105 = LODWORD(v131); v191 = LODWORD(v131); while ( v105 < SLODWORD(v140) ) { - v106 = *(char *)(v183 + v191); + v106 = (unsigned __int8)v183[v191]; if ( a10 ) { v230 = 1; v98 = v106 != a11 ? 0xFF : 0; } - v107 = v202->_450FB1(v106); + v107 = _450FB1(v106); if ( v230 ) { v247 += v98; @@ -7206,14 +7221,14 @@ { v247 += (unsigned int)v107 >> 24; } - v292 += BYTE2(v107); + a6p += BYTE2(v107); v259 += BYTE1(v107); v250 += (unsigned __int8)v107; LABEL_203: ++v191; v105 = v191; } - v183 += a5; + v183 += srcPitch; --v168; } while ( v168 ); @@ -7221,50 +7236,50 @@ v108 = v247 / ((LODWORD(v158) - LODWORD(v149)) * (LODWORD(v140) - LODWORD(v131))); if ( v104 ) { - v292 /= v104; + a6p /= v104; v259 /= v104; v250 /= v104; } if ( v108 != 255 ) v108 &= 0x7FFFFFFFu; - v109 = v202->_450F55(v250 | ((v259 | ((v292 | (v108 << 8)) << 8)) << 8)); + v109 = _450F55(v250 | ((v259 | ((a6p | (v108 << 8)) << 8)) << 8)); v110 = v200; - v200 += 2; - *(short *)v110 = v109; + ++v200; + *v110 = v109; v99 = v210; - v289 = v210; - } - while ( v210 < a7 ); + a6o = v210; + } + while ( v210 < dstWidth ); LABEL_211: - v200 += v302; + v200 = (unsigned __int16 *)((char *)v200 + a9f); ++v238; result = v238; - if ( v238 >= a8 ) + if ( v238 >= dstHeight ) return result; v11 = 0; } } - if ( result != 32 || (result = a6, v199 = a6, v237 = 0, a8 <= 0) ) + if ( result != 32 || (result = (int)pDst, v199 = pDst, v237 = 0, dstHeight <= 0) ) return result; - v85 = a7; - v301 = 4 * (a9 - a7); + v85 = dstWidth; + a9e = 4 * (dstPitch - dstWidth); while ( 2 ) { v86 = 0; - v285 = 0; - if ( a7 <= v11 ) + a6m = 0; + if ( dstWidth <= v11 ) goto LABEL_186; - v227 = (double)a7; - v218 = (double)a3; - v87 = (double)a8; - v88 = (double)a4; - do - { - v286 = (double)v285 / v227 * v218; - v130 = v286 + 6.7553994e15; + v227 = (double)dstWidth; + v218 = (double)srcWidth; + v87 = (double)dstHeight; + v88 = (double)srcHeight; + do + { + a6be = (double)a6m / v227 * v218; + v130 = a6be + 6.7553994e15; v209 = v86 + 1; - v287 = (double)(v86 + 1) / v227 * v218; - v139 = v287 + 6.7553994e15; + a6bf = (double)(v86 + 1) / v227 * v218; + v139 = a6bf + 6.7553994e15; v89 = (double)v237 / v87 * v88; v148 = v89 + 6.7553994e15; v90 = (double)(v237 + 1) / v87 * v88; @@ -7272,25 +7287,25 @@ v249 = 0; v91 = (LODWORD(v157) - LODWORD(v148)) * (LODWORD(v139) - LODWORD(v130)); v258 = 0; - v288 = 0; + a6n = 0; v246 = 0; if ( SLODWORD(v148) >= SLODWORD(v157) ) goto LABEL_181; v167 = LODWORD(v157) - LODWORD(v148); - v182 = a2 + a5 * LODWORD(v148); + v182 = (char *)pSrc + srcPitch * LODWORD(v148); do { v92 = LODWORD(v130); v190 = LODWORD(v130); while ( v92 < SLODWORD(v139) ) { - v93 = *(char *)(v182 + v190); + v93 = (unsigned __int8)v182[v190]; if ( a10 ) { v230 = 1; v85 = v93 != a11 ? 0xFF : 0; } - v94 = v202->_450FB1(v93); + v94 = _450FB1(v93); if ( v230 ) { v246 += v85; @@ -7305,14 +7320,14 @@ { v246 += (unsigned int)v94 >> 24; } - v288 += BYTE2(v94); + a6n += BYTE2(v94); v258 += BYTE1(v94); v249 += (unsigned __int8)v94; LABEL_178: ++v190; v92 = v190; } - v182 += a5; + v182 += srcPitch; --v167; } while ( v167 ); @@ -7320,25 +7335,25 @@ v95 = v246 / ((LODWORD(v157) - LODWORD(v148)) * (LODWORD(v139) - LODWORD(v130))); if ( v91 ) { - v288 /= v91; + a6n /= v91; v258 /= v91; v249 /= v91; } if ( v95 != 255 ) v95 &= 0x7FFFFFFFu; - v96 = v202->_450F55(v249 | ((v258 | ((v288 | (v95 << 8)) << 8)) << 8)); + v96 = _450F55(v249 | ((v258 | ((a6n | (v95 << 8)) << 8)) << 8)); v97 = v199; - v199 += 4; - *(int *)v97 = v96; + v199 += 2; + *(_DWORD *)v97 = v96; v86 = v209; - v285 = v209; - } - while ( v209 < a7 ); + a6m = v209; + } + while ( v209 < dstWidth ); LABEL_186: - v199 += v301; + v199 = (unsigned __int16 *)((char *)v199 + a9e); ++v237; result = v237; - if ( v237 < a8 ) + if ( v237 < dstHeight ) { v11 = 0; continue; @@ -7351,6 +7366,8 @@ + + //----- (0044E1EC) -------------------------------------------------------- int TextureFrameTable::FromFileTxt(const char *Args) { @@ -8706,15 +8723,16 @@ //----- (00450DDE) -------------------------------------------------------- stru350 *stru350::_450DDE() { - _450DF1(" ", " "); + _450DF1(&stru_4E82A4, &stru_4E82A4); return this; } + //----- (00450DF1) -------------------------------------------------------- -void *stru350::_450DF1(const char *Src, const char *a3) -{ - stru350 *v3; // esi@1 - void *result; // eax@1 +bool stru350::_450DF1(const stru355 *p1, const stru355 *p2) +{ + //stru350 *v3; // esi@1 + //void *result; // eax@1 unsigned int v5; // ecx@2 int v6; // edi@2 int v7; // edx@2 @@ -8742,7 +8760,7 @@ int v29; // edx@31 int v30; // ebx@35 int v31; // ecx@35 - unsigned int v32; // edi@35 + int v32; // edi@35 int v33; // edx@35 unsigned int i; // ecx@35 int v35; // ecx@39 @@ -8750,13 +8768,14 @@ int v37; // ecx@39 int v38; // ebx@39 - v3 = this; - memcpy(this, Src, 0x20u); - result = memcpy(v3->array_20, a3, 0x20u); - (*(char *)&result) = 1; - if ( v3->field_0[1] & 1 ) - { - v5 = v3->field_0[7]; + //v3 = this; + memcpy(&field_0, p1, sizeof(stru355)); + memcpy(&field_20, p2, sizeof(stru355)); + //result = memcpy(&v3->field_20, p2, 0x20u); + //LOBYTE(result) = 1; + if (field_0.field_4 & 1) + { + v5 = field_0.field_1C; v6 = 0; v7 = 0; while ( !(v5 & 1) ) @@ -8770,13 +8789,13 @@ ++v7; } while ( v5 & 1 ); - v3->field_40 = 32 - v7 - v6; - } - else - { - v3->field_40 = 0; - } - v8 = v3->field_0[4]; + field_40 = 32 - v7 - v6; + } + else + { + field_40 = 0; + } + v8 = field_0.field_10; v9 = 0; v10 = 0; while ( !(v8 & 1) ) @@ -8792,8 +8811,8 @@ while ( v8 & 1 ); v11 = 24 - v10 - v9; v12 = 0; - v3->field_48 = v11; - v13 = v3->field_0[5]; + field_48 = v11; + v13 = field_0.field_14; v14 = 0; while ( !(v13 & 1) ) { @@ -8807,8 +8826,8 @@ } while ( v13 & 1 ); v15 = 16 - v14; - v16 = v3->field_0[6]; - v3->field_50 = v15 - v12; + v16 = field_0.field_18; + field_50 = v15 - v12; v17 = 0; v18 = 0; while ( !(v16 & 1) ) @@ -8822,15 +8841,15 @@ ++v18; } while ( v16 & 1 ); - v19 = (v3->array_20[1] & 1) == 0; - v3->field_58 = v17 - v18 + 8; + v19 = (field_20.field_4 & 1) == 0; + field_58 = v17 - v18 + 8; if ( v19 ) { - v3->field_44 = 0; - } - else - { - v20 = v3->array_20[7]; + field_44 = 0; + } + else + { + v20 = field_20.field_1C; v21 = 0; v22 = 0; while ( !(v20 & 1) ) @@ -8844,9 +8863,9 @@ ++v22; } while ( v20 & 1 ); - v3->field_44 = 32 - v22 - v21; - } - v23 = v3->array_20[4]; + field_44 = 32 - v22 - v21; + } + v23 = field_20.field_10; v24 = 0; v25 = 0; while ( !(v23 & 1) ) @@ -8862,8 +8881,8 @@ while ( v23 & 1 ); v26 = 24 - v25 - v24; v27 = 0; - v3->field_4C = v26; - v28 = v3->array_20[5]; + field_4C = v26; + v28 = field_20.field_14; v29 = 0; while ( !(v28 & 1) ) { @@ -8878,8 +8897,8 @@ while ( v28 & 1 ); v30 = 0; v31 = 16 - v29 - v27; - v32 = v3->array_20[6]; - v3->field_54 = v31; + v32 = field_20.field_18; + field_54 = v31; v33 = 0; for ( i = v32; !(i & 1); i >>= 1 ) ++v30; @@ -8891,7 +8910,7 @@ while ( i & 1 ); v35 = 32 - v33; v36 = v32; - v3->field_5C = v35 - v30; + field_5C = v35 - v30; v37 = 0; v38 = 0; while ( !(v36 & 1) ) @@ -8905,41 +8924,35 @@ ++v38; } while ( v36 & 1 ); - v3->field_5C = v37 - v38 + 8; - return result; -} + field_5C = v37 - v38 + 8; + return true; +} + //----- (00450F55) -------------------------------------------------------- unsigned int stru350::_450F55(int a2) { - int v2; // ebx@1 - - v2 = a2 & dword_4E82C0; - if ( this->array_20[1] & 1 ) + int v2 = a2 & stru_4E82A4.field_1C; + if (field_20.field_4 & 1) v2 = (unsigned int)v2 >> this->field_44; - return v2 & this->array_20[7] | this->array_20[4] & ((a2 & (unsigned int)dword_4E82B4) >> this->field_4C) | this->array_20[5] & ((a2 & (unsigned int)dword_4E82B8) >> this->field_54) | this->array_20[6] & ((a2 & (unsigned int)dword_4E82BC) >> this->field_5C); -} -// 4E82B4: using guessed type int dword_4E82B4; -// 4E82B8: using guessed type int dword_4E82B8; -// 4E82BC: using guessed type int dword_4E82BC; -// 4E82C0: using guessed type int dword_4E82C0; + return v2 & field_20.field_1C | + field_20.field_10 & ((a2 & (unsigned int)stru_4E82A4.field_10) >> field_4C) | + field_20.field_14 & ((a2 & (unsigned int)stru_4E82A4.field_14) >> field_54) | + field_20.field_18 & ((a2 & (unsigned int)stru_4E82A4.field_18) >> field_5C); +} //----- (00450FB1) -------------------------------------------------------- int stru350::_450FB1(int a2) { - int v2; // ebx@2 - int v4; // [sp+Ch] [bp-4h]@1 - - v4 = this->field_0[1] & 1; + int v2 = 0; + int v4 = field_0.field_4 & 1; if ( v4 ) - v2 = a2 & this->field_0[7]; - else - v2 = 0; + v2 = a2 & field_0.field_1C; if ( v4 ) - v2 <<= this->field_40; - return v2 | ((a2 & this->field_0[4]) << this->field_48) | ((a2 & this->field_0[5]) << this->field_50) | ((a2 & this->field_0[6]) << this->field_58); + v2 <<= field_40; + return v2 | ((a2 & field_0.field_10) << field_48) | ((a2 & field_0.field_14) << field_50) | ((a2 & field_0.field_18) << field_58); } @@ -11722,7 +11735,7 @@ uTextureID_LS_ = pIcons_LOD->LoadTexture("LS_saveD", TEXTURE_16BIT_PALETTE); uTextureID_AR_UP_DN = pIcons_LOD->LoadTexture("AR_UP_DN", TEXTURE_16BIT_PALETTE); uTextureID_AR_DN_DN = pIcons_LOD->LoadTexture("AR_DN_DN", TEXTURE_16BIT_PALETTE); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (WindowType)(WINDOW_Chest|WINDOW_Credits|0x2), 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_Chest|WINDOW_MainMenu|0x2), 0, 0); pGUIWindow_CurrentMenu->CreateButton(21u, 198u, 0xBFu, 0x12u, 1, 0, 0xA5u, 0, 0, nullstring, 0); pGUIWindow_CurrentMenu->CreateButton(21u, 218u, 0xBFu, 0x12u, 1, 0, 0xA5u, 1u, 0, nullstring, 0); pGUIWindow_CurrentMenu->CreateButton(21u, 238u, 0xBFu, 0x12u, 1, 0, 0xA5u, 2u, 0, nullstring, 0); @@ -12833,10 +12846,12 @@ //----- (0046082C) -------------------------------------------------------- bool Initialize_GamesLOD_NewLOD() { - pGames_LOD->AllocSubIndicesAndIO(0x12Cu, 0); + pGames_LOD = new LODWriteableFile; + pGames_LOD->AllocSubIndicesAndIO(300, 0); if (pGames_LOD->LoadFile("data\\games.lod", 1)) { - pNew_LOD->AllocSubIndicesAndIO(0x12Cu, 0x186A0u); + pNew_LOD = new LODWriteableFile; + pNew_LOD->AllocSubIndicesAndIO(300, 0x186A0u); return true; } return false; @@ -13629,14 +13644,6 @@ //----- (004627B7) -------------------------------------------------------- void __cdecl MainMenu_Loop() { - unsigned int v0; // eax@8 - Texture *v1; // esi@8 - unsigned int v2; // eax@8 - Texture *v3; // edi@8 - unsigned int v4; // eax@8 - Texture *v5; // ebp@8 - unsigned int v6; // eax@8 - Texture *v7; // ebx@8 GUIButton *v8; // eax@27 unsigned int v9; // ecx@35 int v10; // ecx@36 @@ -13645,14 +13652,9 @@ Texture *v13; // [sp-14h] [bp-50h]@39 GUIButton *v14; // [sp+0h] [bp-3Ch]@27 GUIWindow *v15; // [sp+4h] [bp-38h]@11 - LONG uMouseX; // [sp+8h] [bp-34h]@11 - LONG uMouseY; // [sp+Ch] [bp-30h]@11 - POINT v18; // [sp+10h] [bp-2Ch]@11 - POINT v19; // [sp+18h] [bp-24h]@11 - MSG Msg; // [sp+20h] [bp-1Ch]@15 uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard ) pAsyncKeyboard->Resume(); @@ -13662,97 +13664,100 @@ ++pIcons_LOD->uTexturePacksCount; if ( !pIcons_LOD->uNumPrevLoadedFiles ) pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles; - pWindow_Credits = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_Credits, 0, 0); - v0 = pIcons_LOD->LoadTexture("title_new", TEXTURE_16BIT_PALETTE); - v1 = (Texture *)(v0 != -1 ? (int)&pIcons_LOD->pTextures[v0] : 0); - pMainMenu_BtnNew = pWindow_Credits->CreateButton( - 0x1EFu, - 0xACu, - (v0 != -1 ? pIcons_LOD->pTextures[v0].uTextureWidth : 24), - (v0 != -1 ? pIcons_LOD->pTextures[v0].uTextureHeight : 26), - 1, - 0, - 0x36u, - 0, - 0x4Eu, - nullstring, - v1, - 0); - v2 = pIcons_LOD->LoadTexture("title_load", TEXTURE_16BIT_PALETTE); - v3 = (Texture *)(v2 != -1 ? (int)&pIcons_LOD->pTextures[v2] : 0); - pMainMenu_BtnLoad = pWindow_Credits->CreateButton( - 0x1EFu, - 0xE3u, - (v2 != -1 ? pIcons_LOD->pTextures[v2].uTextureWidth : 24), - (v2 != -1 ? pIcons_LOD->pTextures[v2].uTextureHeight : 26), - 1, - 0, - 0x37u, - 1u, - 0x4Cu, - nullstring, - v3, - 0); - v4 = pIcons_LOD->LoadTexture("title_cred", TEXTURE_16BIT_PALETTE); - v5 = (Texture *)(v4 != -1 ? (int)&pIcons_LOD->pTextures[v4] : 0); - pMainMenu_BtnCredits = pWindow_Credits->CreateButton( - 0x1EFu, - 0x11Au, - (v4 != -1 ? pIcons_LOD->pTextures[v4].uTextureWidth : 24), - (v4 != -1 ? pIcons_LOD->pTextures[v4].uTextureHeight : 26), - 1, - 0, - 0x38u, - 2u, - 0x43u, - nullstring, - v5, - 0); - v6 = pIcons_LOD->LoadTexture("title_exit", TEXTURE_16BIT_PALETTE); - v7 = (Texture *)(v6 != -1 ? (int)&pIcons_LOD->pTextures[v6] : 0); - pMainMenu_BtnExit = pWindow_Credits->CreateButton( - 0x1EFu, - 0x151u, - (v6 != -1 ? pIcons_LOD->pTextures[v6].uTextureWidth : 24), - (v6 != -1 ? pIcons_LOD->pTextures[v6].uTextureHeight : 26), - 1, - 0, - 0x39u, - 3u, - 0, - nullstring, - v7, - 0); + pWindow_Credits = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); + + auto pNew = pIcons_LOD->LoadTexturePtr("title_new", TEXTURE_16BIT_PALETTE); + //v0 = pIcons_LOD->LoadTexture("title_new", TEXTURE_16BIT_PALETTE); + //v1 = (Texture *)(v0 != -1 ? &pIcons_LOD->pTextures[v0] : 0); + pMainMenu_BtnNew = pWindow_Credits->CreateButton(495, 172, + pNew->uTextureWidth, + pNew->uTextureHeight, + 1, + 0, + 54, + 0, + 78, + "", + pNew, + 0); + //v2 = pIcons_LOD->LoadTexture("title_load", TEXTURE_16BIT_PALETTE); + //v3 = (Texture *)(v2 != -1 ? (int)&pIcons_LOD->pTextures[v2] : 0); + auto pLoad = pIcons_LOD->LoadTexturePtr("title_load", TEXTURE_16BIT_PALETTE); + pMainMenu_BtnLoad = pWindow_Credits->CreateButton(495, 227, + pLoad->uTextureWidth, + pLoad->uTextureHeight, + 1, + 0, + 55, + 1, + 76, + "", + pLoad, + 0); + //v4 = pIcons_LOD->LoadTexture("title_cred", TEXTURE_16BIT_PALETTE); + //v5 = (Texture *)(v4 != -1 ? (int)&pIcons_LOD->pTextures[v4] : 0); + auto pCredits = pIcons_LOD->LoadTexturePtr("title_cred", TEXTURE_16BIT_PALETTE); + pMainMenu_BtnCredits = pWindow_Credits->CreateButton(495, 282, + pCredits->uTextureWidth, + pCredits->uTextureHeight, + 1, + 0, + 56, + 2, + 67, + "", + pCredits, + 0); + //v6 = pIcons_LOD->LoadTexture("title_exit", TEXTURE_16BIT_PALETTE); + //v7 = (Texture *)(v6 != -1 ? (int)&pIcons_LOD->pTextures[v6] : 0); + auto pExit = pIcons_LOD->LoadTexturePtr("title_exit", TEXTURE_16BIT_PALETTE); + pMainMenu_BtnExit = pWindow_Credits->CreateButton(495, 337, + pExit->uTextureWidth, + pExit->uTextureHeight, + 1, + 0, + 57, + 3, + 0, + "", + pExit, + 0); + stru_506F20.Release(); stru_506F20.Load("title.pcx", 0); - SetCurrentMenuID(0); + SetCurrentMenuID(MENU_MAIN); SetForegroundWindow(hWnd); - SendMessageA(hWnd, 0x1Cu, 1u, 0); - while ( !uCurrentMenuID || uCurrentMenuID == 3 ) - { - uMouseX = pMouse->GetCursorPos(&v18)->x; - uMouseY = pMouse->GetCursorPos(&v19)->y; + SendMessageA(hWnd, WM_ACTIVATEAPP, 1, 0); + while (uCurrentMenuID == MENU_MAIN || + uCurrentMenuID == MENU_LOAD) + { + POINT pt; + pMouse->GetCursorPos(&pt); + //uMouseX = pMouse->GetCursorPos(&v18)->x; + //uMouseY = pMouse->GetCursorPos(&v19)->y; v15 = pWindow_Credits; - if ( uCurrentMenuID == 3 ) + if ( uCurrentMenuID == MENU_LOAD) { if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 12 ) { stru_506F20.Release(); stru_506F20.Load("lsave640.pcx", 0); - pGUIWindow2 = GUIWindow::Create(0, 0, 640u, 480u, WINDOW_Credits, 0, 0); + pGUIWindow2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 12; GameUI_DrawLoadMenu(0); } v15 = pGUIWindow_CurrentMenu; } - while ( PeekMessageA(&Msg, 0, 0, 0, 1u) ) - { - if ( Msg.message == 18 ) + + MSG msg; + while ( PeekMessageA(&msg, 0, 0, 0, PM_REMOVE) ) + { + if (msg.message == WM_QUIT) Game_DeinitializeAndTerminate(0); - TranslateMessage(&Msg); - DispatchMessageA(&Msg); - } - if ( BYTE1(dword_6BE364_game_settings_1) & 1 ) + TranslateMessage(&msg); + DispatchMessageA(&msg); + } + if (dword_6BE364_game_settings_1 & 0x0100) { WaitMessage(); } @@ -13760,11 +13765,11 @@ { pRenderer->BeginScene(); pRenderer->DrawTextureRGB(0, 0, &stru_506F20); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46B736_consume_click_lists(1); GUI_MainMenuMessageProc(); GUI_UpdateWindows(); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46B736_consume_click_lists(1); if ( uCurrentMenuID ) { @@ -13789,10 +13794,10 @@ { while ( 1 ) { - if ( uMouseX >= (signed int)v8->uX - && uMouseX <= (signed int)v8->uZ - && uMouseY >= (signed int)v8->uY - && uMouseY <= (signed int)v8->uW + if ( pt.x >= (signed int)v8->uX + && pt.x <= (signed int)v8->uZ + && pt.y >= (signed int)v8->uY + && pt.y <= (signed int)v8->uW && v15 == pWindow_Credits ) { v9 = v8->uControlParam; @@ -13806,24 +13811,24 @@ { if ( v11 != 1 ) goto LABEL_44; - v13 = v7; + v13 = pExit; v12 = 337; } else { - v13 = v5; + v13 = pCredits; v12 = 282; } } else { - v13 = v3; + v13 = pLoad; v12 = 227; } } else { - v13 = v1; + v13 = pNew; v12 = 172; } pRenderer->DrawTextureIndexed(495u, v12, v13); @@ -13856,8 +13861,6 @@ pWindow_Credits->Release(); pIcons_LOD->_4114F2(); } -// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; -// 6BE364: using guessed type int dword_6BE364_game_settings_1; @@ -13921,7 +13924,7 @@ v28 = 0; if ( pArcomageGame->bGameInProgress ) { - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pArcomageGame->stru1.field_0 = 7; v29 = 1; @@ -13940,7 +13943,7 @@ v31 = 0; if ( !pArcomageGame->bGameInProgress ) goto LABEL_240; - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pArcomageGame->stru1.field_0 = 8; v29 = 1; @@ -13949,7 +13952,7 @@ v32 = 0; if ( !pArcomageGame->bGameInProgress ) goto LABEL_218; - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pArcomageGame->stru1.field_0 = 3; v29 = 0; @@ -13964,7 +13967,7 @@ back_to_game(); return DefWindowProcA(hWnd, Msg, wParam, v4); } - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pArcomageGame->stru1.field_0 = 4; v29 = 0; @@ -13973,7 +13976,7 @@ v28 = 0; if ( pArcomageGame->bGameInProgress ) { - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pArcomageGame->stru1.field_0 = 7; return DefWindowProcA(hWnd, Msg, wParam, v4); @@ -14027,7 +14030,7 @@ } goto _def_wnd_proc; } - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pArcomageGame->stru1.field_0 = 8; return DefWindowProcA(hWnd, Msg, wParam, v4); @@ -14049,7 +14052,7 @@ case WM_MOUSEMOVE: if ( pArcomageGame->bGameInProgress ) { - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pXY[0] = (unsigned __int16)lParam; pXY[1] = lParam >> 16; @@ -14063,7 +14066,7 @@ } else { - if ( pAsyncMouse ) + if (pAsyncMouse) goto _def_wnd_proc; pMouse->SetMouseClick((unsigned __int16)lParam, lParam >> 16); } @@ -14364,7 +14367,7 @@ Abortf(pGlobalTXT_LocalizationStrings[62]); } BYTE1(dword_6BE364_game_settings_1) &= 0xFEu; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); if ( pArcomageGame->bGameInProgress ) { @@ -14401,7 +14404,7 @@ dword_4E98BC_bApplicationActive = 0; if ( (pVideoPlayer->pSmackerMovie || pVideoPlayer->pBinkMovie) && pVideoPlayer->bPlayingMovie ) pVideoPlayer->bStopBeforeSchedule = 1; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); if ( pRenderer->bUserDirect3D && pRenderer->uAcquiredDirect3DDevice == 1 ) SetWindowPos(::hWnd, (HWND)0xFFFFFFFE, 0, 0, 0, 0, 0x18u); @@ -14448,7 +14451,7 @@ pAsyncKeyboard->_45B3A4(); } } - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46B1DD(); PostQuitMessage(0); return 0; @@ -14461,7 +14464,7 @@ if ( pRenderer->bUserDirect3D && pRenderer->uAcquiredDirect3DDevice == 1 ) SetWindowPos(::hWnd, (HWND)0xFFFFFFFE, 0, 0, 0, 0, 0x18u); ClipCursor(0); - if ( pAsyncMouse ) + if (pAsyncMouse) { pAsyncMouse->Suspend(); return DefWindowProcA(hWnd, Msg, wParam, v4); @@ -14582,10 +14585,13 @@ { pViewport->SetScreen(viewparams->uSomeX, viewparams->uSomeY, viewparams->uSomeZ, viewparams->uSomeW); pViewport->_4C02F8((signed __int64)(flt_6BE3A0 * 65536.0)); + + pIndoorCamera = new IndoorCamera; pIndoorCamera->Initialize( 65, viewparams->uScreenZ - viewparams->uScreenX + 1, viewparams->uScreenW - viewparams->uScreenY + 1); + InitializeTurnBasedAnimations(&stru_50C198); pBitmaps_LOD->dword_11B84 = pBitmaps_LOD->uNumLoadedFiles; pSprites_LOD->field_ECA0 = pSprites_LOD->uNumLoadedSprites; @@ -15200,6 +15206,8 @@ bCanLoadFromCD = GetPrivateProfileIntW(L"settings", L"use_cd", 1, pMM6IniFile); + if (bNoCD) + bCanLoadFromCD = false; if (bCanLoadFromCD) { if (!FindMM7CD(hWnd, &cMM7GameCDDriveLetter)) @@ -15461,18 +15469,11 @@ //----- (00465D0B) -------------------------------------------------------- void __cdecl SecondaryInitialization() { - //_UNKNOWN *v0; // edi@3 - //char **v1; // ebp@3 - //char *v2; // esi@3 - //__int16 uIconID; // ax@4 __int16 v4; // ax@4 signed int v5; // esi@5 int v6; // ecx@6 int v7; // edx@7 ObjectDesc *v8; // eax@7 - //signed int v9; // esi@8 - signed int v10; // ebx@14 - signed int v11; // esi@15 char pContainer[32]; // [sp+10h] [bp-Ch]@9 pMouse->Initialize(hWnd); @@ -15558,9 +15559,15 @@ if ( pSprites_LOD->field_ECA0 < (signed int)pSprites_LOD->uNumLoadedSprites ) pSprites_LOD->field_ECA0 = pSprites_LOD->uNumLoadedSprites; pPaletteManager->LockAll(); + _mkdir("Saves"); - v10 = 1; - do + for (uint i = 0; i < 5; ++i) + for (uint j = 0; j < 6; ++j) + { + sprintf(pTmpBuf, "data\\lloyd%d%d.pcx", i, j); + remove(pTmpBuf); + } + /*do { v11 = 1; do @@ -15572,7 +15579,8 @@ while ( v11 < 6 ); ++v10; } - while ( v10 < 5 ); + while ( v10 < 5 );*/ + Initialize_GamesLOD_NewLOD(); dword_576E2C = 512; dword_576E28 = 9; @@ -15613,8 +15621,10 @@ if (wcsstr(pCmdLine, L"-noanim")) { dword_6BE364_game_settings_1 |= 0x40; - bNoVideo = 1; - } + bNoVideo = true; + } + if (wcsstr(pCmdLine, L"-nocd")) + bNoCD = true; } stru_51076C.registry_debug_flags = ReadWindowsRegistryInt("debug flags", 0); @@ -15659,7 +15669,7 @@ pGame->Deinitialize(); return true; } - if ( uCurrentMenuID == 1 ) + if (GetCurrentMenuID() == MENU_NEWGAME) { if ( pAudioPlayer->hAILRedbook ) AIL_redbook_stop(pAudioPlayer->hAILRedbook); @@ -15703,7 +15713,7 @@ if ( uCurrentMenuID != 10 ) goto LABEL_49; pMouse->Activate(0); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard ) pAsyncKeyboard->Suspend(); @@ -15714,7 +15724,7 @@ if ( !GetOpenFileNameA((LPOPENFILENAMEA)&ofn) ) { pMouse->Activate(1); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard ) pAsyncKeyboard->Resume(); @@ -15723,7 +15733,7 @@ _chdir("..\\"); strcpy(pCurrentMapName, ofn.lpstrFileTitle); pMouse->Activate(1); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard ) pAsyncKeyboard->Resume(); @@ -16069,7 +16079,7 @@ } //----- (00466CA0) -------------------------------------------------------- -unsigned int __cdecl GetCurrentMenuID() +unsigned int GetCurrentMenuID() { return uCurrentMenuID; } @@ -16649,7 +16659,7 @@ if ( a1 <= 782 ) { uTextureID_720980 = pIcons_LOD->LoadTexture("leather", TEXTURE_16BIT_PALETTE); - ptr_507BC4 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)30, v1 - 700, 0); + ptr_507BC4 = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)30, v1 - 700, 0); } } } @@ -16934,7 +16944,7 @@ if ( v4 == 2 && (unsigned __int16)(v0->pActiveSkills[2] & 0xFFC0) || v4 == 1 && (signed int)SkillToMastery(v0->pActiveSkills[1]) >= 3 ) { - if ( pAsyncMouse ) + if (pAsyncMouse) { v18 = *((int *)pAsyncMouse + 6); v19 = *((int *)pAsyncMouse + 7); @@ -17082,7 +17092,7 @@ } return; } - if ( pAsyncMouse ) + if (pAsyncMouse) { v32 = *((int *)pAsyncMouse + 6); v33 = *((int *)pAsyncMouse + 7); @@ -17932,7 +17942,7 @@ goto LABEL_36; } if ( v25->IsInteractive() ) - v24 = (const char *)dword_722240[2 * stru_5E4C90.field_0[v26->field_1C]]; + v24 = pNPCTopics[stru_5E4C90.field_0[v26->field_1C] + 379].pTopic; else v24 = pDecorationList->pDecorations[v26->uDecorationDescID].field_20; LABEL_51: diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_3.cpp --- a/mm7_3.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_3.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -5674,7 +5674,7 @@ pAwardsTXT_Raw = (char *)pEvents_LOD->LoadRaw("awards.txt", 0); strtok(pAwardsTXT_Raw, "\r"); v7 = pAwards; - do + for (uint i = 0; i < 104; ++i) { v1 = strtok(v0, "\r") + 1; v6 = v0; @@ -5721,7 +5721,7 @@ while ( (signed int)(v6 - 1) <= 2 && (char *)v5 == v0 ); ++v7; } - while ( (signed int)v7 < (signed int)&dword_7241C8 ); + //while ( (signed int)v7 < (signed int)&dword_7241C8 ); } // 7241C8: using guessed type int dword_7241C8; @@ -5744,7 +5744,7 @@ pScrollsTXT_Raw = (char *)pEvents_LOD->LoadRaw("scroll.txt", 0); strtok(pScrollsTXT_Raw, "\r"); v6 = pScrolls; - do + for (uint i = 0; i < 82; ++i) { v1 = strtok(v0, "\r") + 1; v2 = 0; @@ -5784,15 +5784,15 @@ while ( v2 - 1 <= 1 && (char *)v7 == v0 ); ++v6; } - while ( (signed int)v6 < (signed int)dword_723E80_award_related ); -} -// 723E80: using guessed type int dword_723E80_award_related[]; + //while ( (signed int)v6 < (signed int)dword_723E80_award_related ); +} + //----- (00476590) -------------------------------------------------------- void __cdecl InitializeMerchants() { char *v0; // ebx@1 - char **v1; // edi@3 + //char **v1; // edi@3 char *v2; // ecx@4 char v3; // dl@5 char *v4; // eax@5 @@ -5806,8 +5806,8 @@ pMerchantsTXT_Raw = 0; pMerchantsTXT_Raw = (char *)pEvents_LOD->LoadRaw("merchant.txt", 0); strtok(pMerchantsTXT_Raw, "\r"); - v1 = (char **)pMerchantsRepairPhrases; - do + //v1 = (char **)pMerchantsRepairPhrases; + for (uint i = 0; i < 7; ++i) { v7 = v0; v6 = (signed int)v0; @@ -5840,24 +5840,24 @@ { if ( v7 == (char *)1 ) { - *(v1 - 14) = RemoveQuotes(v2); + pMerchantsBuyPhrases[i] = RemoveQuotes(v2); } else { if ( v7 == (char *)2 ) { - *(v1 - 7) = RemoveQuotes(v2); + pMerchantsSellPhrases[i] = RemoveQuotes(v2); } else { if ( v7 == (char *)3 ) { - *v1 = RemoveQuotes(v2); + pMerchantsRepairPhrases[i] = RemoveQuotes(v2); } else { if ( v7 - 3 == (char *)1 ) - v1[7] = RemoveQuotes(v2); + pMerchantsIdentifyPhrases[i] = RemoveQuotes(v2); } } } @@ -5866,9 +5866,9 @@ v2 = (char *)(v5 + 1); } while ( (signed int)(v7 - 1) <= 4 && (char *)v6 == v0 ); - ++v1; - } - while ( (signed int)v1 < (signed int)pMerchantsIdentifyPhrases ); + //++v1; + } + //while ( (signed int)v1 < (signed int)pMerchantsIdentifyPhrases ); } //----- (00476682) -------------------------------------------------------- @@ -5890,7 +5890,7 @@ pTransitionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("trans.txt", 0); strtok(pTransitionsTXT_Raw, "\r"); v6 = pTransitionStrings; - do + for (uint i = 0; i < 464; ++i) { v1 = strtok(v0, "\r") + 1; v2 = 0; @@ -5930,7 +5930,7 @@ while ( v2 - 1 <= 1 && (char *)v7 == v0 ); ++v6; } - while ( (signed int)v6 < (signed int)"awards.txt" ); + //while ( (signed int)v6 < (signed int)"awards.txt" ); } //----- (00476750) -------------------------------------------------------- @@ -5950,7 +5950,7 @@ pAutonoteTXT_Raw = (char *)pEvents_LOD->LoadRaw("autonote.txt", 0); strtok(pAutonoteTXT_Raw, "\r"); v0 = (char *)&stru_723720[0].eType; - do + for (uint i = 0; i < 195; ++i) { v1 = 0; v2 = strtok(0, "\r") + 1; @@ -6016,9 +6016,9 @@ while ( v1 - 1 <= 2 && !v6 ); v0 += 8; } - while ( (signed int)v0 < (signed int)&pScrolls[1] ); -} -// 723720: using guessed type Autonote stru_723720[195]; + //while ( (signed int)v0 < (signed int)&pScrolls[1] ); +} + //----- (004768A9) -------------------------------------------------------- void __cdecl InitializeQuests() @@ -6029,7 +6029,7 @@ char v3; // dl@5 char *v4; // ecx@5 int v5; // esi@9 - const char **v6; // [sp+10h] [bp-8h]@3 + //const char **v6; // [sp+10h] [bp-8h]@3 signed int v7; // [sp+14h] [bp-4h]@4 v0 = 0; @@ -6038,8 +6038,10 @@ pQuestsTXT_Raw = 0; pQuestsTXT_Raw = (char *)pEvents_LOD->LoadRaw("quests.txt", 0); strtok(pQuestsTXT_Raw, "\r"); - v6 = pQuestTable; - do + + //v6 = pQuestTable; + for (uint i = 0; i < 512; ++i) + //do { v1 = strtok(v0, "\r") + 1; v2 = 0; @@ -6071,15 +6073,15 @@ else { if ( v2 == 1 ) - *v6 = RemoveQuotes(v1); + pQuestTable[i] = RemoveQuotes(v1); } ++v2; v1 = (char *)(v5 + 1); } while ( v2 - 1 <= 1 && (char *)v7 == v0 ); - ++v6; - } - while ( (signed int)v6 < (signed int)&unk_723714 ); + //++v6; + } + //while ( (signed int)v6 < (signed int)&unk_723714 ); } @@ -6087,19 +6089,14 @@ //----- (00476977) -------------------------------------------------------- void NPCStats::Initialize2() { - NPCStats *v1; // esi@1 - char *v2; // ebx@1 - char *v3; // eax@3 char *v4; // eax@4 char v5; // dl@5 char *v6; // ecx@5 int v7; // edi@9 - char *v8; // eax@20 char *v9; // eax@21 char v10; // dl@22 char *v11; // ecx@22 int v12; // edi@26 - char *v13; // eax@37 char *v14; // eax@39 char v15; // dl@40 int v16; // ecx@40 @@ -6110,29 +6107,28 @@ signed int v21; // ecx@58 char *v22; // [sp+10h] [bp-10h]@4 char *v23; // [sp+10h] [bp-10h]@21 - char *v24; // [sp+10h] [bp-10h]@39 char *v25; // [sp+14h] [bp-Ch]@4 char *v26; // [sp+14h] [bp-Ch]@21 signed int v27; // [sp+14h] [bp-Ch]@39 - signed int v28; // [sp+18h] [bp-8h]@3 - signed int v29; // [sp+18h] [bp-8h]@20 + //signed int v28; // [sp+18h] [bp-8h]@3 + //signed int v29; // [sp+18h] [bp-8h]@20 signed int v30; // [sp+18h] [bp-8h]@37 char *v31; // [sp+1Ch] [bp-4h]@37 - v1 = this; - v2 = 0; - if ( this->pNPCTextTXT_Raw ) - pAllocator->FreeChunk(this->pNPCTextTXT_Raw); - v1->pNPCTextTXT_Raw = 0; - v3 = (char *)pEvents_LOD->LoadRaw("npctext.txt", 0); - v1->pNPCTextTXT_Raw = v3; - strtok(v3, "\r"); - v28 = (signed int)&unk_72166C_pNPCText; - do - { - v4 = strtok(v2, "\r") + 1; - v22 = v2; - v25 = v2; + //v1 = this; + //v2 = 0; + if (pNPCTextTXT_Raw) + pAllocator->FreeChunk(pNPCTextTXT_Raw); + + //v3 = (char *)pEvents_LOD->LoadRaw("npctext.txt", 0); + pNPCTextTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctext.txt", 0); + strtok(pNPCTextTXT_Raw, "\r"); + + for (uint i = 0; i < 789; ++i) + { + v4 = strtok(nullptr, "\r") + 1; + v22 = nullptr; + v25 = nullptr; do { v5 = *v4; @@ -6147,40 +6143,39 @@ v5 = v4[(int)v6]; } while ( v5 != 9 ); - v2 = 0; + //v2 = 0; } v7 = (int)&v4[(int)v6]; if ( !v4[(int)v6] ) v25 = (char *)1; *(char *)v7 = 0; - if ( v6 == v2 ) + if ( v6 == nullptr ) { v25 = (char *)1; } else { if ( v22 == (char *)1 ) - *(int *)v28 = (int)RemoveQuotes(v4); + pNPCTopics[i].pText = RemoveQuotes(v4); } ++v22; v4 = (char *)(v7 + 1); } - while ( (signed int)(v22 - 1) <= 1 && v25 == v2 ); - v28 += 8; - } - while ( v28 < (signed int)pQuestTable ); - if ( v1->pNPCTopicTXT_Raw != v2 ) - pAllocator->FreeChunk(v1->pNPCTopicTXT_Raw); - v1->pNPCTopicTXT_Raw = v2; - v8 = (char *)pEvents_LOD->LoadRaw("npctopic.txt", (int)v2); - v1->pNPCTopicTXT_Raw = v8; - strtok(v8, "\r"); - v29 = (signed int)&unk_721668_pNPCTopic; - do - { - v9 = strtok(v2, "\r") + 1; - v23 = v2; - v26 = v2; + while ( (signed int)(v22 - 1) <= 1 && v25 == nullptr ); + } + + if (pNPCTopicTXT_Raw) + pAllocator->FreeChunk(pNPCTopicTXT_Raw); + + //v8 = (char *)pEvents_LOD->LoadRaw("npctopic.txt", (int)v2); + pNPCTopicTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctopic.txt", 0); + strtok(pNPCTopicTXT_Raw, "\r"); + + for (uint i = 0; i < 579; ++i) + { + v9 = strtok(nullptr, "\r") + 1; + v23 = nullptr; + v26 = nullptr; do { v10 = *v9; @@ -6195,42 +6190,43 @@ v10 = v9[(int)v11]; } while ( v10 != 9 ); - v2 = 0; + //v2 = 0; } v12 = (int)&v9[(int)v11]; if ( !v9[(int)v11] ) v26 = (char *)1; *(char *)v12 = 0; - if ( v11 == v2 ) + if ( v11 == nullptr ) { v26 = (char *)1; } else { if ( v23 == (char *)1 ) - *(int *)v29 = (int)RemoveQuotes(v9); + pNPCTopics[i].pTopic = RemoveQuotes(v9); } ++v23; v9 = (char *)(v12 + 1); } - while ( (signed int)(v23 - 1) <= 1 && v26 == v2 ); - v29 += 8; - } - while ( v29 < (signed int)&unk_722880 ); - if ( v1->pNPCDistTXT_Raw != v2 ) - pAllocator->FreeChunk(v1->pNPCDistTXT_Raw); - v1->pNPCDistTXT_Raw = v2; - v13 = (char *)pEvents_LOD->LoadRaw("npcdist.txt", (int)v2); - v1->pNPCDistTXT_Raw = v13; - strtok(v13, "\r"); - strtok(v2, "\r"); + while ( (signed int)(v23 - 1) <= 1 && v26 == nullptr ); + } + + if (pNPCDistTXT_Raw) + pAllocator->FreeChunk(pNPCDistTXT_Raw); + + //v13 = (char *)pEvents_LOD->LoadRaw("npcdist.txt", (int)v2); + pNPCDistTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcdist.txt", 0); + strtok(pNPCDistTXT_Raw, "\r"); + strtok(nullptr, "\r"); v30 = 1; - v31 = &v1->array_16544[0].field_4[1]; + v31 = &array_16544[0].field_4[1]; + + char *v2 = 0; while ( 2 ) { - v14 = strtok(v2, "\r") + 1; + v14 = strtok(nullptr, "\r") + 1; v27 = 0; - v24 = v2; + char *v24 = nullptr; do { v15 = *v14; @@ -6261,7 +6257,7 @@ { if ( (signed int)v2 < 77 ) { - v1->array_16544[(int)v2].field_4[v30] = atoi(v14); + array_16544[(int)v2].field_4[v30] = atoi(v14); goto LABEL_54; } v18 = v2 == 0; @@ -6283,7 +6279,7 @@ } break; } - v19 = v1->array_16544; + v19 = array_16544; v20 = 77; do { @@ -6296,10 +6292,11 @@ --v20; } while ( v20 ); - if ( v1->pNPCDistTXT_Raw ) - { - pAllocator->FreeChunk(v1->pNPCDistTXT_Raw); - v1->pNPCDistTXT_Raw = 0; + + if (pNPCDistTXT_Raw) + { + pAllocator->FreeChunk(pNPCDistTXT_Raw); + pNPCDistTXT_Raw = nullptr; } } @@ -6569,13 +6566,13 @@ //----- (0047702F) -------------------------------------------------------- void NPCStats::Initialize() { - NPCStats *v1; // edi@1 + //NPCStats *v1; // edi@1 char *v2; // ebx@1 - char *v3; // eax@1 + //char *v3; // eax@1 char *v4; // ebx@3 char v5; // al@4 int v6; // ecx@4 - char *v7; // eax@18 + //char *v7; // eax@18 char *v8; // ebx@18 char *v9; // ecx@19 char v10; // dl@20 @@ -6590,8 +6587,7 @@ char *v19; // [sp+18h] [bp-8h]@18 signed int v20; // [sp+1Ch] [bp-4h]@3 signed int v21; // [sp+1Ch] [bp-4h]@19 - - v1 = this; + //v1 = this; Initialize1(); Initialize2(); @@ -6603,13 +6599,13 @@ InitializeMerchants(); InitializeScrolls(); v2 = 0; - v1->field_17FC0 = 0; - v1->pNPCNamesTXT_Raw = 0; - v3 = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); - v1->pNPCNamesTXT_Raw = v3; - strtok(v3, "\r"); + field_17FC0 = 0; + pNPCNamesTXT_Raw = 0; + //v3 = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); + pNPCNamesTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); + strtok(pNPCNamesTXT_Raw, "\r"); v18 = 0; - v16 = (char *)v1->pNPCNames; + v16 = (char *)pNPCNames; while ( 1 ) { v4 = strtok(v2, "\r") + 1; @@ -6648,8 +6644,8 @@ else { LABEL_45: - if ( v20 == 1 && !v1->uNumNPCNames[1] ) - v1->uNumNPCNames[1] = v18; + if ( v20 == 1 && !uNumNPCNames[1] ) + uNumNPCNames[1] = v18; } ++v20; v4 += v14 + 1; @@ -6661,16 +6657,16 @@ break; v2 = 0; } - v1->pNPCProfTXT_Raw = 0; - v1->uNumNPCNames[0] = v18; - v7 = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); - v1->pNPCProfTXT_Raw = v7; - strtok(v7, "\r"); + pNPCProfTXT_Raw = 0; + uNumNPCNames[0] = v18; + //v7 = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); + pNPCProfTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); + strtok(pNPCProfTXT_Raw, "\r"); strtok(0, "\r"); strtok(0, "\r"); strtok(0, "\r"); - v8 = (char *)&v1->pProfessions[0].pJoinText; - v19 = (char *)&v1->pProfessions[0].pJoinText; + v8 = (char *)&pProfessions[0].pJoinText; + v19 = (char *)&pProfessions[0].pJoinText; v13 = 58; do { @@ -6732,7 +6728,7 @@ v19 = v8; } while ( !v12 ); - v1->uNumNPCProfessions = 59; + uNumNPCProfessions = 59; } //----- (00477266) -------------------------------------------------------- @@ -16876,7 +16872,7 @@ sprintfex(byte_591098, pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[v1].pName);// "Leave %s" else strcpy(byte_591098, pGlobalTXT_LocalizationStrings[79]);// "Exit" - result = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)17, 0, (int)byte_591098); + result = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)17, 0, (int)byte_591098); pDialogueWindow = result; return result; } @@ -17066,10 +17062,8 @@ //----- (00445308) -------------------------------------------------------- -int __fastcall sub_445308(int a1) -{ - int result; // eax@12 - +const char *__fastcall sub_445308(int a1) +{ if ( a1 == 10 || a1 == 11 || a1 == 12 @@ -17081,12 +17075,11 @@ || a1 == 42 || a1 == 43 || a1 == 52 ) - result = *(&pNPCStats->field_13A60 + 5 * a1); - else - result = dword_722320; - return result; -} -// 722320: using guessed type int dword_722320; + return (const char *)*(&pNPCStats->field_13A60 + 5 * a1); + else + return pNPCTopics[407].pTopic; +} + //----- (00445350) -------------------------------------------------------- void __cdecl DrawDialogueUI() @@ -17246,7 +17239,7 @@ } if ( byte_5B0938[0] ) goto LABEL_24; - v7 = ptr_F8B1E8; + v7 = (char *)ptr_F8B1E8; LABEL_37: v8 = 0; goto LABEL_38; @@ -18154,7 +18147,7 @@ pVideoPlayer->Unload(); pVideoPlayer->bStopBeforeSchedule = 0; pVideoPlayer->field_40 = 0; - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); v128 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; v13 = &pSomeEVT[v9]; @@ -18193,7 +18186,7 @@ if ( v128 == 13 ) pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); } - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); goto LABEL_291; case EVENT_CheckSkill: @@ -18339,13 +18332,13 @@ if ( EnterHouse((enum HOUSE_TYPE)170) ) { pAudioPlayer->StopChannels(-1, -1); - ptr_507BC0 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior, 170, 0); + ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 170, 0); ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, v7, 0); ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, v7, 0); ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, v7, 0); ptr_507BC0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, v7, 0); ptr_507BC0->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, v7, 0); - ptr_F8B1E8 = (char *)dword_72193C; + ptr_F8B1E8 = pNPCTopics[90].pText; } } } @@ -18417,7 +18410,7 @@ if ( EnterHouse((enum HOUSE_TYPE)165) ) { pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); - v47 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior, 165, 0); + v47 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0); ptr_507BC0 = v47; v48 = v47->pControlsHead; if ( v48 ) @@ -19140,7 +19133,7 @@ v104 = 187; if ( uCurrentHouse_Animation != 167 ) v104 = v103; - ptr_507BC0 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior, v104, 0); + ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, v104, 0); ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, v7, 0); ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, v7, 0); ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, v7, 0); diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_4.cpp --- a/mm7_4.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_4.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -5139,7 +5139,7 @@ } else { - v11 = (char *)dword_721824; + v11 = (char *)pNPCTopics[55].pText; } pPlayer = v61; v13 = a3; @@ -6000,7 +6000,7 @@ pTextures_arrowr[v4] = &pIcons_LOD->pTextures[v3]; } while ( uControlParam < 20 ); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640u, 480u, WINDOW_Credits, 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); uControlParama = 0; uXa = 8; do @@ -6478,7 +6478,7 @@ v26 = 0; stru_506F20.Release(); stru_506F20.Load("makeme.pcx", 0); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Resume(); v2 = 6; pGUIWindow_CurrentMenu->field_40 = 0; @@ -6714,7 +6714,7 @@ } while ( (signed int)v10 < (signed int)((char *)&pParty->field_871C[455] + 2) ); pAudioPlayer->StopChannels(-1, -1); - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->Suspend(); return v26; } @@ -6832,7 +6832,7 @@ v21.pPixels, (signed __int16)v21.uWidth); free(pString); - pWindow_Credits = GUIWindow::Create(0, 0, 640u, 480u, WINDOW_Credits, 0, (int)ptr); + pWindow_Credits = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, (int)ptr); pWindow_Credits->CreateButton(0, 0, 0, 0, 1, 0, 0x71u, 0, 0x1Bu, nullstring, 0); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 9; SetCurrentMenuID(8u); @@ -6862,7 +6862,7 @@ } else { - if ( pAsyncMouse ) + if (pAsyncMouse) pAsyncMouse->_46B736_consume_click_lists(1); if ( dword_A74C88 ) { @@ -10110,7 +10110,7 @@ dword_F8B1A8 = 0; v11 = 0; uDialogueType = 84; - ptr_F8B1E8 = (char *)dword_722B44; + ptr_F8B1E8 = (char *)pNPCTopics[667].pText; v0 = _4F0882_evt_VAR_PlayerItemInHands_vals; while ( 1 ) { @@ -10135,7 +10135,7 @@ if ( (signed int)v0 >= (signed int)((char *)dword_4F08EC + 2) ) goto LABEL_10; } - ptr_F8B1E8 = (char *)dword_722B3C; + ptr_F8B1E8 = (char *)pNPCTopics[666].pText; v4 = _4F0882_evt_VAR_PlayerItemInHands_vals[2 * v11]; dword_F8B1A8 = _4F0882_evt_VAR_PlayerItemInHands_vals[2 * v11]; pParty->pPlayers[0].AddVariable(VAR_PlayerItemInHands, v4); @@ -10231,7 +10231,7 @@ if ( a1 == 13 ) { ptr_F8B1E8 = (char *)*(&pNPCStats->field_13A64 + 5 * v2->uProfession); - ptr_F8B1E8 = sub_495461(ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); + ptr_F8B1E8 = sub_495461((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); sub_4B40E6(); byte_F8B1EC = 0; goto _return; @@ -10432,7 +10432,7 @@ byte_F8B1EC = 0; uDialogueType = 13; ptr_F8B1E8 = (char *)*(&pNPCStats->field_13A64 + 5 * v2->uProfession); - ptr_F8B1E8 = sub_495461(ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); + ptr_F8B1E8 = sub_495461((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); if ( uActiveCharacter ) pPlayers[uActiveCharacter]->PlaySound(38, 0); v19 = pGlobalTXT_LocalizationStrings[155]; @@ -10477,13 +10477,7 @@ _return: pVideoPlayer->_4BF5B2(); } -// 591080: using guessed type int dword_591080; -// F8B19C: using guessed type int dword_F8B19C; -// F8B1A8: using guessed type int dword_F8B1A8; -// F8B1B0: using guessed type int dword_F8B1B0; -// F8B1B4: using guessed type int dword_F8B1B4; -// F8B1D8: using guessed type int dword_F8B1D8; -// F8B1EC: using guessed type char byte_F8B1EC; + //----- (004B254D) -------------------------------------------------------- char *__thiscall _4B254D_SkillMasteryTeacher(int _this) @@ -10528,7 +10522,7 @@ v2 = (_this - 200) % 3; v3 = (_this - 200) / 3; v4 = v2; - v35 = (char *)dword_721A64; + v35 = (char *)pNPCTopics[127].pText; dword_F8B1AC_something_todo_with_awards = v3; if ( v2 ) { @@ -10613,12 +10607,12 @@ return pTmpBuf; } if ( !v1->CanAct() ) - return _721A3C_npc_text; + return (char *)pNPCTopics[122].pText; if ( !v7 ) - return (char *)_721A84_npc_text; + return (char *)pNPCTopics[131].pText; v16 = SkillToMastery(a1[0]); if ( (signed int)v16 > v4 + 1 ) - return (char *)_721A6C_npc_text[2 * v4]; + return (char *)pNPCTopics[v4 + 128].pText; if ( v34 != 2 ) { if ( v34 == 3 ) @@ -10785,7 +10779,7 @@ dword_F8B1B4 = 1000; LABEL_42: if ( dword_F8B1B4 > pParty->uNumGold ) - return (char *)dword_721A4C; + return (char *)pNPCTopics[124].pText; LABEL_79: dword_F8B1A8 = 1; if ( v34 == 2 ) @@ -10816,13 +10810,12 @@ //----- (004B29F2) -------------------------------------------------------- -int __fastcall sub_4B29F2(int a1) +const char *__fastcall sub_4B29F2(int a1) { int v1; // esi@1 Player *v2; // edi@1 int v3; // eax@1 Player *v4; // ecx@1 - int result; // eax@2 v1 = a1; dword_F8B1A8 = 0; @@ -10835,26 +10828,25 @@ { if ( (unsigned __int16)_449B57_test_bit((unsigned __int8 *)v2->field_152, dword_F8B1AC_something_todo_with_awards) ) { - result = dword_721A44; + return pNPCTopics[123].pText; } else { if ( dword_F8B1B4 <= pParty->uNumGold ) { - result = dword_7219DC[2 * v1]; dword_F8B1A8 = 1; + return pNPCTopics[v1 + 110].pText; } else { - result = dword_721A4C; - } - } - } - else - { - result = (int)_721A3C_npc_text; - } - return result; + return pNPCTopics[124].pText; + } + } + } + else + { + return pNPCTopics[122].pText; + } } @@ -11863,9 +11855,9 @@ v0 = GetNPCData(uDialogue_SpeakingActorNPC_ID); v1 = 0; - pDialogueWindow->uWindowType = 1; + pDialogueWindow->eWindowType = WINDOW_MainMenu; pDialogueWindow->Release(); - v2 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)10, 1, 0); + v2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_A, 1, 0); pDialogueWindow = v2; if ( *(&pNPCStats->field_13A5C + 5 * v0->uProfession) ) { @@ -11905,22 +11897,22 @@ v1 = a4; uDialogueType = 81; - ptr_F8B1E8 = (char *)dword_721984[2 * a4]; + ptr_F8B1E8 = (char *)pNPCTopics[a4 + 99].pText; sub_4B29F2(a4); pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x15Eu, WINDOW_Credits, v1, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x15E, WINDOW_MainMenu, v1, 0); ptr_5076F4 = pDialogueWindow->CreateButton( - 0x1D7u, - 0x1BDu, - 0xA9u, - 0x23u, + 0x1D7, + 0x1BD, + 0xA9, + 0x23, 1, 0, - 0x71u, + 0x71, 0, 0, pGlobalTXT_LocalizationStrings[34], - (Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0), + (Texture *)(uTextureID_506438 != -1 ? &pIcons_LOD->pTextures[uTextureID_506438] : 0), 0); pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, nullstring, 0); pDialogueWindow->CreateButton( @@ -11948,10 +11940,10 @@ v1 = a4; uDialogueType = 78; - ptr_F8B1E8 = (char *)dword_721BAC[2 * a4]; + ptr_F8B1E8 = (char *)pNPCTopics[a4 + 168].pText; _4B254D_SkillMasteryTeacher(a4); pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x15Eu, WINDOW_Credits, v1, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x15Eu, WINDOW_MainMenu, v1, 0); v2 = nullstring; ptr_5076F4 = pDialogueWindow->CreateButton( 0x1D7u, @@ -11985,7 +11977,7 @@ v0 = 0; v1 = array_5913D8[(unsigned int)((char *)array_5913D8[6] + -(dword_591080 != 0) - 1)]; pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x15Eu, WINDOW_Credits, 0, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x15Eu, WINDOW_MainMenu, 0, 0); ptr_5076F4 = pDialogueWindow->CreateButton( 0x1D7u, 0x1BDu, @@ -12059,7 +12051,7 @@ if ( _this + 1 == uNumDialogueNPCPortraits && uHouse_ExitPic ) { pDialogueWindow->Release(); - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_Credits, 0, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); sprintfex(byte_591098, pGlobalTXT_LocalizationStrings[411], pMapStats->pInfos[uHouse_ExitPic].pName); ptr_5076F4 = pDialogueWindow->CreateButton( 0x236u, @@ -12114,7 +12106,7 @@ GUIButton::_41D0D8((GUIButton *)array_5913D8[i + 7]); } v4 = 1; - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x159u, WINDOW_Credits, 0, 0); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x159u, WINDOW_MainMenu, 0, 0); ptr_5076F4 = pDialogueWindow->CreateButton( 471u, 445u, @@ -12518,9 +12510,9 @@ } if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) { - v31 = _721A3C_npc_text; + v31 = pNPCTopics[122].pText; v32 = v71; - v33 = pFontArrus->CalcTextHeight(_721A3C_npc_text, &v65, 0, 0); + v33 = pFontArrus->CalcTextHeight(pNPCTopics[122].pText, &v65, 0, 0); v65.DrawText2(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3u); result = (int)pDialogueWindow; pDialogueWindow->field_28 = 0; @@ -13915,9 +13907,9 @@ (unsigned __int8 *)v1->field_152, word_4F0704[2 * (unsigned int)ptr_507BC0->ptr_1C]) ) { - v36 = dword_721A34; + v36 = pNPCTopics[121].pText; v37 = v57; - v38 = pFontArrus->CalcTextHeight(dword_721A34, &v52, 0, 0); + v38 = pFontArrus->CalcTextHeight(pNPCTopics[121].pText, &v52, 0, 0); v52.DrawText2(pFontArrus, 0, (212 - v38) / 2 + 101, v37, v36, 3u); result = (int)pDialogueWindow; pDialogueWindow->field_28 = 0; @@ -14612,9 +14604,9 @@ (unsigned __int8 *)v1->field_152, word_4F0754[2 * (unsigned int)ptr_507BC0->ptr_1C]) ) { - v24 = dword_721BC4; + v24 = pNPCTopics[171].pText; v25 = v31; - v26 = pFontArrus->CalcTextHeight(dword_721BC4, &v28, 0, 0); + v26 = pFontArrus->CalcTextHeight(pNPCTopics[171].pText, &v28, 0, 0); v28.DrawText2(pFontArrus, 0, (212 - v26) / 2 + 101, v25, v24, 3u); result = (int)pDialogueWindow; pDialogueWindow->field_28 = 0; @@ -15689,7 +15681,7 @@ LABEL_19: strcpy(byte_591098, v21); LABEL_20: - pDialogueWindow = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)26, 0, (int)byte_591098); + pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)26, 0, (int)byte_591098); //if ( BYTE1(pAnimatedRooms[p2DEvents_minus1___02[26 * v9]].field_C) ) if ( BYTE1(pAnimatedRooms[p2DEvents[v9 - 1].uAnimationID].field_C) ) HousePlaySomeSound(v9, 1); diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_5.cpp --- a/mm7_5.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_5.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -583,7 +583,7 @@ uTextureID_507CB0 = pIcons_LOD->LoadTexture("option03", TEXTURE_16BIT_PALETTE); uTextureID_507CB8 = pIcons_LOD->LoadTexture("option02", TEXTURE_16BIT_PALETTE); uTextureID_507CB4 = pIcons_LOD->LoadTexture("option01", TEXTURE_16BIT_PALETTE); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_Options, 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_Options, 0, 0); pGUIWindow_CurrentMenu->CreateButton( 0x16u, 0x10Eu, @@ -785,7 +785,7 @@ uTextureID_507BFC = pIcons_LOD->LoadTexture("resume1", TEXTURE_16BIT_PALETTE); uTextureID_507C00 = pIcons_LOD->LoadTexture("optkb_1", TEXTURE_16BIT_PALETTE); uTextureID_507C04 = pIcons_LOD->LoadTexture("optkb_2", TEXTURE_16BIT_PALETTE); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_KeyMappingOptions, 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_KeyMappingOptions, 0, 0); pGUIWindow_CurrentMenu->CreateButton(0xF1u, 0x12Eu, 0xD6u, 0x28u, 1, 0, 0x71u, 0, 0, nullstring, 0); pGUIWindow_CurrentMenu->CreateButton(19u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, 0x1A0u, 0, 0, nullstring, 0); pGUIWindow_CurrentMenu->CreateButton(127u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, 0x1A1u, 0, 0, nullstring, 0); @@ -891,7 +891,7 @@ uTextureID_507C50 = pIcons_LOD->LoadTexture("opvdG-bs", TEXTURE_16BIT_PALETTE); uTextureID_507C54 = pIcons_LOD->LoadTexture("opvdG-cl", TEXTURE_16BIT_PALETTE); uTextureID_507C58 = pIcons_LOD->LoadTexture("opvdG-tn", TEXTURE_16BIT_PALETTE); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_VideoOptions, 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_VideoOptions, 0, 0); pGUIWindow_CurrentMenu->CreateButton(0xF1u, 0x12Eu, 0xD6u, 0x28u, v0, 0, 0x71u, 0, 0, v1, 0); if ( pRenderer->pRenderD3D ) { @@ -1175,7 +1175,7 @@ } goto LABEL_184; } - ModalWindow(pstr_722494, 0); + ModalWindow(pNPCTopics[453].pText, 0); goto _continue; case UIMSG_SkillUp|0x2: pGUIWindow_CurrentMenu->Release(); @@ -1225,7 +1225,7 @@ pGUIWindow_CurrentMenu->Release(); pEventTimer->Pause(); pAudioPlayer->StopChannels(-1, -1); - v26 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_Book, uMessage, 0); + v26 = GUIWindow::Create(0, 0, 640, 480, WINDOW_Book, uMessage, 0); v27 = 354; v28 = 570; v170 = 0; @@ -1241,7 +1241,7 @@ pGUIWindow_CurrentMenu->Release(); pEventTimer->Pause(); pAudioPlayer->StopChannels(-1, -1); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_Book, uMessage, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_Book, uMessage, 0); ptr_507BE0 = GUIWindow::Create(0x258u, 0x169u, 0, 0, (enum WindowType)99, (int)ptr_507A00, 0); bFlashHistoryBook = 0; goto _continue; @@ -1588,7 +1588,7 @@ uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = v0; if ( !pIcons_LOD->uNumPrevLoadedFiles ) pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles; - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)3, 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)3, 0, 0); uTextureID_507944 = pIcons_LOD->LoadTexture("options", TEXTURE_16BIT_PALETTE); uTextureID_507940 = pIcons_LOD->LoadTexture("new1", TEXTURE_16BIT_PALETTE); uTextureID_50793C = pIcons_LOD->LoadTexture("load1", TEXTURE_16BIT_PALETTE); @@ -2041,7 +2041,7 @@ LABEL_438: v141 = (WindowType)9; LABEL_439: - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, v141, v148, v162); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, v141, v148, v162); goto _continue; case UIMSG_B2: v165 = 0; @@ -2468,7 +2468,7 @@ if ( !uActiveCharacter || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions ) goto LABEL_90; - ptr_507BC8 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)104, uMessageParam, 0); + ptr_507BC8 = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)104, uMessageParam, 0); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 25; pEventTimer->Pause(); goto _continue; @@ -2881,7 +2881,7 @@ GUIWindow::Create(0x1DCu, 0x1C2u, 0, 0, (enum WindowType)90, (int)ptr_5079F8, 0); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 8; pEventTimer->Pause(); - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)18, 0, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)18, 0, 0); pAudioPlayer->PlaySound((SoundID)48, 0, 0, -1, 0, 0, 0, 0); viewparams->field_48 = v0; goto _continue; @@ -2902,7 +2902,7 @@ pEventTimer->Pause(); pAudioPlayer->StopChannels(-1, -1); uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 104; - pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, (enum WindowType)12, 5, 0); + pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)12, 5, 0); papredoll_dbrds[2] = pIcons_LOD->LoadTexture("BUTTEXI1", TEXTURE_16BIT_PALETTE); ptr_5076F4 = pGUIWindow_CurrentMenu->CreateButton( 0x187u, @@ -2944,12 +2944,12 @@ dword_50651C = -1; goto _continue; case UIMSG_A9: - GUIWindow::Create(ptr_507B9C->uX, ptr_507B9C->uY, 0, 0, WINDOW_HouseInterior|0x42, (int)ptr_507B9C, 0); + GUIWindow::Create(ptr_507B9C->uX, ptr_507B9C->uY, 0, 0, (WindowType)(WINDOW_HouseInterior|0x42), (int)ptr_507B9C, 0); LABEL_707: dword_506548 = v0; goto _continue; case UIMSG_AA: - GUIWindow::Create(ptr_507BA0->uX, ptr_507BA0->uY, 0, 0, WINDOW_HouseInterior|0x42, (int)ptr_507BA0, 0); + GUIWindow::Create(ptr_507BA0->uX, ptr_507BA0->uY, 0, 0, (WindowType)(WINDOW_HouseInterior|0x42), (int)ptr_507BA0, 0); LABEL_709: dword_506544 = v0; goto _continue; @@ -3069,7 +3069,7 @@ pCharacterScreen_AwardsBtn->uY, 0, 0, - WINDOW_HouseInterior|0x42, + (WindowType)(WINDOW_HouseInterior|0x42), (int)pCharacterScreen_AwardsBtn, 0); sub_419100(); @@ -3371,7 +3371,7 @@ //----- (00435748) -------------------------------------------------------- void __cdecl GUI_MainMenuMessageProc() { - AudioPlayer *v0; // ebp@2 + //AudioPlayer *v0; // ebp@2 char *v1; // ebx@2 unsigned int v2; // ecx@18 void *v3; // edi@21 @@ -3421,7 +3421,7 @@ if ( pMessageQueue_50CBD0->uNumMessages ) { - v0 = pAudioPlayer; + //v0 = pAudioPlayer; v1 = (char *)pParty->pPlayers; do { @@ -3521,7 +3521,7 @@ (enum WindowType)92, (int)pCreationUI_BtnPressLeft[v25], 1); - v0 = pAudioPlayer; + //v0 = pAudioPlayer; pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0); v22 = (Player *)v23; goto LABEL_117; @@ -3550,7 +3550,7 @@ (enum WindowType)92, (int)pCreationUI_BtnPressRight[v21], 1); - v0 = pAudioPlayer; + //v0 = pAudioPlayer; pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0); v22 = (Player *)v19; LABEL_117: @@ -3904,7 +3904,7 @@ v40 = 2; goto LABEL_89; } - if ( v45 == 57 ) + if ( v45 == UIMSG_ExitToWindows ) { GUIWindow::Create(0x1EFu, 0x151u, 0, 0, (enum WindowType)90, (int)pMainMenu_BtnExit, 0); v40 = 4; @@ -14245,7 +14245,7 @@ v3 = a4; pEventTimer->Pause(); dword_506F0C[0] = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; - result = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_FinalWindow, v3, (int)v2); + result = GUIWindow::Create(0, 0, 640, 480, WINDOW_FinalWindow, v3, (int)v2); ptr_507BDC = result; uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 22; return result; @@ -14903,12 +14903,13 @@ GUIButton Dst; // [sp+28h] [bp-E0h]@133 ItemGen v51; // [sp+E4h] [bp-24h]@129 - if ( GetCurrentMenuID() != 6 ) - sub_41CD4F(0x22u); + if (GetCurrentMenuID() != MENU_CREATEPARTY) + sub_41CD4F(34); for ( i = 1; i <= uNumVisibleWindows; ++i ) { - v0 = (GUIWindow *)&pWindowList_at_506F50_minus1_indexing[21 * pVisibleWindowsIdxs[i]]; - v1 = v0->uWindowType; + //v0 = (GUIWindow *)&pWindowList_at_506F50_minus1_indexing[21 * pVisibleWindowsIdxs[i]]; + v0 = &pWindowList[pVisibleWindowsIdxs[i] - 1]; + v1 = v0->eWindowType; if ( (signed int)v1 > 70 ) { if ( (signed int)v1 > 95 ) @@ -15889,7 +15890,7 @@ if ( v5 ) { if ( a2 == 57 ) - v7 = (const CHAR *)dword_72266C; + v7 = pNPCTopics[512].pText; else v7 = (const CHAR *)*(&pNPCStats->field_13A5C + 5 * v5->uProfession); lpsz = v7; @@ -16406,7 +16407,8 @@ return; while ( 1 ) { - v8 = (GUIWindow *)&pWindowList_at_506F50_minus1_indexing[21 * pVisibleWindowsIdxs[v7]]; + //v8 = (GUIWindow *)&pWindowList_at_506F50_minus1_indexing[21 * pVisibleWindowsIdxs[v7]]; + v8 = &pWindowList[pVisibleWindowsIdxs[v7] - 1]; if ( x >= (signed int)v8->uFrameX ) { if ( x <= (signed int)v8->uFrameZ && y >= (signed int)v8->uFrameY && y <= (signed int)v8->uFrameW ) @@ -16516,7 +16518,7 @@ { if ( pArcomageGame->bGameInProgress == 1 ) { - if ( pAsyncMouse ) + if (pAsyncMouse) pArcomageGame->stru1.field_0 = 7; } } @@ -16526,7 +16528,7 @@ { if ( pArcomageGame->bGameInProgress == 1 ) { - if ( pAsyncMouse ) + if (pAsyncMouse) pArcomageGame->stru1.field_0 = 8; } } diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_6.cpp --- a/mm7_6.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_6.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -2342,7 +2342,7 @@ { if ( ptr_507BD4 ) return result; - ptr_507BD4 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior|0x2, (int)&pStru277[result], 0); + ptr_507BD4 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); ptr_507BD4->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 0, 0x31u, nullstring, 0); ptr_507BD4->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 1u, 0x32u, nullstring, 0); ptr_507BD4->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 2u, 0x33u, nullstring, 0); @@ -2353,7 +2353,7 @@ { if ( ptr_507BD4 ) return result; - v17 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior|0x2, (int)&pStru277[result], 0); + v17 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); v29 = 0; v28 = nullstring; v27 = 0; @@ -2376,7 +2376,7 @@ { if ( ptr_507BD4 ) return result; - v17 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior|0x2, (int)&pStru277[result], 0); + v17 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); v29 = 0; v28 = nullstring; v27 = 0; @@ -2400,7 +2400,7 @@ { if ( ptr_507BD4 ) return result; - ptr_507BD4 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior|0x2, 20 * result + 5292232, 0); + ptr_507BD4 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), 20 * result + 5292232, 0); ptr_507BD4->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 0, 0x31u, nullstring, 0); ptr_507BD4->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 1u, 0x32u, nullstring, 0); ptr_507BD4->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 2u, 0x33u, nullstring, 0); @@ -2421,7 +2421,7 @@ } if ( HIBYTE(v6) & 2 && !ptr_507BD4 ) { - ptr_507BD4 = GUIWindow::Create(0, 0, 0x280u, 0x1E0u, WINDOW_HouseInterior|0x2, 20 * result + 5292232, 0); + ptr_507BD4 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), 20 * result + 5292232, 0); ptr_5079EC = ptr_507BD4->CreateButton( 0x1D5u, 0xB2u, diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_data.cpp --- a/mm7_data.cpp Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_data.cpp Wed Oct 10 14:21:15 2012 +0200 @@ -1,5 +1,6 @@ #include "mm7_data.h" +#include "NPC.h" @@ -324,6 +325,7 @@ int (__cdecl *sprintfex)(char *a1, const char *a2, ...) = nullptr; +int pWindowList_at_506F50_minus1_indexing[1]; int dword_4C9890[10]; // weak int dword_4C9920[16]; // weak _UNKNOWN unk_4D8548; // weak @@ -1060,24 +1062,13 @@ char aGammaControlNo[777]; // idb __int16 word_4E8152[11]; char byte_4E8168[116]; -char aEWorkMsdevMm7Mm7CodeGenerate_cpp[777]; // idb -char aCanTCreateRandomMonsterSSeeMapstats_txtAndMonsters[777]; // idb -char aSC[777]; // idb -char aSB[5]; // weak -char aSA[777]; // idb -char aElementalLightA[777]; // idb -char aElementalLightB[18]; // weak -char aElementalLightC[18]; // weak -char asc_4E82A4[2]; // weak -int dword_4E82B4; // weak -int dword_4E82B8; // weak -int dword_4E82BC; // weak -int dword_4E82C0; // weak char aD3dTextureName[777]; // idb char aLogd3d_txt[777]; // idb char byte_4E8398[777]; // weak _UNKNOWN unk_4E83B0; // weak _UNKNOWN unk_4E8408; // weak +stru355 stru_4E82A4 = {0x20, 0x41, 0, 0x20, 0xFF0000, 0xFF00, 0xFF, 0xFF000000}; +stru355 stru_4EFCBC = {0x20, 0x41, 0, 0x10, 0x7C00, 0x3E0, 0x1F, 0x8000}; char aGlobal_txt[777]; // idb char aMagic[777]; // idb char aDark_0[777]; // idb @@ -2084,7 +2075,6 @@ char aDirect3dRender[777]; // idb char aD3drendInitFai[777]; // idb char aThereArenTAn_0[777]; // idb -int dword_4EFCBC[8]; char aErrorExecuting[777]; // idb char aEWorkMsdevM_23[777]; // idb char aHiscreen16Load[777]; // idb @@ -2370,7 +2360,6 @@ int dword_506E68; // weak __int16 word_506E6C[18]; // weak unsigned int pPrevVirtualCidesMapping[27]; -int pWindowList_at_506F50_minus1_indexing[777]; // idb int dword_506F08; // weak int dword_506F0C[777]; // idb int uRestUI_FoodRequiredToRest; @@ -2702,7 +2691,7 @@ int dword_6BE368_debug_settings_2; // weak unsigned __int8 bUseLoResSprites; unsigned __int8 bUseRegistry; -unsigned __int8 bCanLoadFromCD; +unsigned __int8 bCanLoadFromCD = false; int bShowDamage; // idb unsigned int bAlwaysRun; unsigned int bFlipOnExit; @@ -2721,6 +2710,7 @@ char _702ACC_unused; // weak int bDebugResouces; // weak unsigned int bNoVideo; +bool bNoCD = false; int aborting_app; // weak int dword_720020_zvalues[100]; int dword_7201B0_zvalues[299]; @@ -2755,33 +2745,7 @@ int blv_prev_party_y; // weak char *dword_721660; // idb char *dword_721664; // idb -_UNKNOWN unk_721668_pNPCTopic; // weak -_UNKNOWN unk_72166C_pNPCText; // weak -int dword_721824; // weak -int dword_72193C; // weak -int dword_721984[22]; -int dword_7219DC[777]; // weak -char *dword_721A34; // idb -char *_721A3C_npc_text; // idb -int dword_721A44; // weak -int dword_721A4C; // weak -int dword_721A64; // weak -int _721A6C_npc_text[777]; // weak -int _721A84_npc_text; // weak -int dword_721BAC[6]; -char *dword_721BC4; // idb -_UNKNOWN dword_721E24[777]; // idb -int dword_722164; // weak -int dword_72216C; // weak -int dword_722174; // weak -char *pStr_72217C; // idb -int dword_722240[777]; // idb -int dword_722320; // weak -char *pstr_722494; -int dword_72266C; // weak -_UNKNOWN unk_722880; // weak -int dword_722B3C; // weak -int dword_722B44; // weak +NPCTopic pNPCTopics[789]; char *dword_722F10; // idb const char *pQuestTable[512]; _UNKNOWN unk_723714; // weak @@ -2791,7 +2755,7 @@ int dword_723E80_award_related[777]; // weak int dword_723E84[777]; // weak int dword_7241C8; // weak -struct NPCStats *pNPCStats; +struct NPCStats *pNPCStats = nullptr; char *aNPCProfessionNames[59]; char *pAwardsTXT_Raw; char *pScrollsTXT_Raw; @@ -2895,7 +2859,7 @@ int dword_F8B198; // weak int dword_F8B19C; // weak __int16 word_F8B1A0; // weak -char *dword_F8B1A4; // idb +const char *dword_F8B1A4; // idb int dword_F8B1A8; // weak int dword_F8B1AC_something_todo_with_awards; // idb int dword_F8B1B0; // weak @@ -2906,7 +2870,7 @@ int dword_F8B1DC; // weak int dword_F8B1E0; // weak int dword_F8B1E4; // weak -char *ptr_F8B1E8; // idb +const char *ptr_F8B1E8; // idb char byte_F8B1EC; // weak char byte_F8B1EF[777]; // weak char byte_F8B1F0[4]; diff -r ac0fb48cd27a -r 2ca04ccb612a mm7_data.h --- a/mm7_data.h Tue Oct 09 13:09:08 2012 +0200 +++ b/mm7_data.h Wed Oct 10 14:21:15 2012 +0200 @@ -312,6 +312,7 @@ // Data declarations extern int (__cdecl *sprintfex)(char *a1, const char *a2, ...); +extern int pWindowList_at_506F50_minus1_indexing[1]; extern int dword_4C9890[10]; // weak extern int dword_4C9920[16]; // weak extern _UNKNOWN unk_4D8548; // weak @@ -1048,24 +1049,14 @@ extern char aGammaControlNo[]; // idb extern __int16 word_4E8152[11]; extern char byte_4E8168[116]; -extern char aEWorkMsdevMm7Mm7CodeGenerate_cpp[]; // idb -extern char aCanTCreateRandomMonsterSSeeMapstats_txtAndMonsters[]; // idb -extern char aSC[]; // idb -extern char aSB[5]; // weak -extern char aSA[]; // idb -extern char aElementalLightA[]; // idb -extern char aElementalLightB[18]; // weak -extern char aElementalLightC[18]; // weak -extern char asc_4E82A4[2]; // weak -extern int dword_4E82B4; // weak -extern int dword_4E82B8; // weak -extern int dword_4E82BC; // weak -extern int dword_4E82C0; // weak extern char aD3dTextureName[]; // idb extern char aLogd3d_txt[]; // idb extern char byte_4E8398[]; // weak extern _UNKNOWN unk_4E83B0; // weak extern _UNKNOWN unk_4E8408; // weak +#include "Texture.h" +extern stru355 stru_4E82A4;// = {0x20, 0x41, 0, 0x20, 0xFF0000, 0xFF00, 0xFF, 0xFF000000}; +extern stru355 stru_4EFCBC;// = {0x20, 0x41, 0, 0x10, 0x7C00, 0x3E0, 0x1F, 0x8000}; extern char aGlobal_txt[]; // idb extern char aMagic[]; // idb extern char aDark_0[]; // idb @@ -2072,7 +2063,6 @@ extern char aDirect3dRender[]; // idb extern char aD3drendInitFai[]; // idb extern char aThereArenTAn_0[]; // idb -extern int dword_4EFCBC[8]; extern char aErrorExecuting[]; // idb extern char aEWorkMsdevM_23[]; // idb extern char aHiscreen16Load[]; // idb @@ -2359,7 +2349,6 @@ extern int dword_506E68; // weak extern __int16 word_506E6C[18]; // weak extern unsigned int pPrevVirtualCidesMapping[27]; -extern int pWindowList_at_506F50_minus1_indexing[]; // idb extern int dword_506F08; // weak extern int dword_506F0C[]; // idb extern int uRestUI_FoodRequiredToRest; @@ -2710,6 +2699,7 @@ extern char _702ACC_unused; // weak extern int bDebugResouces; // weak extern unsigned int bNoVideo; +extern bool bNoCD; extern int aborting_app; // weak extern int dword_720020_zvalues[100]; extern int dword_7201B0_zvalues[299]; @@ -2744,33 +2734,6 @@ extern int blv_prev_party_y; // weak extern char *dword_721660; // idb extern char *dword_721664; // idb -extern _UNKNOWN unk_721668_pNPCTopic; // weak -extern _UNKNOWN unk_72166C_pNPCText; // weak -extern int dword_721824; // weak -extern int dword_72193C; // weak -extern int dword_721984[22]; -extern int dword_7219DC[]; // weak -extern char *dword_721A34; // idb -extern char *_721A3C_npc_text; // idb -extern int dword_721A44; // weak -extern int dword_721A4C; // weak -extern int dword_721A64; // weak -extern int _721A6C_npc_text[]; // weak -extern int _721A84_npc_text; // weak -extern int dword_721BAC[6]; -extern char *dword_721BC4; // idb -extern _UNKNOWN dword_721E24[]; // idb -extern int dword_722164; // weak -extern int dword_72216C; // weak -extern int dword_722174; // weak -extern char *pStr_72217C; // idb -extern int dword_722240[]; // idb -extern int dword_722320; // weak -extern char *pstr_722494; -extern int dword_72266C; // weak -extern _UNKNOWN unk_722880; // weak -extern int dword_722B3C; // weak -extern int dword_722B44; // weak extern char *dword_722F10; // idb extern const char *pQuestTable[512]; extern _UNKNOWN unk_723714; // weak @@ -2884,7 +2847,7 @@ extern int dword_F8B198; // weak extern int dword_F8B19C; // weak extern __int16 word_F8B1A0; // weak -extern char *dword_F8B1A4; // idb +extern const char *dword_F8B1A4; // idb extern int dword_F8B1A8; // weak extern int dword_F8B1AC_something_todo_with_awards; // idb extern int dword_F8B1B0; // weak @@ -2895,7 +2858,7 @@ extern int dword_F8B1DC; // weak extern int dword_F8B1E0; // weak extern int dword_F8B1E4; // weak -extern char *ptr_F8B1E8; // idb +extern const char *ptr_F8B1E8; // idb extern char byte_F8B1EC; // weak extern char byte_F8B1EF[]; // weak extern char byte_F8B1F0[4]; @@ -3214,7 +3177,7 @@ void __cdecl DrawBranchlessDialogueUI(); void __fastcall sub_4451A8_press_any_key(int a1, int a2, int a4); void __cdecl sub_4452BB(); -int __fastcall sub_445308(int a1); +const char *__fastcall sub_445308(int a1); void __cdecl DrawDialogueUI(); struct NPCData *__fastcall GetNPCData(unsigned int npcid); struct NPCData *__fastcall GetNewNPCData(signed int npcid, int a2); @@ -3519,7 +3482,7 @@ void __cdecl sub_4B1ECE(); void __fastcall sub_4B2001(signed int a1); char *__thiscall _4B254D_SkillMasteryTeacher(int _this); -int __fastcall sub_4B29F2(int a1); +const char *__fastcall sub_4B29F2(int a1); char __cdecl sub_4B2A74(); struct GUIButton *__fastcall sub_4B36CC(int a1, unsigned int a2); int __thiscall sub_4B3703(void *_this); @@ -3550,7 +3513,7 @@ POINT *__cdecl sub_4B9CC6(); void __cdecl sub_4BA928(); signed int __fastcall sub_4BB756(signed int a1); -int __cdecl sub_4BBA85_bounties(); +const char *sub_4BBA85_bounties(); void __cdecl sub_4BBCDD(); void __fastcall _4BBF61_summon_actor(int a1, __int16 x, int y, int z); // idb void __cdecl ArenaFight();