# HG changeset patch # User Ritor1 # Date 1355826835 -21600 # Node ID b1f67710227f6f048767091f71984661b9918c1a # Parent 15ba5f459761f208e34ab77b2449f6b9284b6711 LoadSound(work) diff -r 15ba5f459761 -r b1f67710227f Arcomage.cpp --- a/Arcomage.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/Arcomage.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -5757,7 +5757,7 @@ v4 = 120; do { - *v3 = pSoundList->_4A9A67(v4++, 0); + *v3 = pSoundList->LoadSound(v4++, 0); ++v3; } while ( (signed int)v3 <= (signed int)&unk_4FAA20 ); diff -r 15ba5f459761 -r b1f67710227f AudioPlayer.cpp --- a/AudioPlayer.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/AudioPlayer.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -120,7 +120,7 @@ } //----- (004A9A67) -------------------------------------------------------- -__int16 SoundList::_4A9A67(int a1, unsigned int a3) +__int16 SoundList::LoadSound(int a1, unsigned int a3) { AILSOUNDINFO v24; // [sp+84h] [bp-28h]@23 @@ -610,9 +610,9 @@ // 4D8300: using guessed type int __stdcall AIL_end_3D_sample(int); //----- (004AA306) -------------------------------------------------------- -void AudioPlayer::PlaySound(SoundID eSoundID, signed int a3, unsigned int uNumRepeats, signed int a5, signed int a6, int a7, unsigned int uVolume, int sPlaybackRate) +void AudioPlayer::PlaySound(SoundID eSoundID, signed int a3, unsigned int uNumRepeats, signed int PartyX, signed int PartyY, int a7, unsigned int uVolume, int sPlaybackRate) { - AudioPlayer *v9; // esi@1 + AudioPlayer *pAudioPlayer1; // esi@1 signed int v10; // edx@5 int *pSoundID; // ecx@6 int v12; // edi@13 @@ -620,85 +620,85 @@ signed int v14; // eax@20 int v15; // eax@24 signed int v16; // eax@25 - LayingItem *v17; // eax@28 + LayingItem *pLayingItem; // eax@28 signed int v18; // eax@29 - Actor *v19; // eax@32 + Actor *pActor1; // eax@32 signed int v20; // ecx@32 double v21; // st7@32 signed int v22; // ecx@33 - AudioPlayer_3DSample *v23; // esi@53 - AudioPlayer_3DSample *v24; // esi@61 + AudioPlayer_3DSample *pAudioPlayer_3DSample; // esi@53 + AudioPlayer_3DSample *pAudioPlayer_3DSample1; // esi@61 int v25; // esi@67 double v26; // st7@68 int v27; // ST18_4@68 int v28; // ebx@68 int v29; // eax@68 - AudioPlayer_3DSample *v30; // esi@69 + AudioPlayer_3DSample *pAudioPlayer_3DSample2; // esi@69 int v31; // ST18_4@70 int v32; // ebx@70 int v33; // eax@70 int v34; // eax@70 char v35; // zf@70 signed int v36; // ebx@74 - AudioPlayer *v37; // edi@79 - AudioPlayer_3DSample *v38; // esi@79 + AudioPlayer *pAudioPlayer2; // edi@79 + AudioPlayer_3DSample *pAudioPlayer_3DSample3; // esi@79 unsigned int v39; // ebx@80 int v40; // eax@81 char *v41; // edi@82 int v42; // esi@82 double v43; // st7@91 - LayingItem *v44; // eax@92 - Actor *v45; // eax@93 + LayingItem *pLayingItem2; // eax@92 + Actor *pActor; // eax@93 signed int v46; // ecx@93 double v47; // st7@93 - BLVDoor *v48; // eax@97 + BLVDoor *pBLVDoor; // eax@97 double v49; // st7@104 int v50; // ST18_4@104 int v51; // ebx@104 int v52; // eax@104 float v53; // ST0C_4@106 float v54; // ST04_4@106 - AudioPlayer *v55; // edx@106 - SoundDesc *v56; // edx@107 - LayingItem *v57; // eax@114 + AudioPlayer *pAudioPlayer3; // edx@106 + SoundDesc *pSoundDesc; // edx@107 + LayingItem *pLayingItem3; // eax@114 int v58; // edx@115 int v59; // ecx@115 - Actor *v60; // eax@118 - MixerChannel *v61; // esi@126 + Actor *pActor2; // eax@118 + MixerChannel *pMixerChannel; // esi@126 signed int v62; // esi@133 - AudioPlayer *v63; // ebx@133 - MixerChannel *v64; // edi@134 + AudioPlayer *pAudioPlayer4; // ebx@133 + MixerChannel *pMixerChannel2; // edi@134 int v65; // ebx@141 - AudioPlayer *v66; // ecx@142 - MixerChannel *v67; // edi@142 + AudioPlayer *pAudioPlayer5; // ecx@142 + MixerChannel *pMixerChannel3; // edi@142 int v68; // eax@143 - MixerChannel *v69; // edi@149 + MixerChannel *pMixerChannel4; // edi@149 int v70; // ecx@152 - SoundDesc *v71; // eax@153 + SoundDesc *pSoundDesc2; // eax@153 int v72; // edi@156 - MixerChannel *v73; // esi@157 - unsigned int v74; // eax@157 - int v75; // ebx@159 + MixerChannel *pMixerChannel5; // esi@157 + unsigned int pVolume; // eax@157 + int pPartyX; // ebx@159 int v76; // ebx@160 - LayingItem *v77; // edi@164 - unsigned int v78; // edx@166 - unsigned int v79; // ecx@166 + LayingItem *pLayingItem4; // edi@164 + unsigned int pPosY; // edx@166 + unsigned int pPosX; // ecx@166 int v80; // eax@167 - Actor *v81; // edi@168 - BLVDoor *v82; // edi@173 + Actor *pActor3; // edi@168 + BLVDoor *pBLVDoor2; // edi@173 int v83; // eax@183 int v84; // eax@183 _SAMPLE *v85; // ST18_4@186 unsigned int v86; // [sp+14h] [bp-60h]@84 int v87; // [sp+14h] [bp-60h]@115 - RenderVertexSoft a1; // [sp+24h] [bp-50h]@1 + RenderVertexSoft RenderVertexSoft; // [sp+24h] [bp-50h]@1 unsigned int v89; // [sp+54h] [bp-20h]@12 int v90; // [sp+58h] [bp-1Ch]@68 float v91; // [sp+5Ch] [bp-18h]@68 unsigned int v92; // [sp+60h] [bp-14h]@10 float v93; // [sp+64h] [bp-10h]@1 signed int varC; // [sp+68h] [bp-Ch]@68 - AudioPlayer *v94; // [sp+6Ch] [bp-8h]@1 + AudioPlayer *pAudioPlayer; // [sp+6Ch] [bp-8h]@1 int v96; // [sp+70h] [bp-4h]@19 signed int uNumRepeatsb; // [sp+84h] [bp+10h]@93 float uNumRepeatsa; // [sp+84h] [bp+10h]@104 @@ -708,10 +708,10 @@ int v102; // [sp+90h] [bp+1Ch]@60 int v103; // [sp+90h] [bp+1Ch]@68 - v9 = this; + pAudioPlayer1 = this; v35 = this->bPlayerReady == 0; - v94 = this; - a1.flt_2C = 0.0; + pAudioPlayer = this; + RenderVertexSoft.flt_2C = 0.0; LODWORD(v93) = 10000; if ( v35 || !uSoundVolumeMultiplier || !this->hDigDriver || !eSoundID ) return; @@ -735,9 +735,9 @@ v92 = v10; if ( !v10 ) return; - if ( !v9->b3DSoundInitialized || (v89 = 120 * v10, !(pSoundList->pSounds[v10].uFlags & 2)) ) + if ( !pAudioPlayer1->b3DSoundInitialized || (v89 = 120 * v10, !(pSoundList->pSounds[v10].uFlags & 2)) ) { - v56 = (SoundDesc *)7; + //pSoundDesc = (SoundDesc *)7; if ( a3 < 0 ) { if ( a3 == -1 ) @@ -754,84 +754,83 @@ if ( a3 != -1 ) { LODWORD(v91) = 0; - if ( v94->uMixerChannels > 0 ) + if ( pAudioPlayer->uMixerChannels > 0 ) { - v61 = v94->pMixerChannels; + pMixerChannel = pAudioPlayer->pMixerChannels; do { - if ( AIL_sample_status(v61->hSample) == 4 - && v61->dword_000004 == a3 - && AIL_sample_status(v61->hSample) == 4 ) + if ( AIL_sample_status(pMixerChannel->hSample) == 4 && pMixerChannel->dword_000004 == a3 + && AIL_sample_status(pMixerChannel->hSample) == 4 ) { - if ( v61->uSourceTrackIdx == v92 ) + if ( pMixerChannel->uSourceTrackIdx == v92 ) return; - AIL_end_sample(v61->hSample); - _4ABE55(v61); + AIL_end_sample(pMixerChannel->hSample); + _4ABE55(pMixerChannel); } ++LODWORD(v91); - ++v61; + ++pMixerChannel; } - while ( SLODWORD(v91) < v94->uMixerChannels ); + while ( SLODWORD(v91) < pAudioPlayer->uMixerChannels ); } } } LABEL_133: v62 = varC; - v63 = v94; + pAudioPlayer4 = pAudioPlayer; if ( varC <= v96 ) { - v64 = &v94->pMixerChannels[varC]; - while ( AIL_sample_status(v64->hSample) != 2 ) + pMixerChannel2 = &pAudioPlayer->pMixerChannels[varC]; + while ( AIL_sample_status(pMixerChannel2->hSample) != 2 ) { ++v62; - ++v64; + ++pMixerChannel2; if ( v62 > v96 ) goto LABEL_140; } - AIL_end_sample(v64->hSample); - if ( v64->uSourceTrackIdx ) - _4ABE55(v64); + AIL_end_sample(pMixerChannel2->hSample); + if ( pMixerChannel2->uSourceTrackIdx ) + _4ABE55(pMixerChannel2); } LABEL_140: if ( v62 != v96 + 1 ) { LABEL_150: if ( LODWORD(v93) == 10000 ) - LODWORD(v93) = v63->uMasterVolume; + LODWORD(v93) = pAudioPlayer4->uMasterVolume; v70 = 0; if ( !a7 ) { - v56 = pSoundList->pSounds; - v71 = &pSoundList->pSounds[v92]; - if ( !v71->pSoundData[0] ) + //pSoundDesc = pSoundList->pSounds; + pSoundDesc2 = &pSoundList->pSounds[v92]; + if ( !pSoundDesc2->pSoundData[0] ) { - if (v71->eType == SOUND_DESC_SWAP) - pSoundList->_4A9A67(eSoundID, 0); + if (pSoundDesc2->eType == SOUND_DESC_SWAP) + pSoundList->LoadSound(eSoundID, 0); } } v72 = 4 * (a7 + 30 * v92) + 44; if ( !*(int *)&pSoundList->pSounds->pSoundName[v72] ) return; - v73 = &v63->pMixerChannels[v62]; - AIL_init_sample(v73->hSample); - AIL_set_sample_file(v73->hSample, (void *)(*(int *)&pSoundList->pSounds->pSoundName[v72] + 4 * (a7 == 0)), -1); - v74 = uVolume; + pMixerChannel5 = &pAudioPlayer4->pMixerChannels[v62]; + AIL_init_sample(pMixerChannel5->hSample); + AIL_set_sample_file(pMixerChannel5->hSample, (void *)(*(int *)&pSoundList->pSounds->pSoundName[v72] + 4 * (a7 == 0)), -1); + pVolume = uVolume; if ( !uVolume ) - v74 = LODWORD(v93); - AIL_set_sample_volume(v73->hSample, v74); - v75 = a5; - if ( a5 != -1 ) + pVolume = LODWORD(v93); + AIL_set_sample_volume(pMixerChannel5->hSample, pVolume); + pPartyX = PartyX; + if ( PartyX != -1 ) { - if ( !a5 ) - v75 = pParty->vPosition.x; - if ( !a6 ) - a6 = pParty->vPosition.y; + if ( !PartyX ) + pPartyX = pParty->vPosition.x; + if ( !PartyY ) + PartyY = pParty->vPosition.y; if ( uNumRepeats ) - AIL_set_sample_loop_count(v73->hSample, uNumRepeats - 1); - v83 = sub_4AB66C(v75, a6); - AIL_set_sample_pan(v73->hSample, v83); - v84 = GetSoundStrengthByDistanceFromParty(v75, a6, pParty->vPosition.z); - AIL_set_sample_volume(v73->hSample, v84); + AIL_set_sample_loop_count(pMixerChannel5->hSample, uNumRepeats - 1); + v83 = sub_4AB66C(pPartyX, PartyY); + AIL_set_sample_pan(pMixerChannel5->hSample, v83); + v84 = GetSoundStrengthByDistanceFromParty(pPartyX, PartyY, pParty->vPosition.z); + AIL_set_sample_volume(pMixerChannel5->hSample, v84); v76 = a3; goto LABEL_184; } @@ -840,62 +839,68 @@ { if ( uCurrentlyLoadedLevelType != LEVEL_Indoor ) goto LABEL_184; - v82 = &pIndoor->pDoors[a3 >> 3]; - if ( !v82->uDoorID ) + pBLVDoor2 = &pIndoor->pDoors[a3 >> 3]; + if ( !pBLVDoor2->uDoorID ) return; - if ( !GetSoundStrengthByDistanceFromParty(*v82->pXOffsets, *v82->pYOffsets, *v82->pZOffsets) ) + if ( !GetSoundStrengthByDistanceFromParty(*pBLVDoor2->pXOffsets, *pBLVDoor2->pYOffsets, *pBLVDoor2->pZOffsets) ) { - AIL_end_sample(v73->hSample); - v94->AudioPlayer::_4ABE55(v73); + AIL_end_sample(pMixerChannel5->hSample); + pAudioPlayer->AudioPlayer::_4ABE55(pMixerChannel5); return; } - v78 = *v82->pYOffsets; - v79 = *v82->pXOffsets; - goto LABEL_167; + pPosY = *pBLVDoor2->pYOffsets; + pPosX = *pBLVDoor2->pXOffsets; + //goto LABEL_167; + v80 = sub_4AB66C(pPosX, pPosY); + AIL_set_sample_pan(pMixerChannel5->hSample, v80); + goto LABEL_184; } if ( (a3 & 7) == 2 ) { - v77 = &pLayingItems[a3 >> 3]; - if ( !GetSoundStrengthByDistanceFromParty(v77->vPosition.x, v77->vPosition.y, v77->vPosition.z) ) + pLayingItem4 = &pLayingItems[a3 >> 3]; + if ( !GetSoundStrengthByDistanceFromParty(pLayingItem4->vPosition.x, pLayingItem4->vPosition.y, pLayingItem4->vPosition.z) ) return; } else { if ( (a3 & 7) == 3 ) { - v81 = &pActors[a3 >> 3]; - if ( !GetSoundStrengthByDistanceFromParty(v81->vPosition.x, v81->vPosition.y, v81->vPosition.z) ) + pActor3 = &pActors[a3 >> 3]; + if ( !GetSoundStrengthByDistanceFromParty(pActor3->vPosition.x, pActor3->vPosition.y, pActor3->vPosition.z) ) return; - v78 = v81->vPosition.y; - v79 = v81->vPosition.x; - goto LABEL_167; + pPosY = pActor3->vPosition.y; + pPosX = pActor3->vPosition.x; + //goto LABEL_167; + v80 = sub_4AB66C(pPosX, pPosY); + AIL_set_sample_pan(pMixerChannel5->hSample, v80); + goto LABEL_184; } if ( (a3 & 7) != 5 ) { LABEL_184: if ( uNumRepeats ) - AIL_set_sample_loop_count(v73->hSample, uNumRepeats - 1); - v85 = v73->hSample; - v73->uSourceTrackIdx = v92; - v73->dword_000004 = v76; - v73->uSourceTrackID = eSoundID; + AIL_set_sample_loop_count(pMixerChannel5->hSample, uNumRepeats - 1); + v85 = pMixerChannel5->hSample; + pMixerChannel5->uSourceTrackIdx = v92; + pMixerChannel5->dword_000004 = v76; + pMixerChannel5->uSourceTrackID = eSoundID; AIL_start_sample(v85); if ( sPlaybackRate ) - AIL_set_sample_playback_rate(v73->hSample, sPlaybackRate); + AIL_set_sample_playback_rate(pMixerChannel5->hSample, sPlaybackRate); if ( (v76 & 7) == 4 ) - AIL_sample_ms_position(v73->hSample, &sLastTrackLengthMS, 0); + AIL_sample_ms_position(pMixerChannel5->hSample, &sLastTrackLengthMS, 0); return; } - v77 = (LayingItem *)&pLevelDecorations[a3 >> 3]; - if ( !GetSoundStrengthByDistanceFromParty(v77->vPosition.x, v77->vPosition.y, v77->vPosition.z) ) + pLayingItem4 = (LayingItem *)&pLevelDecorations[a3 >> 3]; + if ( !GetSoundStrengthByDistanceFromParty(pLayingItem4->vPosition.x, pLayingItem4->vPosition.y, pLayingItem4->vPosition.z) ) return; - AIL_set_sample_loop_count(v73->hSample, uNumRepeats - 1); + AIL_set_sample_loop_count(pMixerChannel5->hSample, uNumRepeats - 1); } - v78 = v77->vPosition.y; - v79 = v77->vPosition.x; -LABEL_167: - v80 = sub_4AB66C(v79, v78); - AIL_set_sample_pan(v73->hSample, v80); + pPosY = pLayingItem4->vPosition.y; + pPosX = pLayingItem4->vPosition.x; +//LABEL_167: + v80 = sub_4AB66C(pPosX, pPosY); + AIL_set_sample_pan(pMixerChannel5->hSample, v80); goto LABEL_184; } v65 = varC; @@ -903,27 +908,27 @@ v91 = v93; if ( varC <= v96 ) { - v66 = v94; - v67 = &v94->pMixerChannels[varC]; + pAudioPlayer5 = pAudioPlayer; + pMixerChannel3 = &pAudioPlayer->pMixerChannels[varC]; do { - v68 = AIL_sample_volume(v67->hSample); + v68 = AIL_sample_volume(pMixerChannel3->hSample); if ( v68 < SLODWORD(v91) ) { LODWORD(v91) = v68; v62 = v65; } ++v65; - ++v67; + ++pMixerChannel3; } while ( v65 <= v96 ); if ( v62 != -1 ) { -LABEL_149: - v63 = v94; - v69 = &v94->pMixerChannels[v62]; - AIL_end_sample(v69->hSample); - _4ABE55(v69); +//LABEL_149: + pAudioPlayer4 = pAudioPlayer; + pMixerChannel4 = &pAudioPlayer->pMixerChannels[v62]; + AIL_end_sample(pMixerChannel4->hSample); + _4ABE55(pMixerChannel4); goto LABEL_150; } v65 = varC; @@ -931,26 +936,31 @@ v62 = 13; if ( v65 != 13 ) return; - goto LABEL_149; + //goto LABEL_149; + pAudioPlayer4 = pAudioPlayer; + pMixerChannel4 = &pAudioPlayer->pMixerChannels[v62]; + AIL_end_sample(pMixerChannel4->hSample); + _4ABE55(pMixerChannel4); + goto LABEL_150; } if ( (a3 & 7) == 2 ) { varC = 5; v96 = 7; - v57 = &pLayingItems[a3 >> 3]; + pLayingItem3 = &pLayingItems[a3 >> 3]; } else { if ( (a3 & 7) == 3 ) { *(float *)&varC = 0.0; - v60 = &pActors[a3 >> 3]; + pActor2 = &pActors[a3 >> 3]; v96 = 3; - v58 = v60->vPosition.y; - v87 = v60->vPosition.z; - v59 = v60->vPosition.x; + v58 = pActor2->vPosition.y; + v87 = pActor2->vPosition.z; + v59 = pActor2->vPosition.x; LABEL_116: - LODWORD(v93) = GetSoundStrengthByDistanceFromParty(v59, (int)v56, v87); + LODWORD(v93) = GetSoundStrengthByDistanceFromParty(v59, /*(int)pSoundDesc*/ v58, v87); if ( v93 == 0.0 ) return; goto LABEL_123; @@ -971,32 +981,41 @@ } varC = 4; v96 = 4; - v57 = (LayingItem *)&pLevelDecorations[a3 >> 3]; + pLayingItem3 = (LayingItem *)&pLevelDecorations[a3 >> 3]; } - v87 = v57->vPosition.z; - v58 = v57->vPosition.y; - v59 = v57->vPosition.x; + v87 = pLayingItem3->vPosition.z; + v58 = pLayingItem3->vPosition.y; + v59 = pLayingItem3->vPosition.x; goto LABEL_116; } v12 = 13; if ( a3 < 0 ) { - v15 = v9->uNum3DSamples; + v15 = pAudioPlayer1->uNum3DSamples; if ( a3 == -1 ) { if ( v15 < 16 ) v12 = v15 - 1; v96 = v12; - goto LABEL_46; + //goto LABEL_46; + RenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pParty->vPosition.y; + v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; + goto LABEL_47; } if ( v15 >= 16 ) v15 = 14; v12 = v15; - goto LABEL_45; + //goto LABEL_45; + v96 = v15; + RenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pParty->vPosition.y; + v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; + goto LABEL_47; } if ( (a3 & 7) == 2 ) { - v22 = v9->uNum3DSamples; + v22 = pAudioPlayer1->uNum3DSamples; if ( v22 < 16 ) { v12 = 5 * v22 / 16; @@ -1007,36 +1026,40 @@ v96 = 7; v12 = 5; } - v17 = &pLayingItems[a3 >> 3]; + pLayingItem = &pLayingItems[a3 >> 3]; } else { if ( (a3 & 7) == 3 ) { - v18 = v9->uNum3DSamples; + v18 = pAudioPlayer1->uNum3DSamples; v12 = 0; if ( v18 < 16 ) v96 = 3 * v18 / 16; else v96 = 3; - v19 = &pActors[a3 >> 3]; - v20 = v19->vPosition.y; - a1.vWorldPosition.x = (double)v19->vPosition.x; - v100 = v19->vPosition.z; - a1.vWorldPosition.y = (double)v20; + pActor1 = &pActors[a3 >> 3]; + v20 = pActor1->vPosition.y; + RenderVertexSoft.vWorldPosition.x = (double)pActor1->vPosition.x; + v100 = pActor1->vPosition.z; + RenderVertexSoft.vWorldPosition.y = (double)v20; v21 = (double)v100; goto LABEL_47; } if ( (a3 & 7) != 5 ) { - v13 = v9->uNum3DSamples; + v13 = pAudioPlayer1->uNum3DSamples; if ( (a3 & 7) == 6 ) { if ( v13 >= 16 ) { v96 = 9; v12 = 8; - goto LABEL_46; + //goto LABEL_46; + RenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pParty->vPosition.y; + v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; + goto LABEL_47; } v12 = 8 * v13 / 16; v14 = 9 * v13; @@ -1047,9 +1070,9 @@ { v96 = 12; v12 = 10; -LABEL_46: - a1.vWorldPosition.x = (double)pParty->vPosition.x; - a1.vWorldPosition.y = (double)pParty->vPosition.y; +//LABEL_46: + RenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pParty->vPosition.y; v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; goto LABEL_47; } @@ -1057,11 +1080,15 @@ v14 = 12 * v13; } v15 = v14 / 16; -LABEL_45: +//LABEL_45: v96 = v15; - goto LABEL_46; + //goto LABEL_46; + RenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pParty->vPosition.y; + v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; + goto LABEL_47; } - v16 = v9->uNum3DSamples; + v16 = pAudioPlayer1->uNum3DSamples; if ( v16 < 16 ) { v12 = v16 / 4; @@ -1072,55 +1099,56 @@ v12 = 4; v96 = 4; } - v17 = (LayingItem *)&pLevelDecorations[a3 >> 3]; + pLayingItem = (LayingItem *)&pLevelDecorations[a3 >> 3]; } - a1.vWorldPosition.x = (double)v17->vPosition.x; - a1.vWorldPosition.y = (double)v17->vPosition.y; - v21 = (double)v17->vPosition.z; + RenderVertexSoft.vWorldPosition.x = (double)pLayingItem->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pLayingItem->vPosition.y; + v21 = (double)pLayingItem->vPosition.z; LABEL_47: - a1.vWorldPosition.z = v21; + RenderVertexSoft.vWorldPosition.z = v21; if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) - sub_4AAEA6_transform(&a1); + sub_4AAEA6_transform(&RenderVertexSoft); else - pGame->pIndoorCameraD3D->ViewTransform(&a1, 1u); + pGame->pIndoorCameraD3D->ViewTransform(&RenderVertexSoft, 1); if ( a3 ) { if ( a3 != -1 ) { v101 = 0; - if ( v9->uNum3DSamples > 0 ) + if ( pAudioPlayer1->uNum3DSamples > 0 ) { - v23 = v94->p3DSamples; + pAudioPlayer_3DSample = pAudioPlayer->p3DSamples; do { - if ( AIL_3D_sample_status(v23->hSample) == 4 && v23->field_4 == a3 && AIL_3D_sample_status(v23->hSample) == 4 ) + if ( AIL_3D_sample_status(pAudioPlayer_3DSample->hSample) == 4 + && pAudioPlayer_3DSample->field_4 == a3 && AIL_3D_sample_status(pAudioPlayer_3DSample->hSample) == 4 ) { - if ( v23->field_8 == v92 ) + if ( pAudioPlayer_3DSample->field_8 == v92 ) return; - AIL_end_3D_sample(v23->hSample); - v94->_4ABF23(v23); + AIL_end_3D_sample(pAudioPlayer_3DSample->hSample); + pAudioPlayer->_4ABF23(pAudioPlayer_3DSample); } ++v101; - ++v23; + ++pAudioPlayer_3DSample; } - while ( v101 < v94->uNum3DSamples ); + while ( v101 < pAudioPlayer->uNum3DSamples ); } } } v102 = v12; if ( v12 <= v96 ) { - v24 = &v94->p3DSamples[v12]; - while ( AIL_3D_sample_status(v24->hSample) != 2 ) + pAudioPlayer_3DSample1 = &pAudioPlayer->p3DSamples[v12]; + while ( AIL_3D_sample_status(pAudioPlayer_3DSample1->hSample) != 2 ) { ++v102; - ++v24; + ++pAudioPlayer_3DSample1; if ( v102 > v96 ) goto LABEL_67; } - AIL_end_3D_sample(v24->hSample); - if ( v24->field_8 ) - v94->_4ABF23(v24); + AIL_end_3D_sample(pAudioPlayer_3DSample1->hSample); + if ( pAudioPlayer_3DSample1->field_8 ) + pAudioPlayer->_4ABF23(pAudioPlayer_3DSample1); } LABEL_67: v25 = v96; @@ -1128,9 +1156,9 @@ { LODWORD(v91) = -1; v103 = 0; - *(float *)&varC = a1.vWorldViewPosition.y * -0.012207031; + *(float *)&varC = RenderVertexSoft.vWorldViewPosition.y * -0.012207031; v93 = 0.0; - v26 = a1.vWorldViewPosition.x * 0.012207031; + v26 = RenderVertexSoft.vWorldViewPosition.x * 0.012207031; *(float *)&uVolume = v26; v27 = abs((signed __int64)v26); v28 = abs((signed __int64)v93); @@ -1139,10 +1167,10 @@ sPlaybackRate = v12; if ( v12 > v25 ) goto LABEL_192; - v30 = &v94->p3DSamples[v12]; + pAudioPlayer_3DSample2 = &pAudioPlayer->p3DSamples[v12]; do { - AIL_3D_position(v30->hSample, &varC, &v93, (long *)&uVolume); + AIL_3D_position(pAudioPlayer_3DSample2->hSample, &varC, &v93, (long *)&uVolume); v31 = abs((signed __int64)*(float *)&uVolume); v32 = abs((signed __int64)v93); v33 = abs((signed __int64)*(float *)&varC); @@ -1163,7 +1191,7 @@ v36 = LODWORD(v91); } ++sPlaybackRate; - ++v30; + ++pAudioPlayer_3DSample2; } while ( sPlaybackRate <= v96 ); if ( v36 == -1 ) @@ -1173,16 +1201,16 @@ if ( v12 != 13 ) return; } - v37 = v94; - v38 = &v94->p3DSamples[v36]; - AIL_end_3D_sample(v38->hSample); - v37->_4ABF23(v38); + pAudioPlayer2 = pAudioPlayer; + pAudioPlayer_3DSample3 = &pAudioPlayer->p3DSamples[v36]; + AIL_end_3D_sample(pAudioPlayer_3DSample3->hSample); + pAudioPlayer2->_4ABF23(pAudioPlayer_3DSample3); v102 = v36; } v39 = v89; - if ( pSoundList->pSounds[v89 / 0x78].p3DSound || (LOWORD(v40) = pSoundList->_4A9A67(eSoundID, 0), v40) ) + if ( pSoundList->pSounds[v89 / 0x78].p3DSound || (LOWORD(v40) = pSoundList->LoadSound(eSoundID, 0), v40) ) { - v41 = (char *)v94 + 16 * v102; + v41 = (char *)pAudioPlayer + 16 * v102; v42 = (int)(v41 + 20); if ( AIL_set_3D_sample_file(*((int *)v41 + 5), *(void **)((char *)&pSoundList->pSounds->p3DSound + v39)) ) { @@ -1191,33 +1219,36 @@ else v86 = 1; AIL_set_3D_sample_loop_count(*(int *)v42, v86); - if ( a5 == -1 ) + if ( PartyX == -1 ) { if ( (a3 & 7) == 1 ) { - if ( uCurrentlyLoadedLevelType != LEVEL_Indoor ) - goto LABEL_103; - v48 = &pIndoor->pDoors[a3 >> 3]; - if ( !v48->uDoorID ) - return; - a1.vWorldPosition.x = (double)*v48->pXOffsets; - a1.vWorldPosition.y = (double)*v48->pYOffsets; - v47 = (double)*v48->pZOffsets; -LABEL_101: - a1.vWorldPosition.z = v47; if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) { - sub_4AAEA6_transform(&a1); - goto LABEL_104; - } -LABEL_103: - pGame->pIndoorCameraD3D->ViewTransform(&a1, 1u); -LABEL_104: + //goto LABEL_103; + pBLVDoor = &pIndoor->pDoors[a3 >> 3]; + if ( !pBLVDoor->uDoorID ) + return; + RenderVertexSoft.vWorldPosition.x = (double)*pBLVDoor->pXOffsets; + RenderVertexSoft.vWorldPosition.y = (double)*pBLVDoor->pYOffsets; + v47 = (double)*pBLVDoor->pZOffsets; +LABEL_101: + RenderVertexSoft.vWorldPosition.z = v47; + //if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) + //{ + sub_4AAEA6_transform(&RenderVertexSoft); + //goto LABEL_104; + //} + } +//LABEL_103: + if ( uCurrentlyLoadedLevelType != LEVEL_Indoor ) + pGame->pIndoorCameraD3D->ViewTransform(&RenderVertexSoft, 1); +//LABEL_104: AIL_start_3D_sample(*(int *)v42); AIL_set_3D_sample_float_distances(*(int **)v42, 100.0, 20.0, 100.0, 20.0); - AIL_set_3D_sample_volume(*(int **)v42, v94->s3DSoundVolume); - v99 = a1.vWorldViewPosition.y * -0.012207031; - v49 = a1.vWorldViewPosition.x * 0.012207031; + AIL_set_3D_sample_volume(*(int **)v42, pAudioPlayer->s3DSoundVolume); + v99 = RenderVertexSoft.vWorldViewPosition.y * -0.012207031; + v49 = RenderVertexSoft.vWorldViewPosition.x * 0.012207031; uNumRepeatsa = v49; v50 = abs((signed __int64)v49); v51 = abs(0); @@ -1228,59 +1259,57 @@ v53 = -uNumRepeatsa; v54 = -v99; AIL_set_3D_orientation((void *)*(int *)v42, LODWORD(v54), 0.0, LODWORD(v53), 0.0, 1.0, 0.0); - v55 = v94; + pAudioPlayer3 = pAudioPlayer; *((int *)v41 + 6) = a3; *((int *)v41 + 7) = v92; - *(&v55->bEAXSupported + 4 * (v102 + 2)) = eSoundID; + *(&pAudioPlayer3->bEAXSupported + 4 * (v102 + 2)) = eSoundID; } else { AIL_end_3D_sample(*(int **)v42); - v94->_4ABF23((AudioPlayer_3DSample *)(v41 + 20)); + pAudioPlayer->_4ABF23((AudioPlayer_3DSample *)(v41 + 20)); } return; } if ( (a3 & 7) == 2 ) { - v44 = &pLayingItems[a3 >> 3]; + pLayingItem2 = &pLayingItems[a3 >> 3]; } else { if ( (a3 & 7) == 3 ) { - v45 = &pActors[a3 >> 3]; - v46 = v45->vPosition.y; - a1.vWorldPosition.x = (double)v45->vPosition.x; - uNumRepeatsb = v45->vPosition.z; - a1.vWorldPosition.y = (double)v46; + pActor = &pActors[a3 >> 3]; + v46 = pActor->vPosition.y; + RenderVertexSoft.vWorldPosition.x = (double)pActor->vPosition.x; + uNumRepeatsb = pActor->vPosition.z; + RenderVertexSoft.vWorldPosition.y = (double)v46; v47 = (double)uNumRepeatsb; goto LABEL_101; } if ( (a3 & 7) != 5 ) { - a1.vWorldPosition.x = (double)pParty->vPosition.x; + RenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; v43 = (double)pParty->vPosition.y; LABEL_100: - a1.vWorldPosition.y = v43; + RenderVertexSoft.vWorldPosition.y = v43; v47 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; goto LABEL_101; } - v44 = (LayingItem *)&pLevelDecorations[a3 >> 3]; + pLayingItem2 = (LayingItem *)&pLevelDecorations[a3 >> 3]; } - a1.vWorldPosition.x = (double)v44->vPosition.x; - a1.vWorldPosition.y = (double)v44->vPosition.y; - v47 = (double)v44->vPosition.z; + RenderVertexSoft.vWorldPosition.x = (double)pLayingItem2->vPosition.x; + RenderVertexSoft.vWorldPosition.y = (double)pLayingItem2->vPosition.y; + v47 = (double)pLayingItem2->vPosition.z; goto LABEL_101; } - a1.vWorldPosition.x = (double)a5; - v43 = (double)a6; + RenderVertexSoft.vWorldPosition.x = (double)PartyX; + v43 = (double)PartyY; goto LABEL_100; } } } - - //----- (0040DEA5) -------------------------------------------------------- void __cdecl AudioPlayer::MessWithChannels() { diff -r 15ba5f459761 -r b1f67710227f AudioPlayer.h --- a/AudioPlayer.h Fri Dec 14 17:43:01 2012 +0600 +++ b/AudioPlayer.h Tue Dec 18 16:33:55 2012 +0600 @@ -247,7 +247,7 @@ {} void Initialize(); - __int16 _4A9A67(int a1, unsigned int a3); + __int16 LoadSound(int a1, unsigned int a3); int LoadSound(unsigned int a2, LPVOID lpBuffer, int uBufferSizeLeft, int *pOutSoundSize, int a6); SoundDesc *Release(); void _4A9D79(int a2); diff -r 15ba5f459761 -r b1f67710227f Indoor.cpp --- a/Indoor.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/Indoor.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -3141,12 +3141,12 @@ free(pRawDLV); //v5 = 0; - pSoundList->_4A9A67(64, 0); - pSoundList->_4A9A67(103, 0); - pSoundList->_4A9A67(63, 0); - pSoundList->_4A9A67(102, 0); - pSoundList->_4A9A67(50, 0); - pSoundList->_4A9A67(89, 0); + pSoundList->LoadSound(64, 0); + pSoundList->LoadSound(103, 0); + pSoundList->LoadSound(63, 0); + pSoundList->LoadSound(102, 0); + pSoundList->LoadSound(50, 0); + pSoundList->LoadSound(89, 0); return 0; } @@ -4514,8 +4514,8 @@ RespawnGlobalDecorations(); } - pSoundList->_4A9A67(pDoorSoundIDsByLocationID[v39], 0); - pSoundList->_4A9A67(pDoorSoundIDsByLocationID[v39] + 1, 0); + pSoundList->LoadSound(pDoorSoundIDsByLocationID[v39], 0); + pSoundList->LoadSound(pDoorSoundIDsByLocationID[v39] + 1, 0); for (uint i = 0; i < pIndoor->uNumDoors; ++i) { @@ -4612,7 +4612,7 @@ v15 = pDecorationList->pDecorations[pDecortaion->uDecorationDescID].uSoundID; if (v15 && _6807E0_num_decorations_with_sounds_6807B8 < 9) { - pSoundList->_4A9A67(v15, 0); + pSoundList->LoadSound(v15, 0); v16 = _6807E0_num_decorations_with_sounds_6807B8++; _6807B8_level_decorations_ids[v16] = i; } diff -r 15ba5f459761 -r b1f67710227f Outdoor.cpp --- a/Outdoor.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/Outdoor.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -2288,12 +2288,12 @@ pBitmaps_LOD->pTextures[uSky_TextureID].palette_id2 = pPaletteManager->LoadPalette(pBitmaps_LOD->pTextures[uSky_TextureID].palette_id1); pPaletteManager->RecalculateAll(); - pSoundList->_4A9A67(53, 0); - pSoundList->_4A9A67(92, 0); - pSoundList->_4A9A67(57, 0); - pSoundList->_4A9A67(96, 0); - pSoundList->_4A9A67(64, 0); - pSoundList->_4A9A67(103, 0); + pSoundList->LoadSound(53, 0); + pSoundList->LoadSound(92, 0); + pSoundList->LoadSound(57, 0); + pSoundList->LoadSound(96, 0); + pSoundList->LoadSound(64, 0); + pSoundList->LoadSound(103, 0); v102 = thisa; thisa = 3; do @@ -2303,34 +2303,34 @@ switch ( *(short *)v102 ) { case 1: - pSoundList->_4A9A67(58, 0); + pSoundList->LoadSound(58, 0); v108 = 0; v107 = 97; break; case 2: - pSoundList->_4A9A67(52, 0); + pSoundList->LoadSound(52, 0); v108 = 0; v107 = 91; break; case 3: - pSoundList->_4A9A67(51, 0); + pSoundList->LoadSound(51, 0); v108 = 0; v107 = 90; break; case 5: - pSoundList->_4A9A67(62, 0); + pSoundList->LoadSound(62, 0); v108 = 0; v107 = 101; break; case 6: - pSoundList->_4A9A67(49, 0); + pSoundList->LoadSound(49, 0); v108 = 0; v107 = 88; break; default: if ( *(short *)v102 != 7 ) goto LABEL_175; - pSoundList->_4A9A67(61, 0); + pSoundList->LoadSound(61, 0); v108 = 0; v107 = 100; break; @@ -2338,11 +2338,11 @@ } else { - pSoundList->_4A9A67(54, 0); + pSoundList->LoadSound(54, 0); v108 = 0; v107 = 93; } - pSoundList->_4A9A67(v107, v108); + pSoundList->LoadSound(v107, v108); LABEL_175: v102 += 4; --thisa; @@ -2687,7 +2687,7 @@ v4 = pDecorationList->pDecorations[decor->uDecorationDescID].uSoundID; if ( v4 && _6807E0_num_decorations_with_sounds_6807B8 < 9 ) { - pSoundList->_4A9A67(v4, 0); + pSoundList->LoadSound(v4, 0); v5 = _6807E0_num_decorations_with_sounds_6807B8++; _6807B8_level_decorations_ids[v5] = i; } diff -r 15ba5f459761 -r b1f67710227f Player.cpp --- a/Player.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/Player.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -628,15 +628,7 @@ + 4998; v12 = 8 * v22 + 312; LOBYTE(v12) = v12 | 4; - pAudioPlayer->PlaySound( - (SoundID)v23, - v12, - 0, - -1, - 0, - 0, - (signed __int64)(pSoundVolumeLevels[(char)uVoicesVolumeMultiplier] * 128.0), - 0); + pAudioPlayer->PlaySound((SoundID)v23, v12, 0, -1, 0, 0, (signed __int64)(pSoundVolumeLevels[(char)uVoicesVolumeMultiplier] * 128.0), 0); } } } diff -r 15ba5f459761 -r b1f67710227f Render.cpp --- a/Render.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/Render.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -1024,6 +1024,7 @@ int v125; // [sp+6Ch] [bp-8h]@9 float v126; // [sp+70h] [bp-4h]@9 + memset(&v102, 0, sizeof(v102)); v105 = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2); v0 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY); v1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + v0); diff -r 15ba5f459761 -r b1f67710227f mm7_2.cpp --- a/mm7_2.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/mm7_2.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -3390,14 +3390,14 @@ ya = 4; do { - pSoundList->_4A9A67((signed __int16)*v11, 0); + pSoundList->LoadSound((signed __int16)*v11, 0); ++v11; --ya; } while ( ya ); v12 = 0; do - LOWORD(v13) = pSoundList->_4A9A67(v12++ + word_4EE088_sound_ids[v9->uSpell1ID], 1u); + LOWORD(v13) = pSoundList->LoadSound(v12++ + word_4EE088_sound_ids[v9->uSpell1ID], 1u); while ( v13 ); ++uNumActors; } @@ -11888,14 +11888,14 @@ auto v11 = &pMonsterList->pMonsters[v9]; do { - pSoundList->_4A9A67(v11->pSoundSampleIDs[4 - v18], 0); + pSoundList->LoadSound(v11->pSoundSampleIDs[4 - v18], 0); //v11 = (int *)((char *)v11 + 2); --v18; } while ( v18 ); v12 = 0; do - v13 = pSoundList->_4A9A67(v12++ + word_4EE088_sound_ids[v10->uSpell1ID], 1); + v13 = pSoundList->LoadSound(v12++ + word_4EE088_sound_ids[v10->uSpell1ID], 1); while ( v13 ); ++_v0; } diff -r 15ba5f459761 -r b1f67710227f mm7_3.cpp --- a/mm7_3.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/mm7_3.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -15409,7 +15409,7 @@ if (_evt->v4 == 3) { - pSoundList->_4A9A67( + pSoundList->LoadSound( _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8), 0); diff -r 15ba5f459761 -r b1f67710227f mm7_4.cpp --- a/mm7_4.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/mm7_4.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -2924,8 +2924,8 @@ if (byte_4ED498) for (uint i = 0; i < 4; ++i) { - pSoundList->_4A9A67(2 * (byte_4ED498 + 50 * pParty->pPlayers[i].uVoiceID) + 4998, 0); - pSoundList->_4A9A67(2 * (byte_4ED498 + 50 * pParty->pPlayers[i].uVoiceID) + 4999, 0); + pSoundList->LoadSound(2 * (byte_4ED498 + 50 * pParty->pPlayers[i].uVoiceID) + 4998, 0); + pSoundList->LoadSound(2 * (byte_4ED498 + 50 * pParty->pPlayers[i].uVoiceID) + 4999, 0); } } diff -r 15ba5f459761 -r b1f67710227f mm7_5.cpp --- a/mm7_5.cpp Fri Dec 14 17:43:01 2012 +0600 +++ b/mm7_5.cpp Tue Dec 18 16:33:55 2012 +0600 @@ -3378,11 +3378,11 @@ signed int v4; // eax@29 int v5; // ecx@29 enum PLAYER_SKILL_TYPE v6; // edi@37 - GUIWindow *v7; // eax@56 + GUIWindow *pWindow; // eax@56 unsigned int v8; // edx@56 - Player *v9; // edi@57 + Player *pCurrentPlayer; // edi@57 signed int v10; // eax@58 - GUIButton *v11; // eax@59 + GUIButton *pButton; // eax@59 unsigned __int8 v12; // sf@62 signed int v13; // eax@64 unsigned int v14; // eax@66 @@ -3413,7 +3413,7 @@ int v43; // [sp-10h] [bp-20h]@56 int uNum; // [sp+4h] [bp-Ch]@3 UIMessageType pUIMessageType; // [sp+8h] [bp-8h]@3 - int v46; // [sp+Ch] [bp-4h]@3 + int pSex; // [sp+Ch] [bp-4h]@3 Player *pPlayer; if ( pMessageQueue_50CBD0->uNumMessages ) @@ -3423,7 +3423,7 @@ pPlayer = pParty->pPlayers; do { - pMessageQueue_50CBD0->PopMessage(&pUIMessageType, &uNum, &v46); + pMessageQueue_50CBD0->PopMessage(&pUIMessageType, &uNum, &pSex); switch (pUIMessageType) { case UIMSG_MainMenu_ShowPartyCreationWnd: @@ -3432,39 +3432,32 @@ SetCurrentMenuID(MENU_NEWGAME); } continue; - case UIMSG_MainMenu_ShowLoadWindow: { GUIWindow::Create(495, 227, 0, 0, WINDOW_5A, (int)pMainMenu_BtnLoad, 0); SetCurrentMenuID(MENU_SAVELOAD); } continue; - case UIMSG_ShowCredits: { GUIWindow::Create(495, 282, 0, 0, WINDOW_5A, (int)pMainMenu_BtnCredits, 0); SetCurrentMenuID(MENU_CREDITS); } continue; - case UIMSG_ExitToWindows: { GUIWindow::Create(495, 337, 0, 0, WINDOW_5A, (int)pMainMenu_BtnExit, 0); SetCurrentMenuID(MENU_FINISHED); } continue; - case UIMSG_LoadGame: { if (!pSavegameUsedSlots[uLoadGameUI_SelectedSlot]) continue; - SetCurrentMenuID(MENU_LOAD); } continue; } - - switch (pUIMessageType) { case UIMSG_A5: // WINDOW_5A @@ -3493,15 +3486,12 @@ } } continue; - - case UIMSG_A4: { GUIWindow::Create(pGUIWindow_CurrentMenu->uFrameX + 241, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, WINDOW_5E, (int)ptr_69BD64, 0); } continue; } - if ( (signed int)pUIMessageType > UIMSG_PlayerCreationRemoveDownSkill ) { if ( pUIMessageType > UIMSG_A3 ) @@ -3580,7 +3570,7 @@ dword_6A0C9C = uNum - 1; if ( dword_6A0C9C < 1 ) dword_6A0C9C = 0; - v7 = pGUIWindow_CurrentMenu; + pWindow = pGUIWindow_CurrentMenu; v43 = 0; v39 = (int)ptr_69BD58; v8 = pGUIWindow_CurrentMenu->uFrameY + 323; @@ -3680,49 +3670,41 @@ pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * uNum; uPlayerCreationUI_SelectedCharacter = uNum; -LABEL_36: - v42 = 0; - v38 = 0; - v36 = 0; - v34 = 0; - v32 = -1; - v31 = 0; - v30 = 0; - pSoundID = (SoundID)66; -LABEL_40: - pAudioPlayer->PlaySound(pSoundID, v30, v31, v32, v34, v36, v38, v42); + pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0); continue; } if ( pUIMessageType == UIMSG_PlayerCreationVoiceBack ) { - v9 = &pPlayer[uNum]; - v46 = v9->GetSexByVoice(); + pCurrentPlayer = &pPlayer[uNum]; + pSex = pCurrentPlayer->GetSexByVoice(); do { - v12 = ((v9->uVoiceID-- - 1) & 0x80000000u) != 0; + v12 = ((pCurrentPlayer->uVoiceID-- - 1) & 0x80000000u) != 0; if ( v12 ) - v9->uVoiceID = 19; - v13 = v9->GetSexByVoice(); - } - while ( v13 != v46 ); - v11 = pCreationUI_BtnPressLeft2[uNum]; - goto LABEL_60; + pCurrentPlayer->uVoiceID = 19; + v13 = pCurrentPlayer->GetSexByVoice(); + } + while ( v13 != pSex ); + pButton = pCreationUI_BtnPressLeft2[uNum]; + GUIWindow::Create(pButton->uX, pButton->uY, 0, 0, (enum WindowType)92, (int)pButton, 1); + pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0); + pCurrentPlayer->PlaySound(102, 0); + continue; } if ( pUIMessageType == UIMSG_PlayerCreationVoiceForward ) { - v9 = &pPlayer[uNum]; - v46 = v9->GetSexByVoice(); + pCurrentPlayer = &pPlayer[uNum]; + pSex = pCurrentPlayer->GetSexByVoice(); do { - v9->uVoiceID = (signed int)(v9->uVoiceID + 1) % 20; - v10 = v9->GetSexByVoice(); - } - while ( v10 != v46 ); - v11 = pCreationUI_BtnPressRight2[uNum]; -LABEL_60: - GUIWindow::Create(v11->uX, v11->uY, 0, 0, (enum WindowType)92, (int)v11, 1); + pCurrentPlayer->uVoiceID = (signed int)(pCurrentPlayer->uVoiceID + 1) % 20; + v10 = pCurrentPlayer->GetSexByVoice(); + } + while ( v10 != pSex ); + pButton = pCreationUI_BtnPressRight2[uNum]; + GUIWindow::Create(pButton->uX, pButton->uY, 0, 0, (enum WindowType)92, (int)pButton, 1); pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0); - v9->PlaySound(102, 0); + pCurrentPlayer->PlaySound(102, 0); continue; } if ( pUIMessageType == UIMSG_A2 ) @@ -3730,12 +3712,12 @@ --dword_6A0C9C; if ( dword_6A0C9C < 0 ) dword_6A0C9C = 0; - v7 = pGUIWindow_CurrentMenu; + pWindow = pGUIWindow_CurrentMenu; v43 = 0; v39 = (int)ptr_69BD5C; v8 = pGUIWindow_CurrentMenu->uFrameY + 197; LABEL_105: - GUIWindow::Create(v7->uFrameX + 215, v8, 0, 0, (WindowType)90, v39, v43); + GUIWindow::Create(pWindow->uFrameX + 215, v8, 0, 0, (WindowType)90, v39, v43); continue; } } @@ -3749,7 +3731,10 @@ v1 = (char *)pParty->pPlayers; v5 = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * uNum; - goto LABEL_44; + pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v5; + pParty->pPlayers[0].pActiveSkills[(&pPlayer[uPlayerCreationUI_SelectedCharacter])->GetSkillIdxByOrder(v41) + + 3486 * uPlayerCreationUI_SelectedCharacter] = 0; + continue; } if ( (signed int)pUIMessageType > UIMSG_3C ) { @@ -3758,30 +3743,16 @@ GUIWindow::Create(613, 393, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnPlus, 1); (&pPlayer[uPlayerCreationUI_SelectedCharacter])->IncreaseAttribute( (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7); - v42 = 0; - v38 = 0; - v36 = 0; - v34 = 0; - v32 = -1; - v31 = 0; - v30 = 0; - pSoundID = (SoundID)20; - goto LABEL_40; + pAudioPlayer->PlaySound((SoundID)20, 0, 0, -1, 0, 0, 0, 0); + continue; } if ( pUIMessageType == UIMSG_PlayerCreationClickMinus ) { GUIWindow::Create(523, 393, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnMinus, 1); (&pPlayer[uPlayerCreationUI_SelectedCharacter])->DecreaseAttribute( (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7); - v42 = 0; - v38 = 0; - v36 = 0; - v34 = 0; - v32 = -1; - v31 = 0; - v30 = 0; - pSoundID = (SoundID)23; - goto LABEL_40; + pAudioPlayer->PlaySound((SoundID)23, 0, 0, -1, 0, 0, 0, 0); + continue; } if ( pUIMessageType == UIMSG_PlayerCreationSelectActiveSkill ) { @@ -3789,20 +3760,14 @@ v6 = _t->GetSkillIdxByOrder(uNum + 4); if ( _t->GetSkillIdxByOrder(3) == 37 ) pParty->pPlayers[0].pActiveSkills[v6 + 3486 * uPlayerCreationUI_SelectedCharacter] = 1; - v42 = 0; - v38 = 0; - v36 = 0; - v34 = 0; - v32 = -1; - v31 = 0; - v30 = 0; - pSoundID = (SoundID)24; - goto LABEL_40; + pAudioPlayer->PlaySound((SoundID)24, 0, 0, -1, 0, 0, 0, 0); + continue; } if ( pUIMessageType == UIMSG_PlayerCreationSelectClass ) { (&pPlayer[uPlayerCreationUI_SelectedCharacter])->Reset(uNum); - goto LABEL_36; + pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0); + continue; } if ( pUIMessageType == UIMSG_PlayerCreationClickOK ) { @@ -3824,10 +3789,9 @@ { uPlayerCreationUI_SelectedCharacter = uNum; v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem; - v46 = pGUIWindow_CurrentMenu->pStartingPosActiveItem; + pSex = pGUIWindow_CurrentMenu->pStartingPosActiveItem; v41 = 2; - v5 = v4 % 7 + v46 + 7 * uNum; -LABEL_44: + v5 = v4 % 7 + pSex + 7 * uNum; pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v5; pParty->pPlayers[0].pActiveSkills[(&pPlayer[uPlayerCreationUI_SelectedCharacter])->GetSkillIdxByOrder(v41) + 3486 * uPlayerCreationUI_SelectedCharacter] = 0; @@ -15794,11 +15758,11 @@ enum PLAYER_SKILL_TYPE v18; // eax@98 char *pStr2; // eax@99 unsigned int v20; // eax@108 - unsigned int v21; // eax@109 - const char *v22; // eax@111 - char *v23; // ebx@112 - char *v24; // edx@113 - unsigned int v25; // eax@113 + unsigned int pSkillId; // eax@109 + const char *pSkillInfo; // eax@111 + //char *v23; // ebx@112 + char *pHint; // edx@113 + unsigned int pColor; // eax@113 GUIWindow pWindow; // [sp+4h] [bp-74h]@32 double v27; // [sp+58h] [bp-20h]@33 struct tagPOINT Point; // [sp+60h] [bp-18h]@6 @@ -16045,11 +16009,6 @@ goto LABEL_132; } pWindow.Hint = 0; - pButton = pGUIWindow_CurrentMenu->pControlsHead; - if ( !pButton ) - goto LABEL_132; - v13 = pY; - //pStr = v29; pStr = 0; for ( pButton = pGUIWindow_CurrentMenu->pControlsHead; pButton; pButton = pButton->pNext) { @@ -16057,7 +16016,7 @@ && (signed int)pY > (signed int)pButton->uY && (signed int)pY < (signed int)pButton->uW ) { pControlID = pButton->uControlID; - switch (pControlID) + switch ( pControlID ) { case 0: //stats info pWindow.Hint = pAttributeDescriptions[(signed int)pButton->uControlParam % 7]; @@ -16065,65 +16024,57 @@ break; case 62: //Plus button info pStr = pGlobalTXT_LocalizationStrings[670];//Добавить - pStr2 = pGlobalTXT_LocalizationStrings[671];//"Добавляет очко к выделенному навыку, забирая его из накопителя очков" - pWindow.Hint = pStr2; + pWindow.Hint = pGlobalTXT_LocalizationStrings[671];//"Добавляет очко к выделенному навыку, забирая его из накопителя очков" break; case 63: //Minus button info pStr = pGlobalTXT_LocalizationStrings[668];//Вычесть - pStr2 = pGlobalTXT_LocalizationStrings[669];//"Вычитает очко из выделенного навыка, возвращая его в накопитель очков" - pWindow.Hint = pStr2; + pWindow.Hint = pGlobalTXT_LocalizationStrings[669];//"Вычитает очко из выделенного навыка, возвращая его в накопитель очков" break; case 64: //Available skill button info v18 = pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].GetSkillIdxByOrder(pButton->uControlParam + 4); pStr = pSkillNames[v18]; pWindow.Hint = pSkillDesc[v18]; - v13 = pY; break; case 65: //Available Class Info pWindow.Hint = pClassDescriptions[pButton->uControlParam]; pStr = pClassNames[pButton->uControlParam]; break; case 66: //OK Info - pStr2 = pGlobalTXT_LocalizationStrings[664];//Щелкните здесь для утверждения состава отряда и продолжения игры. + pWindow.Hint = pGlobalTXT_LocalizationStrings[664];//Щелкните здесь для утверждения состава отряда и продолжения игры. pStr = pGlobalTXT_LocalizationStrings[665];//Кнопка ОК - pWindow.Hint = pStr2; - break; + break; case 67: //Clear info - pStr2 = pGlobalTXT_LocalizationStrings[666];//Сбрасывает все параметры и навыки отряда. + pWindow.Hint = pGlobalTXT_LocalizationStrings[666];//Сбрасывает все параметры и навыки отряда. pStr = pGlobalTXT_LocalizationStrings[667];//Кнопка Очистить - pWindow.Hint = pStr2; break; case 118: // Character info - v20 = pButton->uControlParam; - pStr = pParty->pPlayers[v20].pName; - pStr2 = pClassDescriptions[pParty->pPlayers[v20].uClass]; - pWindow.Hint = pStr2; + pStr = pParty->pPlayers[pButton->uControlParam].pName; + pWindow.Hint = pClassDescriptions[pParty->pPlayers[pButton->uControlParam].uClass]; break; } if ( pControlID > 68 && pControlID <= 75 ) //Sellected skills info { - v21 = pParty->pPlayers[pButton->uControlParam].GetSkillIdxByOrder(pControlID - 72); - pY = v21; - if ( (v21 & 0x80000000u) == 0 || (signed int)v21 < 37 ) - { - v22 = CharacterUI_GetSkillDescText(pButton->uControlParam, (enum PLAYER_SKILL_TYPE)v21); - strcpy(pTmpBuf2, v22); + pSkillId = pParty->pPlayers[pButton->uControlParam].GetSkillIdxByOrder(pControlID - 72); + pY = 0; + if ( (signed int)pSkillId < 37 ) + { + pSkillInfo = CharacterUI_GetSkillDescText(pButton->uControlParam, (enum PLAYER_SKILL_TYPE)pSkillId); + strcpy(pTmpBuf2, pSkillInfo); pWindow.Hint = pTmpBuf2; - pStr = pSkillNames[pY]; + pStr = pSkillNames[pSkillId]; } } } } - v23 = pWindow.Hint; if ( pWindow.Hint ) { - v24 = pWindow.Hint; + pHint = pWindow.Hint; pWindow.Hint = 0; pWindow.uFrameWidth = 384; pWindow.uFrameHeight = 256; pWindow.uFrameX = 128; pWindow.uFrameY = 40; - pWindow.uFrameHeight = pFontSmallnum->CalcTextHeight(v24, &pWindow, 24, 0) + 2 * LOBYTE(pFontLucida->uFontHeight) + 24; + pWindow.uFrameHeight = pFontSmallnum->CalcTextHeight(pHint, &pWindow, 24, 0) + 2 * LOBYTE(pFontLucida->uFontHeight) + 24; pWindow.uFrameZ = pWindow.uFrameX + pWindow.uFrameWidth - 1; pWindow.uFrameW = pWindow.uFrameY + pWindow.uFrameHeight - 1; pWindow.DrawMessageBox(0); @@ -16133,10 +16084,10 @@ pWindow.uFrameHeight -= 12; pWindow.uFrameZ = pWindow.uFrameX + pWindow.uFrameWidth - 1; pWindow.uFrameW = pWindow.uFrameY + pWindow.uFrameHeight - 1; - v25 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFF, 0xFF, 0x9B); - sprintf(pTmpBuf, pStr, v25, format_4E2D80);//sprintfex должен быть - не работает sprintfex(pTmpBuf, format_4E2D80, v25, pStr) + pColor = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFF, 0xFF, 0x9B); + sprintf(pTmpBuf, pStr, pColor, format_4E2D80);//sprintfex должен быть - не работает sprintfex(pTmpBuf, format_4E2D80, v25, pStr) pWindow.DrawTitleText(pFontCreate, 0, 0, 0, pTmpBuf, 3); - pWindow.DrawText(pFontSmallnum, 1, LOBYTE(pFontLucida->uFontHeight), 0, v23, 0, 0, 0); + pWindow.DrawText(pFontSmallnum, 1, LOBYTE(pFontLucida->uFontHeight), 0, pHint, 0, 0, 0); } LABEL_132: dword_507BF0_is_there_popup_onscreen = 1;