# HG changeset patch # User Ritor1 # Date 1358738368 -21600 # Node ID e753d08b78ec5a15b15510d2af649148b094529e # Parent 968e681bcceb7d976bd3d6716f9dfeed01820fa8# Parent 196847ece26a13cc56ae65062f7cd7bd2eec1406 Слияние diff -r 968e681bcceb -r e753d08b78ec AIL.cpp --- a/AIL.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/AIL.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -10,11 +10,13 @@ int (__stdcall *mss32_AIL_get_preference)(unsigned int) = 0; int (__stdcall *mss32_AIL_digital_configuration)(HDIGDRIVER, int *, int *, char *) = 0; HSAMPLE (__stdcall *mss32_AIL_allocate_sample_handle)(HDIGDRIVER) = 0; +void (__stdcall *mss32_AIL_3D_provider_attribute)(HPROVIDER, char *, void *) = 0; unsigned int (__stdcall *mss32_AIL_redbook_tracks)(HREDBOOK) = 0; int (__stdcall *mss32_AIL_redbook_volume)(HREDBOOK) = 0; unsigned int (__stdcall *mss32_AIL_redbook_stop)(HREDBOOK) = 0; void (__stdcall *mss32_AIL_set_digital_master_volume)(HDIGDRIVER, float) = 0; int (__stdcall *mss32_AIL_redbook_set_volume)(HREDBOOK, int) = 0; +void (__stdcall *mss32_AIL_waveOutClose)(HDIGDRIVER) = 0; unsigned int (__stdcall *mss32_AIL_redbook_pause)(HREDBOOK) = 0; void (__stdcall *mss32_AIL_redbook_track_info)(HREDBOOK, unsigned int, unsigned int *, unsigned int *) = 0; unsigned int (__stdcall *mss32_AIL_redbook_play)(HREDBOOK, unsigned int, unsigned int) = 0; @@ -38,6 +40,7 @@ int (__stdcall *mss32_AIL_WAV_info)(void *, AILSOUNDINFO *) = 0; int (__stdcall *mss32_AIL_decompress_ADPCM)(AILSOUNDINFO *, void *, void *) = 0; HREDBOOK (__stdcall *mss32_AIL_redbook_open)(int) = 0; +void (__stdcall *mss32_AIL_release_sample_handle)(HSAMPLE) = 0; void MSS32_DLL_Initialize() { HMODULE pDll = LoadLibraryW(L"mss32.dll"); @@ -49,11 +52,13 @@ mss32_AIL_get_preference = (int (__stdcall *)(unsigned int))GetProcAddress(pDll, "_AIL_get_preference@4"); mss32_AIL_digital_configuration = (int (__stdcall *)(HDIGDRIVER, int *, int *, char *))GetProcAddress(pDll, "_AIL_digital_configuration@16"); mss32_AIL_allocate_sample_handle = (HSAMPLE (__stdcall *)(HDIGDRIVER))GetProcAddress(pDll, "_AIL_allocate_sample_handle@4"); + mss32_AIL_3D_provider_attribute = (void (__stdcall *)(HPROVIDER,char *, void *))GetProcAddress(pDll, "_AIL_3D_provider_attribute@12"); mss32_AIL_redbook_tracks = (unsigned int (__stdcall *)(HREDBOOK))GetProcAddress(pDll, "_AIL_redbook_tracks@4"); mss32_AIL_redbook_volume = (int (__stdcall *)(HREDBOOK))GetProcAddress(pDll, "_AIL_redbook_volume@4"); mss32_AIL_redbook_stop = (unsigned int (__stdcall *)(HREDBOOK))GetProcAddress(pDll, "_AIL_redbook_stop@4"); mss32_AIL_set_digital_master_volume = (void (__stdcall *)(HDIGDRIVER, float))GetProcAddress(pDll, "_AIL_set_digital_master_volume@8"); mss32_AIL_redbook_set_volume = (int (__stdcall *)(HREDBOOK, int))GetProcAddress(pDll, "_AIL_redbook_set_volume@8"); + mss32_AIL_waveOutClose = (void (__stdcall *)(HDIGDRIVER))GetProcAddress(pDll, "_AIL_waveOutClose@4"); mss32_AIL_redbook_pause = (unsigned int (__stdcall *)(HREDBOOK))GetProcAddress(pDll, "_AIL_redbook_pause@4"); mss32_AIL_redbook_track_info = (void (__stdcall *)(HREDBOOK, unsigned int, unsigned int *, unsigned int *))GetProcAddress(pDll, "_AIL_redbook_track_info@16"); mss32_AIL_redbook_play = (unsigned int (__stdcall *)(HREDBOOK, unsigned int, unsigned int))GetProcAddress(pDll, "_AIL_redbook_play@12"); @@ -77,6 +82,7 @@ mss32_AIL_WAV_info = (int (__stdcall *)(void *, AILSOUNDINFO *))GetProcAddress(pDll, "_AIL_WAV_info@8"); mss32_AIL_decompress_ADPCM = (int (__stdcall *)(AILSOUNDINFO *, void *, void *))GetProcAddress(pDll, "_AIL_decompress_ADPCM@12"); mss32_AIL_redbook_open = (HREDBOOK (__stdcall *)(int))GetProcAddress(pDll, "_AIL_redbook_open@4"); + mss32_AIL_release_sample_handle = (void (__stdcall *)(HSAMPLE))GetProcAddress(pDll, "_AIL_release_sample_handle@4"); } @@ -164,10 +170,12 @@ return (mss32_AIL_open_3D_provider)(a2); } -int __stdcall AIL_3D_provider_attribute(HPROVIDER a1, const char *a2, int *a3) +void __stdcall AIL_3D_provider_attribute(HPROVIDER lib, char *name, void *val) { - __asm int 3 - return 0; + //__asm int 3 + //return 0; + + (mss32_AIL_3D_provider_attribute)(lib,name,val); } // sub_4D8374: using guessed type int __stdcall AIL_redbook_tracks(_DWORD); @@ -200,10 +208,12 @@ return (mss32_AIL_get_preference)(number); } -int __stdcall AIL_waveOutClose(_DIG_DRIVER *) +void __stdcall AIL_waveOutClose(HDIGDRIVER drvr) { - __asm int 3 - return 0; + //__asm int 3 + //return 0; + + (mss32_AIL_waveOutClose)(drvr); } // sub_4D8320: using guessed type int __stdcall AIL_redbook_pause(_DWORD); @@ -236,10 +246,12 @@ return 0; } -int __stdcall AIL_release_sample_handle(void *a1) +void __stdcall AIL_release_sample_handle(HSAMPLE s) { //__asm int 3 - return 0; + //return 0; + + (mss32_AIL_release_sample_handle)(s); } int __stdcall AIL_release_3D_sample_handle(void *a1) diff -r 968e681bcceb -r e753d08b78ec AIL.h --- a/AIL.h Mon Jan 21 09:19:13 2013 +0600 +++ b/AIL.h Mon Jan 21 09:19:28 2013 +0600 @@ -246,13 +246,13 @@ unsigned int __stdcall AIL_redbook_resume(HREDBOOK); int __stdcall AIL_enumerate_3D_providers(int *a1, HPROVIDER *pOutProv, char **pOutName); DWORD __stdcall AIL_open_3D_provider(HPROVIDER a2); -int __stdcall AIL_3D_provider_attribute(HPROVIDER a1, const char *a2, int *a3); +void __stdcall AIL_3D_provider_attribute(HPROVIDER lib, char *name, void *val); int __stdcall AIL_set_3D_provider_preference(HPROVIDER a1, const char *a2, int *a3); -int __stdcall AIL_waveOutClose(_DIG_DRIVER *); +void __stdcall AIL_waveOutClose(HDIGDRIVER drvr); int __stdcall AIL_allocate_3D_sample_handle(HPROVIDER); int __stdcall AIL_set_3D_sample_float_distances(void *a1, long a2, long a3, long a4, long a5); int __stdcall AIL_set_3D_sample_volume(void *a1, long a2); -int __stdcall AIL_release_sample_handle(void *a1); +void __stdcall AIL_release_sample_handle(HSAMPLE s); int __stdcall AIL_3D_position(void *a1, int *a2, float *a3, long *a4); int __stdcall AIL_set_3D_sample_file(long a1, void *a2); int __stdcall AIL_set_3D_sample_loop_count(long a1, long a2); diff -r 968e681bcceb -r e753d08b78ec Actor.cpp --- a/Actor.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/Actor.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -2489,7 +2489,7 @@ v1 = uActiveCharacter; v7 = uActorID; - pPlayer = (Player *)&stru_AA1058[3].pSounds[6972 * uActiveCharacter + 40552]; + pPlayer = &pParty->pPlayers[uActiveCharacter-1];//(Player *)&stru_AA1058[3].pSounds[6972 * uActiveCharacter + 40552]; result = pPlayer->CanAct(); if ( result ) { @@ -4078,7 +4078,7 @@ //while ( v10 ); uActorHeight = v3->uMonsterHeight; uActorRadius = v3->uMonsterRadius; - uMovementSpeed = LOWORD(v9->uBaseSpeed); + uMovementSpeed = v9->uBaseSpeed; if ( !(load_sounds_if_bit1_set & 1) ) { v5 = pSoundSampleIDs; diff -r 968e681bcceb -r e753d08b78ec AudioPlayer.cpp --- a/AudioPlayer.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/AudioPlayer.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -2525,7 +2525,7 @@ { v2 += 128; ++pID; - if ( (signed int)v2 >= (signed int)&pAudioPlayer->p3DSamples[6].field_8 ) + if ( v2 > (void *)&pSounds[2999].pSoundData)//(signed int)&pAudioPlayer->p3DSamples[6].field_8 ) return; } pAllocator->FreeChunk(_this); diff -r 968e681bcceb -r e753d08b78ec Autonotes.h --- a/Autonotes.h Mon Jan 21 09:19:13 2013 +0600 +++ b/Autonotes.h Mon Jan 21 09:19:28 2013 +0600 @@ -22,5 +22,5 @@ enum AUTONOTE_TYPE eType; }; #pragma pack(pop) -extern Autonote stru_723720[195]; // weak +extern Autonote pAutonoteTxt[195]; // weak diff -r 968e681bcceb -r e753d08b78ec GameUIs.cpp --- a/GameUIs.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/GameUIs.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -98,7 +98,7 @@ if ( v4 ) fread(&pSavegameHeader[i], 0x64, 1, v4); if ( !_strcmpi(pSavegameList->pSavesNames[i], pGlobalTXT_LocalizationStrings[613]) )// "AutoSave.MM7" - strcpy(pSavegameList->pSavesNames[i], pGlobalTXT_LocalizationStrings[16]);// "Autosave" + strcpy(pSavegameHeader[i].pName, pGlobalTXT_LocalizationStrings[16]);// "Autosave" v5 = pLODFile.FindContainer("image.pcx", true); if ( !v5 ) { diff -r 968e681bcceb -r e753d08b78ec LOD.h --- a/LOD.h Mon Jan 21 09:19:13 2013 +0600 +++ b/LOD.h Mon Jan 21 09:19:28 2013 +0600 @@ -183,7 +183,7 @@ int uTextureBlueBits; int uNumPrevLoadedFiles; int uTexturePacksCount; - int dword_011BA0; + int pFacesLock; int dword_011BA4; int dword_011BA8; struct IDirectDrawSurface **pHardwareSurfaces; diff -r 968e681bcceb -r e753d08b78ec OSAPI.cpp --- a/OSAPI.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/OSAPI.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -35,6 +35,6 @@ if (hPrevWindow) SetActiveWindow(hPrevWindow); - __debugbreak(); + //__debugbreak(); return 0; } diff -r 968e681bcceb -r e753d08b78ec Outdoor.cpp --- a/Outdoor.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/Outdoor.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -102,7 +102,7 @@ //LABEL_14: pRenderer->DrawSkyD3D(); pRenderer->DrawBuildingsD3D(); - pRenderer->DrawBezierTerrain(); + //pRenderer->DrawBezierTerrain(); goto LABEL_16; } pRenderer->DrawBuildingsSW(); diff -r 968e681bcceb -r e753d08b78ec ParticleEngine.cpp --- a/ParticleEngine.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/ParticleEngine.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -518,7 +518,7 @@ + ((unsigned __int64)(v45 * (signed __int64)v3) >> 16); if ( X_4 < 262144 ) return 0; - v16 = ((unsigned __int64)(v47 * (signed __int64)v4) >> 16) - v43; + v16 = ((unsigned __int64)(v47 * (signed __int64)v4) >> 16); //- v43;Ritor1:it's temporarily v17 = ((unsigned __int64)(uIDa * (signed __int64)v3) >> 16) - ((unsigned __int64)(v45 * (signed __int64)v44) >> 16); } @@ -726,7 +726,7 @@ v14.uParentBillboardID = -1; v1 = this; v2 = this->uStartParticle; - v5 = __OFSUB__(v2, this->uEndParticle); + v5 = v2 > this->uEndParticle;// v5 = __OFSUB__(v2, this->uEndParticle); v3 = v2 == this->uEndParticle; v4 = v2 - this->uEndParticle < 0; v16 = this->uStartParticle; @@ -837,7 +837,7 @@ } v7 += 104; v2 = v16 + 1; - v5 = __OFSUB__(v16 + 1, v1->uEndParticle); + v5 = v16 + 1 > v1->uEndParticle;// v5 = __OFSUB__(v16 + 1, v1->uEndParticle); v3 = v16 + 1 == v1->uEndParticle; v4 = v16++ + 1 - v1->uEndParticle < 0; } diff -r 968e681bcceb -r e753d08b78ec Player.cpp --- a/Player.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/Player.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -6959,7 +6959,7 @@ unsigned int thisa; // [sp+28h] [bp-4h]@22 thisb = this; - v3 = (Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552]; + v3 = &pParty->pPlayers[a2-1];//(Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552]; v73 = 1; if ( pParty->bTurnBasedModeOn == 1 && (pTurnEngine->field_4 == 1 || pTurnEngine->field_4 == 3) ) return; @@ -6987,7 +6987,7 @@ } v69 = 2; LABEL_111: - ((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->Heal(v69); + pParty->pPlayers[a2-1].Heal(v69);//((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->Heal(v69); } LABEL_112: v3->PlaySound(36, 0); @@ -7160,7 +7160,7 @@ v33 = HIDWORD(v3->pConditions[15]); v34 = LODWORD(v3->pConditions[16]); v35 = HIDWORD(v3->pConditions[16]); - memset(&stru_AA1058[3].pSounds[6972 * a2 + 40552], 0, 0xA0u); + memset(&pParty->pPlayers[a2-1],0,0xA0u);//memset(&stru_AA1058[3].pSounds[6972 * a2 + 40552], 0, 0xA0u); HIDWORD(v3->pConditions[14]) = v31; LODWORD(v3->pConditions[15]) = v32; HIDWORD(v3->pConditions[15]) = v33; @@ -7531,7 +7531,7 @@ pMouse->RemoveHoldingItem(); return; } - if ( ((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() ) + if ( pParty->pPlayers[a2-1].CanAct() )//if ( ((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() ) { sub_467F48(pParty->pPickedItem.uItemID); v65 = 0; @@ -7575,7 +7575,7 @@ pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61); return; } - if ( !((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() ) + if ( !pParty->pPlayers[a2-1].CanAct() )//if ( !((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() ) { v66 = aCharacterConditionNames[v3->GetMajorConditionIdx()]; v57 = pGlobalTXT_LocalizationStrings[382]; @@ -7687,7 +7687,7 @@ } if ( pCurrentScreen == 23 ) return; - if ( !((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() ) + if ( !pParty->pPlayers[a2-1].CanAct() )//if ( !((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() ) goto LABEL_89; if ( bUnderwater == 1 ) { diff -r 968e681bcceb -r e753d08b78ec Render.cpp --- a/Render.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/Render.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -7083,7 +7083,7 @@ if (pRenderD3D) { pGame->draw_debug_outlines(); - //DoRenderBillboards_D3D(); Ritor1: it's temporarily + //DoRenderBillboards_D3D(); //Ritor1: it's temporarily pGame->pStru6Instance->RenderSpecialEffects(); pRenderD3D->pDevice->EndScene(); } diff -r 968e681bcceb -r e753d08b78ec Vis.cpp --- a/Vis.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/Vis.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -323,14 +323,14 @@ } v9 = x + 1.0; //UNDEF(v8); - v10 = v9 < v5; - v11 = 0; - v12 = v9 == v5; - BYTE1(result) = HIBYTE(v8);//crash + //v10 = v9 < v5; + //v11 = 0; + //v12 = v9 == v5; + //BYTE1(result) = HIBYTE(v8);//crash if ( v9 >= v5 - && (v14 = x - 1.0, /*UNDEF(v13),*/ v15 = v14 < a1a, v16 = 0, v17 = v14 == a1a, BYTE1(result) = HIBYTE(v13), v15 | v17) - && (v19 = y + 1.0, /*UNDEF(v18),*/ v20 = v19 < v29, v21 = 0, v22 = v19 == v29, BYTE1(result) = HIBYTE(v18), v19 >= v29) - && (v24 = y - 1.0, /*UNDEF(v23),*/ v25 = v24 < v28, v26 = 0, v27 = v24 == v28, BYTE1(result) = HIBYTE(v23), v25 | v27) ) + && (v14 = x - 1.0, v14<=a1a)///*UNDEF(v13),*/ v15 = v14 < a1a, v16 = 0, v17 = v14 == a1a, BYTE1(result) = HIBYTE(v13), v15 | v17) + && (v19 = y + 1.0, v19>=v29)///*UNDEF(v18),*/ v20 = v19 < v29, v21 = 0, v22 = v19 == v29, BYTE1(result) = HIBYTE(v18), v19 >= v29) + && (v24 = y - 1.0, v24<=v28))///*UNDEF(v23),*/ v25 = v24 < v28, v26 = 0, v27 = v24 == v28, BYTE1(result) = HIBYTE(v23), v25 | v27) ) LOBYTE(result) = 1; else LABEL_14: @@ -1345,17 +1345,16 @@ bool result; // eax@1 RenderVertexD3D3 *v5; // edx@2 RenderVertexD3D3 *v6; // esi@2 - RenderVertexD3D3 v7; // qdi@2 + void *v7; // edi@2 unsigned int v8; // ebx@2 - int v9; // ecx@3 - int v10; // ecx@5 - float v11; // eax@8 + float *v9; // ecx@3 + float *v10; // ecx@5 + RenderVertexD3D3 *v11; // eax@8 RenderVertexD3D3 v12; // [sp+4h] [bp-4Ch]@8 - char v13; // [sp+24h] [bp-2Ch]@2 - float v14; // [sp+28h] [bp-28h]@4 + RenderVertexD3D3 v13; // [sp+24h] [bp-2Ch]@2 Vis *thisa; // [sp+44h] [bp-Ch]@1 - RenderVertexD3D3 *v16; // [sp+48h] [bp-8h]@2 - unsigned int v17; // [sp+4Ch] [bp-4h]@2 + RenderVertexD3D3 *v15; // [sp+48h] [bp-8h]@2 + unsigned int v16; // [sp+4Ch] [bp-4h]@2 result = uEnd; thisa = this; @@ -1363,41 +1362,41 @@ { v5 = a2; v6 = &a2[uEnd]; - LODWORD(v7.pos.x) = (int)&v13; - v16 = &a2[uEnd]; + v7 = &v13; + v15 = &a2[uEnd]; v8 = uStart - 1; - v17 = uEnd; + v16 = uEnd; while ( 1 ) { - memcpy(*(void **)&v7.pos.x, v6, 0x20u); - v9 = (int)&v5[v8].pos.y; + memcpy(v7, v6, 0x20u); + v9 = &v5[v8].pos.y; do { - v9 += 32; + v9+=8; ++v8; } - while ( *(float *)v9 < (double)v14 ); - v10 = (int)&v5[v17].pos.y; + while ( *v9 < (double)v13.pos.y ); + v10 = &v5[v16].pos.y; do { - v10 -= 32; - --v17; + v10-=8; + --v16; } - while ( *(float *)v10 > (double)v14 ); - if ( (signed int)v8 >= (signed int)v17 ) + while ( *v10 > (double)v13.pos.y ); + if ( (signed int)v8 >= (signed int)v16 ) break; - LODWORD(v11) = (int)&v5[v17]; + v11 = &v5[v16]; memcpy(&v12, &a2[v8], sizeof(v12)); v5 = a2; - memcpy(&a2[v8], *(void **)&v11, sizeof(a2[v8])); + memcpy(&a2[v8], v11, sizeof(a2[v8])); v6 = &v12; - v7.pos.x = v11; + v7 = v11; } memcpy(&v12, &v5[v8], sizeof(v12)); - memcpy(&v5[v8], v16, sizeof(v5[v8])); - memcpy(v16, &v12, 0x20u); - SortVerticesByY(v5, uStart, v8 - 1); - SortVerticesByY(a2, v8 + 1, uEnd); + memcpy(&v5[v8], v15, sizeof(v5[v8])); + memcpy(v15, &v12, 0x20u); + SortVerticesByX(v5, uStart, v8 - 1); + SortVerticesByX(a2, v8 + 1, uEnd); } return true; } diff -r 968e681bcceb -r e753d08b78ec mm7_1.cpp --- a/mm7_1.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_1.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -206,7 +206,7 @@ v85 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem; v86 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0, 0); v79 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0); - pPlayer = (Player *)&stru_AA1058[3].pSounds[6972 * v1 + 40552]; + pPlayer = &pParty->pPlayers[v1-1];//(Player *)&stru_AA1058[3].pSounds[6972 * v1 + 40552]; v3 = pIcons_LOD->LoadTexture("fr_skill", TEXTURE_16BIT_PALETTE); pRenderer->DrawTextureIndexed(8u, 8u, (Texture *)(v3 != -1 ? (int)&pIcons_LOD->pTextures[v3] : 0)); v4 = v79; @@ -214,7 +214,7 @@ v4 = 65535; sprintf( pTmpBuf, - "%s ", + "%s \f%05d%s\f00000\r177%s: \f%05d%d\f00000", pGlobalTXT_LocalizationStrings[206], // Skills for a5, pPlayer->pName, @@ -409,7 +409,7 @@ pGUIWindow_CurrentMenu->DrawText(pFontArrus, 248, v27, a5, pTmpBuf, 0, 0, 0); v28 = pGUIWindow_CurrentMenu; v72 = 0; - v82 = dword_4E2A18; + v82 = pArmorSkills; do { v29 = 0; @@ -623,8 +623,8 @@ sprintf( Source, pGlobalTXT_LocalizationStrings[429], - &stru_AA1058[3].pSounds[6972 * v1 + 40720], - pClassNames[stru_AA1058[3].pSounds[6972 * v1 + 40737]]); + &pParty->pPlayers[v1-1].pName,//&stru_AA1058[3].pSounds[6972 * v1 + 40720], + &pClassNames[pParty->pPlayers[v1-1].uClass]);//&pClassNames[stru_AA1058[3].pSounds[6972 * v1 + 40737]]); strcat(pTmpBuf, Source); strcat(pTmpBuf, "\xC" "00000"); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, 18, 0, pTmpBuf, 0, 0, 0); @@ -1198,7 +1198,7 @@ if ( dword_507CC0 != uActiveCharacter ) { sub_4196A0(); - sub_419401(); + CharacterUI_SkillScreen_Draw(); } sub_419379(); CharacterUI_SkillsTab_Draw(v1); @@ -4771,7 +4771,7 @@ { v11 = (unsigned __int8)pTmpBuf[v2]; v12 = &pNPCStats->pNPCData[v11 + 499]; - if ( (unsigned __int8)pTmpBuf[v2] < 2u ) + if ( (unsigned __int8)pTmpBuf[v2] < 2 ) v12 = &pParty->pHirelings[v11]; v13 = v12->uProfession; if ( v13 ) diff -r 968e681bcceb -r e753d08b78ec mm7_2.cpp --- a/mm7_2.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_2.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -13005,7 +13005,7 @@ hKey = 0; phkResult = 0; cbData = 4; - if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) ) + if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) )// for 64 bit { if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) { diff -r 968e681bcceb -r e753d08b78ec mm7_3.cpp --- a/mm7_3.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_3.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -5039,7 +5039,7 @@ pAutonoteTXT_Raw = 0; pAutonoteTXT_Raw = (char *)pEvents_LOD->LoadRaw("autonote.txt", 0); strtok(pAutonoteTXT_Raw, "\r"); - v0 = (char *)&stru_723720[0].eType; + v0 = (char *)&pAutonoteTxt[0].eType; for (uint i = 0; i < 195; ++i) { v1 = 0; @@ -13926,9 +13926,7 @@ { //v16 = (uint *)&pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[uZb]]; auto pOutline = &pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[i]]; - pRenderer->Line2D( - uCenterX - + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom + pRenderer->Line2D(uCenterX + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16), uCenterY @@ -13999,9 +13997,7 @@ } v35 = v57; LABEL_66: - pRenderer->DrawTextureTransparent( - uCenterX - 3, - uCenterY - 3, + pRenderer->DrawTextureTransparent(uCenterX - 3, uCenterY - 3, (Texture *)(pTextureIDs_pMapDirs[v35] != -1 ? (int)&pIcons_LOD->pTextures[pTextureIDs_pMapDirs[v35]] : 0)); v36 = 255; flagsb = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0xFFu); @@ -14168,17 +14164,11 @@ while ( uZg < (signed int)uNumLevelDecorations ); v33 = 0; } - pRenderer->DrawTextureTransparent( - 0x1D4u, - v33, - (Texture *)(dword_5079D8 != -1 ? &pIcons_LOD->pTextures[dword_5079D8] : 0)); + pRenderer->DrawTextureTransparent(0x1D4u, v33, (Texture *)(dword_5079D8 != -1 ? &pIcons_LOD->pTextures[dword_5079D8] : 0)); uZooma = (double)pParty->sRotationY * 0.1171875; v50 = uZooma + 6.7553994e15; pRenderer->Clip(0x21Du, v33, 0x237u, 0x1E0u); - pRenderer->DrawTextureIndexed( - LODWORD(v50) + 285, - 0x88u, - (Texture *)(dword_5079B4 != -1 ? &pIcons_LOD->pTextures[dword_5079B4] : 0)); + pRenderer->DrawTextureIndexed(LODWORD(v50) + 285, 0x88u, (Texture *)(dword_5079B4 != -1 ? &pIcons_LOD->pTextures[dword_5079B4] : 0)); pRenderer->ResetClip(); } @@ -18154,14 +18144,14 @@ ptr_507BC0->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); } goto LABEL_291; - default: - goto LABEL_291; case EVENT_PressAnyKey: v121 = 33; v105 = v122 + 1; goto LABEL_295; case EVENT_Exit: goto LABEL_301; + default: + goto LABEL_291; } } //++v4; @@ -18618,7 +18608,7 @@ v8 = (v9 & 0x7E900) + 86400; } } - v10 = __PAIR__(v7, *((int *)v4 - 3)) + (signed __int64)((double)((signed __int64)v8 << 7) * 0.033333335); + v10 = v7 + *((int *)v4 - 3) + (signed __int64)((double)((signed __int64)v8 << 7) * 0.033333335);//v10 = __PAIR__(v7, *((int *)v4 - 3)) + (signed __int64)((double)((signed __int64)v8 << 7) * 0.033333335); *((int *)v4 - 3) = v10; *((int *)v4 - 2) = HIDWORD(v10); if ( HIDWORD(v10) <= v3 && (HIDWORD(v10) < v3 || *((int *)v4 - 3) < v2) ) @@ -18679,7 +18669,7 @@ unsigned int v10; // eax@1 size_t v11; // ebx@2 signed int v12; // esi@2 - char *v13;//Actor_uYawAngle_cr *v13; // ebx@3 + Actor *pActor;//Actor_uYawAngle_cr *v13; // ebx@3 AIDirection a3; // [sp+Ch] [bp-50h]@2 AIDirection v15; // [sp+28h] [bp-34h]@2 //SpawnPointMM7 v16; // [sp+44h] [bp-18h]@1 @@ -18706,16 +18696,13 @@ v12 = v11; if ( (signed int)v11 < (signed int)uNumActors ) { - v13 = (char *)&pActors[v11].uYawAngle; - do - { - ((Actor *)((char *)v13 - 154))->PrepareSprites(0); + for ( pActor = &pActors[v11]; v12 < (signed int)uNumActors; ++pActor ) + { + pActor->PrepareSprites(0); ++v12; - *(short *)v13/*->uYawAngle*/ = LOWORD(v15.uYawAngle); - *(int *)(v13+666)/*->dword_000334_unique_name*/ = uUniqueName; - ++v13; - } - while ( v12 < (signed int)uNumActors ); + pActor->uYawAngle = v15.uYawAngle; + pActor->dword_000334_unique_name = uUniqueName; + } } } } diff -r 968e681bcceb -r e753d08b78ec mm7_4.cpp --- a/mm7_4.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_4.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -2908,7 +2908,7 @@ char *v3; // esi@5 char *v4; // [sp+10h] [bp-4h]@1 - pIcons_LOD->dword_011BA0 = pIcons_LOD->uNumLoadedFiles; + pIcons_LOD->pFacesLock = pIcons_LOD->uNumLoadedFiles; for (uint i = 0; i < 4; ++i) for (uint j = 0; j < 56; ++j) @@ -3017,7 +3017,7 @@ } while ( (signed int)v0 < (signed int)pParty->pHirelings ); v6 = pIcons_LOD->uNumLoadedFiles - 1; - if ( v6 >= pIcons_LOD->dword_011BA0 ) + if ( v6 >= pIcons_LOD->pFacesLock ) { v7 = &pIcons_LOD->pTextures[v6]; do @@ -3046,10 +3046,10 @@ --v6; --v7; } - while ( v6 >= pIcons_LOD->dword_011BA0 ); - } - v12 = pIcons_LOD->dword_011BA0; - pIcons_LOD->dword_011BA0 = 0; + while ( v6 >= pIcons_LOD->pFacesLock ); + } + v12 = pIcons_LOD->pFacesLock; + pIcons_LOD->pFacesLock = 0; pIcons_LOD->uNumLoadedFiles = v12; } // 4ED498: using guessed type char byte_4ED498; @@ -3192,7 +3192,6 @@ if (pPlayer->Eradicated()) { pFace = pTexture_PlayerFaceEradicated; -LABEL_27: pPortrait = pFace; v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]; if ( pParty->pPartyBuffs[11].uExpireTime ) @@ -3208,12 +3207,27 @@ v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0; if ( v13 | v12 | v11 | _v1 | v10 ) sub_441A4E(i); - goto LABEL_50; + continue; } if (pPlayer->Dead()) { pFace = pTexture_PlayerFaceDead; - goto LABEL_27; + pPortrait = pFace; + v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]; + if ( pParty->pPartyBuffs[11].uExpireTime ) + pRenderer->_4A6E7E(v9, 0x183u, pPortrait); + else + pRenderer->DrawTextureTransparent(v9 + 1, 0x184u, pPortrait); + auto _v1 = 0; + v10 = pPlayer->pPlayerBuffs[14].uExpireTime > 0; + if (pPlayer->pPlayerBuffs[1].uExpireTime > 0) + _v1 = 1; + v11 = pPlayer->pPlayerBuffs[8].uExpireTime > 0; + v12 = pPlayer->pPlayerBuffs[7].uExpireTime > 0; + v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0; + if ( v13 | v12 | v11 | _v1 | v10 ) + sub_441A4E(i); + continue; } v7 = 0; for (uint j = 0; j < pPlayerFrameTable->uNumFrames; ++j) @@ -3231,11 +3245,24 @@ if (pPlayer->field_1AA2 != pFrame->uTextureID - 1 || v22 ) { pPlayer->field_1AA2 = pFrame->uTextureID - 1; - pFace = (Texture *)pTextures_PlayerFaces[i][pFrame->uTextureID]; - goto LABEL_27; - } -LABEL_50: - ; + pFace = (Texture *)pTextures_PlayerFaces[i][pPlayer->field_1AA2]; + pPortrait = pFace; + v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]; + if ( pParty->pPartyBuffs[11].uExpireTime ) + pRenderer->_4A6E7E(v9, 0x183u, pPortrait); + else + pRenderer->DrawTextureTransparent(v9 + 1, 0x184u, pPortrait); + auto _v1 = 0; + v10 = pPlayer->pPlayerBuffs[14].uExpireTime > 0; + if (pPlayer->pPlayerBuffs[1].uExpireTime > 0) + _v1 = 1; + v11 = pPlayer->pPlayerBuffs[8].uExpireTime > 0; + v12 = pPlayer->pPlayerBuffs[7].uExpireTime > 0; + v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0; + if ( v13 | v12 | v11 | _v1 | v10 ) + sub_441A4E(i); + continue; + } } if ( pParty->bTurnBasedModeOn == 1 ) { diff -r 968e681bcceb -r e753d08b78ec mm7_5.cpp --- a/mm7_5.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_5.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -546,8 +546,8 @@ else { pKeyActionMap->EnterText(0, 19, pGUIWindow_CurrentMenu); - if ( strcmp((const char *)&pSavegameHeader + 100 * uLoadGameUI_SelectedSlot, pGlobalTXT_LocalizationStrings[72]) )// "Empty" - strcpy((char *)pKeyActionMap->pPressedKeysBuffer, (const char *)&pSavegameHeader + 100 * uLoadGameUI_SelectedSlot); + if ( strcmp((const char *)&pSavegameHeader[uLoadGameUI_SelectedSlot], pGlobalTXT_LocalizationStrings[72]) )// "Empty" + strcpy((char *)pKeyActionMap->pPressedKeysBuffer, (const char *)&pSavegameHeader[uLoadGameUI_SelectedSlot]); pKeyActionMap->uNumKeysPressed = strlen((const char *)pKeyActionMap->pPressedKeysBuffer); } continue; @@ -1208,6 +1208,7 @@ else { if ( pCurrentScreen >= 14 || pCurrentScreen == 4 || pCurrentScreen == 10 ) + { //goto LABEL_229; if ( dword_50CDC8 ) goto LABEL_232; @@ -1215,6 +1216,7 @@ //goto LABEL_231; uMessageParam = v0; goto LABEL_232; + } if ( pCurrentScreen == 13 && !dword_50CDC8 && !dword_5C35C8 ) { CloseWindowBackground(); @@ -3312,7 +3314,7 @@ pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 101; sub_4196A0(); sub_419379(); - sub_419401(); + CharacterUI_SkillScreen_Draw(); pButton = pCharacterScreen_SkillsBtn; //goto LABEL_716; v163 = 0; @@ -5649,9 +5651,9 @@ int v40; // eax@77 int v41; // eax@77 int v42; // eax@78 - char *v43; // eax@81 + Player *v43; // eax@81 Actor *v44; // esi@82 - char *v45; // edi@84 + Player *v45; // edi@84 unsigned __int16 v46; // ax@84 int v47; // ebx@105 int v48; // eax@107 @@ -5898,18 +5900,18 @@ v44 = &pActors[v39]; if ( a4 == -1 ) a4 = stru_50C198.which_player_would_attack(v44); - v45 = (char *)&pParty->pPlayers[a4]; + v45 = &pParty->pPlayers[a4]; v77 = Actor::_43B3E0_CalcDamage(v44, v74); v46 = v37->uItemType; if ( v37->uItemType == 545 ) { - LOBYTE(v51) = ((Player *)v45)->GetActualSkillLevel(PLAYER_SKILL_UNARMED); + LOBYTE(v51) = v45->GetActualSkillLevel(PLAYER_SKILL_UNARMED); v52 = v51; if ( (signed int)SkillToMastery(v51) >= 4 && rand() % 100 < (v52 & 0x3F) ) { - sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[637], v45 + 168); + sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[637], v45->pName); ShowStatusBarString(pTmpBuf, 2u); - ((Player *)v45)->PlaySound(6, 0); + v45->PlaySound(6, 0); return; } } @@ -5927,29 +5929,29 @@ && v46 != 540 ) goto LABEL_115; } - if ( !stru_50C198.ActorHitOrMiss(v44, (Player *)v45) ) + if ( !stru_50C198.ActorHitOrMiss(v44, v45) ) return; - if ( *((_QWORD *)v45 + 782) > 0i64 ) + if ( (signed __int64)v45->pPlayerBuffs[13].uExpireTime > 0 ) v77 >>= 1; - if ( ((Player *)v45)->HasEnchantedItemEquipped(36) ) + if ( v45->HasEnchantedItemEquipped(36) ) v77 >>= 1; - if ( ((Player *)v45)->HasEnchantedItemEquipped(69) ) + if ( v45->HasEnchantedItemEquipped(69) ) v77 >>= 1; - if ( ((Player *)v45)->HasItemEquipped(EQUIP_ARMOUR) - && *(int *)&v45[36 * *((int *)v45 + 1621) + 496] == 504 ) + if ( v45->HasItemEquipped(EQUIP_ARMOUR) + && *(_DWORD *)&v45->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * v45->pEquipment.uBody + 5] == 504 ) v77 >>= 1; v75 = 0; - v47 = (int)(v45 + 6472); + v47 = (int)&v45->pEquipment; do { - if ( ((Player *)v45)->HasItemEquipped((ITEM_EQUIP_TYPE)v75) ) + if ( v45->HasItemEquipped((ITEM_EQUIP_TYPE)v75) ) { v48 = *(int *)&v45[36 * *(int *)v47 + 496]; if ( v48 == 520 ) v77 >>= 1; if ( v48 == 531 ) v77 >>= 1; - if ( ((Player *)v45)->GetEquippedItemEquipType(v75) == 4 && SkillToMastery(*((short *)v45 + 140)) == 4 ) + if ( v45->GetEquippedItemEquipType(v75) == 4 && SkillToMastery(v45->pActiveSkills[8]) == 4 ) v77 >>= 1; } ++v75; @@ -5988,10 +5990,10 @@ LABEL_133: if ( !(dword_6BE368_debug_settings_2 & 0x10) ) { - v54 = ((Player *)v45)->ReceiveDamage(v77, v50); - if ( *((int *)v45 + 1553) >= 0 ) - { - if ( *((int *)v45 + 1553) > 0 || *((int *)v45 + 1552) ) + v54 = v45->ReceiveDamage(v77, v50); + if ( SHIDWORD(v45->pPlayerBuffs[10].uExpireTime) >= 0 ) + { + if ( SHIDWORD(v45->pPlayerBuffs[10].uExpireTime) > 0 || LODWORD(v45->pPlayerBuffs[10].uExpireTime) ) { v55 = v44->uAIState; if ( v55 != 5 ) @@ -6038,7 +6040,7 @@ v64 = 51; if ( rand() % 100 < 20 ) v64 = ((signed int)v44->pMonsterInfo.uHP >= 100) + 1; - ((Player *)v45)->PlaySound(v64, 0); + v45->PlaySound(v64, 0); } } } @@ -6050,14 +6052,14 @@ && !(dword_6BE368_debug_settings_2 & 0x10) && v44->pMonsterInfo.uSpecialAttack && rand() % 100 < v44->pMonsterInfo.uLevel * v44->pMonsterInfo.uSpecialAttackType ) - ((Player *)v45)->_48DCF6(v44->pMonsterInfo.uSpecialAttack, v44); + v45->_48DCF6(v44->pMonsterInfo.uSpecialAttack, v44); if ( !pParty->bTurnBasedModeOn ) { - v65 = ((Player *)v45)->GetActualEndurance(); - v66 = (double)(20 - ((Player *)v45)->_48EA1B_get_static_effect(v65)) + v65 = v45->GetActualEndurance(); + v66 = (double)(20 - v45->_48EA1B_get_static_effect(v65)) * flt_6BE3A4_debug_recmod1 * 2.133333333333333; - ((Player *)v45)->SetRecoveryTime((signed __int64)v66); + v45->SetRecoveryTime((signed __int64)v66); } return; } @@ -6071,12 +6073,12 @@ LABEL_80: if ( a4 != -1 ) { - v43 = (char *)&pParty->pPlayers[a4]; + v43 = &pParty->pPlayers[a4]; LABEL_168: - a4b = (Player *)v43; + a4b = v43; if ( v38 != 4 || v37->field_48 != 100 ) { - v70 = ((Player *)v43)->GetMaxHealth(); + v70 = v43->GetMaxHealth(); v68 = _43AFE3_calc_spell_damage(v37->field_48, v37->field_4C, v37->field_50, v70); v69 = LOBYTE(pSpellStats->pInfos[v37->field_48].uSchool); } @@ -6108,7 +6110,7 @@ while ( a4a <= 4 ); if ( v74 ) { - v43 = &stru_AA1058[3].pSounds[6972 * *(&v72 + rand() % v74) + 40552]; + v43 = &pParty->pPlayers[*(&v72+rand()%v74)-1];//&stru_AA1058[3].pSounds[6972 * *(&v72 + rand() % v74) + 40552]; goto LABEL_168; } } @@ -17376,7 +17378,7 @@ int v137; // [sp+1Ch] [bp-4h]@27 int v138; // [sp+1Ch] [bp-4h]@33 - pPlayer = (Player *)&stru_AA1058[3].pSounds[6972 * uPlayerID + 40552]; + pPlayer = &pParty->pPlayers[uPlayerID-1];//(Player *)&stru_AA1058[3].pSounds[6972 * uPlayerID + 40552]; v2 = pIcons_LOD->LoadTexture("fr_stats", TEXTURE_16BIT_PALETTE); pRenderer->DrawTextureIndexed(8u, 8u, (Texture *)(v2 != -1 ? (int)&pIcons_LOD->pTextures[v2] : 0)); v3 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu); @@ -17395,7 +17397,7 @@ v7 = pPlayer->GetBaseStrength(); v8 = pPlayer->GetActualMight(); v9 = UI_GetHealthManaStringColor(v8, v7); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[144], v9, v6, v5); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[144], v9, v6, v5); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, 53, 0, pTmpBuf, 0, 0, 0); v10 = LOBYTE(pFontArrus->uFontHeight) + 51; v11 = pPlayer->GetBaseIntelligence(); @@ -17403,7 +17405,7 @@ v13 = pPlayer->GetBaseIntelligence(); v14 = pPlayer->GetActualIntelligence(); v15 = UI_GetHealthManaStringColor(v14, v13); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[116], v15, v12, v11); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[116], v15, v12, v11); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf, 0, 0, 0); v16 = LOBYTE(pFontArrus->uFontHeight) + v10 - 2; v17 = pPlayer->GetBaseWillpower(); @@ -17411,7 +17413,7 @@ v19 = pPlayer->GetBaseWillpower(); v20 = pPlayer->GetActualWillpower(); v21 = UI_GetHealthManaStringColor(v20, v19); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[163], v21, v18, v17); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[163], v21, v18, v17); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v16, 0, pTmpBuf, 0, 0, 0); v22 = LOBYTE(pFontArrus->uFontHeight) + v16 - 2; v23 = pPlayer->GetBaseEndurance(); @@ -17419,7 +17421,7 @@ v25 = pPlayer->GetBaseEndurance(); v26 = pPlayer->GetActualEndurance(); v27 = UI_GetHealthManaStringColor(v26, v25); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[75], v27, v24, v23); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[75], v27, v24, v23); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v22, 0, pTmpBuf, 0, 0, 0); v28 = LOBYTE(pFontArrus->uFontHeight) + v22 - 2; v29 = pPlayer->GetBaseAccuracy(); @@ -17427,7 +17429,7 @@ v31 = pPlayer->GetBaseAccuracy(); v32 = pPlayer->GetActualAccuracy(); v33 = UI_GetHealthManaStringColor(v32, v31); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[1], v33, v30, v29); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[1], v33, v30, v29); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v28, 0, pTmpBuf, 0, 0, 0); v34 = LOBYTE(pFontArrus->uFontHeight) + v28 - 2; v35 = pPlayer->GetBaseSpeed(); @@ -17435,7 +17437,7 @@ v37 = pPlayer->GetBaseSpeed(); v38 = pPlayer->GetActualSpeed(); v39 = UI_GetHealthManaStringColor(v38, v37); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[211], v39, v36, v35); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[211], v39, v36, v35); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v34, 0, pTmpBuf, 0, 0, 0); v40 = LOBYTE(pFontArrus->uFontHeight) + v34 - 2; v41 = pPlayer->GetBaseLuck(); @@ -17443,22 +17445,22 @@ v43 = pPlayer->GetBaseLuck(); v44 = pPlayer->GetActualLuck(); v45 = UI_GetHealthManaStringColor(v44, v43); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[136], v45, v42, v41); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n\n", pGlobalTXT_LocalizationStrings[136], v45, v42, v41); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v40, 0, pTmpBuf, 0, 0, 0); - a2 = "%s"; + a2 = "%s\f%05u\r424%d\f00000 /\t185%d\n"; v46 = v40 + 2 * LOBYTE(pFontArrus->uFontHeight) + 5; if ( pPlayer->GetMaxHealth() >= 1000 ) - a2 = (const char *)&unk_4E2EB8; + a2 = "%s\f%05u\r388%d\f00000 / %d\n"; v47 = pPlayer->GetMaxHealth(); v48 = pPlayer->sHealth; v49 = pPlayer->GetMaxHealth(); v50 = UI_GetHealthManaStringColor(pPlayer->sHealth, v49); sprintf(pTmpBuf, a2, pGlobalTXT_LocalizationStrings[108], v50, v48, v47); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v46, 0, pTmpBuf, 0, 0, 0); - a2a = "%s"; + a2a = "%s\f%05u\r424%d\f00000 /\t185%d\n"; uY = LOBYTE(pFontArrus->uFontHeight) + v46 - 2; if ( pPlayer->GetMaxMana() >= 1000 ) - a2a = (const char *)&unk_4E2EB8; + a2a = "%s\f%05u\r388%d\f00000 / %d\n"; v51 = pPlayer->GetMaxMana(); v52 = pPlayer->sMana; v53 = pPlayer->GetMaxMana(); @@ -17471,13 +17473,13 @@ v58 = pPlayer->GetBaseAC(); v59 = pPlayer->GetActualAC(); v60 = UI_GetHealthManaStringColor(v59, v58); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[12], v60, v57, v56); + sprintf(pTmpBuf, "%s\f%05u\r424%d\f00000 /\t185%d\n\n", pGlobalTXT_LocalizationStrings[12], v60, v57, v56); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v55, 0, pTmpBuf, 0, 0, 0); v61 = v55 + 2 * LOBYTE(pFontArrus->uFontHeight) - 2; v62 = pPlayer->GetMajorConditionIdx(); v63 = aCharacterConditionNames[v62]; v64 = GetConditionDrawColor(v62); - sprintf(pTmpBuf, "%s: ", pGlobalTXT_LocalizationStrings[47], v64, v63); + sprintf(pTmpBuf, "%s: \f%05d%s\n", pGlobalTXT_LocalizationStrings[47], v64, v63); pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x1Au, v61, 0, pTmpBuf, 226, 0); v65 = LOBYTE(pFontArrus->uFontHeight) + v61 - 1; v66 = pPlayer->uQuickSpell; @@ -17492,9 +17494,9 @@ v70 = pPlayer->GetBaseAge(); v71 = pPlayer->GetActualAge(); v72 = UI_GetHealthManaStringColor(v71, v70); - sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[5], v72, v69, v68); + sprintf(pTmpBuf, "%s\f%05u\t100%d\f00000 / %d\n", pGlobalTXT_LocalizationStrings[5], v72, v69, v68); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, 50, 0, pTmpBuf, 0, 0, 0); - a2b = "%s"; + a2b = "%s\f%05u\t100%d\f00000 / %d\n"; uYa = LOBYTE(pFontArrus->uFontHeight) + 48; if ( pPlayer->GetBaseLevel() > 99 ) a2b = format_4E2E68; @@ -17513,7 +17515,7 @@ v79 = LODWORD(pPlayer->uExperience); v80 = v78; v81 = pPlayer->GetExperienceDisplayColor(); - sprintf(pTmpBuf, "%s\r180", v80, v81, v79); + sprintf(pTmpBuf, "%s\r180\f%05d%lu\f00000\n\n", v80, v81, v79); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYb, 0, pTmpBuf, 0, 0, 0); v82 = uYb + 2 * LOBYTE(pFontArrus->uFontHeight); v83 = pPlayer->GetActualAttack(0); @@ -17787,7 +17789,7 @@ //----- (00419401) -------------------------------------------------------- -void __cdecl sub_419401() +void __cdecl CharacterUI_SkillScreen_Draw() { unsigned int v0; // ecx@3 GUIButton *pButton; // eax@3 @@ -17803,11 +17805,11 @@ int a2; // [sp+10h] [bp-14h]@1 int v12; // [sp+14h] [bp-10h]@8 int v13; // [sp+14h] [bp-10h]@19 - unsigned int *v14; // [sp+18h] [bp-Ch]@8 - unsigned int *v15; // [sp+18h] [bp-Ch]@14 - unsigned int *v16; // [sp+18h] [bp-Ch]@19 - unsigned int *v17; // [sp+18h] [bp-Ch]@25 - char *v18; // [sp+1Ch] [bp-8h]@8 + int *v14; // [sp+18h] [bp-Ch]@8 + int *v15; // [sp+18h] [bp-Ch]@14 + int *v16; // [sp+18h] [bp-Ch]@19 + int *v17; // [sp+18h] [bp-Ch]@25 + Player *v18; // [sp+1Ch] [bp-8h]@8 int a5; // [sp+20h] [bp-4h]@8 a2 = 0; @@ -17832,13 +17834,13 @@ } v12 = 0; a5 = pGUIWindow_CurrentMenu->uNumControls; - v18 = &stru_AA1058[3].pSounds[6972 * v0 + 40552]; + v18 = &pParty->pPlayers[v0-1]; //&stru_AA1058[3].pSounds[6972 * v0 + 40552]; v2 = pFontLucida; - v14 = (unsigned int *)dword_4E2A2C; + v14 = dword_4E2A2C; v3 = 2 * LOBYTE(pFontLucida->uFontHeight) + 13; do { - if ( v18[2 * *v14 + 264] & 0x3F )//crash + if ( v18->pActiveSkills[*v14] & 0x3F )//crash { v4 = LOBYTE(v2->uFontHeight); v3 = v3 + v4 - 3; @@ -17849,14 +17851,14 @@ } ++v14; } - while ( (signed int)v14 < (signed int)dword_4E2A50 ); + while ( v14 <= &dword_4E2A2C[8] ); if ( !v12 ) v3 = v3 + LOBYTE(v2->uFontHeight) - 3; - v15 = (unsigned int *)_4E2A80_skills; + v15 = _4E2A80_skills; v5 = v3 + 2 * LOBYTE(v2->uFontHeight) - 6; do { - if ( v18[2 * *v15 + 264] & 0x3F && a2 < 15 ) + if ( v18->pActiveSkills[*v15] & 0x3F && a2 < 15 ) { v6 = LOBYTE(v2->uFontHeight); v5 = v5 + v6 - 3; @@ -17866,13 +17868,13 @@ } ++v15; } - while ( (signed int)v15 < (signed int)pAwardsTextColors ); + while ( v15 <= &_4E2A80_skills[8] ); v13 = 0; - v16 = (unsigned int *)dword_4E2A18; + v16 = pArmorSkills; v7 = 2 * LOBYTE(v2->uFontHeight) + 13; do { - if ( v18[2 * *v16 + 264] & 0x3F ) + if ( v18->pActiveSkills[*v16] & 0x3F ) { v8 = LOBYTE(v2->uFontHeight); v7 = v7 + v8 - 3; @@ -17883,14 +17885,14 @@ } ++v16; } - while ( (signed int)v16 < (signed int)dword_4E2A2C ); + while ( v16 <= &pArmorSkills[4] ); if ( !v13 ) v7 = v7 + LOBYTE(v2->uFontHeight) - 3; - v17 = (unsigned int *)dword_4E2A50; + v17 = dword_4E2A50; v9 = v7 + 2 * LOBYTE(v2->uFontHeight) - 6; do { - if ( v18[2 * *v17 + 264] & 0x3F ) + if ( v18->pActiveSkills[*v17] & 0x3F ) { v10 = LOBYTE(v2->uFontHeight); v9 = v9 + v10 - 3; @@ -17900,7 +17902,7 @@ } ++v17; } - while ( (signed int)v17 < (signed int)_4E2A80_skills ); + while ( v17 <= &dword_4E2A50[11] ); if ( a2 ) pGUIWindow_CurrentMenu->_41D08F(a2, 1, 0, a5); } \ No newline at end of file diff -r 968e681bcceb -r e753d08b78ec mm7_6.cpp --- a/mm7_6.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_6.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -7856,8 +7856,8 @@ v0 = uActiveCharacter; v27 = 6972 * uActiveCharacter; - v1 = (Player *)&stru_AA1058[3].pSounds[6972 * uActiveCharacter + 40552]; - result = ((Player *)&stru_AA1058[3].pSounds[6972 * uActiveCharacter + 40552])->CanAct(); + v1 = &pParty->pPlayers[uActiveCharacter-1];//(Player *)&stru_AA1058[3].pSounds[6972 * uActiveCharacter + 40552]; + result = pParty->pPlayers[uActiveCharacter-1].CanAct();//((Player *)&stru_AA1058[3].pSounds[6972 * uActiveCharacter + 40552])->CanAct(); if ( result ) { pStru277->_427D48(v0); diff -r 968e681bcceb -r e753d08b78ec mm7_data.cpp --- a/mm7_data.cpp Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_data.cpp Mon Jan 21 09:19:28 2013 +0600 @@ -67,7 +67,7 @@ stru287 stru_5E4C50; #include "Autonotes.h" -Autonote stru_723720[195]; // weak +Autonote pAutonoteTxt[195]; // weak #include "Awards.h" Award pAwards[104]; @@ -478,10 +478,10 @@ __int16 RightClickPortraitXmin[4]; __int16 RightClickPortraitXmax[4]; void *off_4E2A12; // weak -int dword_4E2A18[5]; -int dword_4E2A2C[9]; -int dword_4E2A50[12]; -int _4E2A80_skills[9]; +int pArmorSkills[5]={ 9, 10, 11, 8, 30}; +int dword_4E2A2C[9]={3, 5, 2, 6, 4, 0, 1, 31, 7}; +int dword_4E2A50[12]={35, 33, 24, 21, 32, 36, 29, 25, 22, 26, 23, 34}; +int _4E2A80_skills[9]={12, 13, 14, 15, 16, 17, 18, 19, 20}; unsigned __int8 pAwardsTextColors[20]; unsigned int pHealthBarPos[4] = {22, 137, 251, 366}; unsigned int pManaBarPos[4] = {102, 217, 331, 447}; @@ -543,7 +543,6 @@ char aS_6[2]; // idb char aSS_0[777]; // idb char aS_5[4]; // idb -_UNKNOWN unk_4E2EB8; // weak char string_4E3294[8]; char Format[777]; // idb char aMem03i_txt[777]; // idb diff -r 968e681bcceb -r e753d08b78ec mm7_data.h --- a/mm7_data.h Mon Jan 21 09:19:13 2013 +0600 +++ b/mm7_data.h Mon Jan 21 09:19:28 2013 +0600 @@ -464,7 +464,7 @@ extern __int16 RightClickPortraitXmin[4]; extern __int16 RightClickPortraitXmax[4]; extern void *off_4E2A12; // weak -extern int dword_4E2A18[5]; +extern int pArmorSkills[5]; extern int dword_4E2A2C[9]; extern int dword_4E2A50[12]; extern int _4E2A80_skills[9]; @@ -529,7 +529,6 @@ extern char aS_6[2]; // idb extern char aSS_0[]; // idb extern char aS_5[4]; // idb -extern _UNKNOWN unk_4E2EB8; // weak extern char string_4E3294[8]; extern char Format[]; // idb extern char aMem03i_txt[]; // idb @@ -1860,7 +1859,7 @@ int __cdecl sub_419100(); void __cdecl sub_419220(); void __cdecl sub_419379(); -void __cdecl sub_419401(); +void __cdecl CharacterUI_SkillScreen_Draw(); void __cdecl sub_4196A0(); char __fastcall CharacterUI_SkillsTab_Draw(unsigned int uPlayerID); // idb unsigned int __fastcall CharacterUI_AwardsTab_Draw(unsigned int uPlayerID); // idb