Mercurial > mm7
changeset 2399:aad4f31aa297
Merge
author | Grumpy7 |
---|---|
date | Thu, 10 Jul 2014 01:37:41 +0200 |
parents | 79e750ba00b9 (current diff) 6997e2ad913b (diff) |
children | ecd1dd95ec49 |
files | UI/UiGame.cpp stru176.h |
diffstat | 35 files changed, 1247 insertions(+), 1623 deletions(-) [+] |
line wrap: on
line diff
--- a/Arcomage.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Arcomage.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -1109,7 +1109,7 @@ pArcomageGame->pSprites.Release(); pArcomageGame->bGameInProgress = false; viewparams->bRedrawGameUI = true; - if ( pMovie ) + if ( pMovie_Track ) pVideoPlayer->_4BF5B2(); for( int i = 0; i < 12; ++i ) pSoundList->UnloadSound(am_sounds[i], 1);
--- a/AudioPlayer.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/AudioPlayer.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -486,7 +486,7 @@ } //----- (004AA306) -------------------------------------------------------- -void AudioPlayer::PlaySound(SoundID eSoundID, signed int a3, unsigned int uNumRepeats, signed int source_x, signed int source_y, int a7, float uVolume, int sPlaybackRate) +void AudioPlayer::PlaySound(SoundID eSoundID, signed int pid, unsigned int uNumRepeats, signed int source_x, signed int source_y, int sound_data_id, float uVolume, int sPlaybackRate) { int v12; // edi@13 signed int v13; // ecx@17 @@ -567,7 +567,7 @@ return; } assert(sound_id < pSoundList->sNumSounds); - if ( !a7 ) + if ( !sound_data_id ) { if ( !pSoundList->pSL_Sounds[sound_id].pSoundData[0] ) { @@ -575,7 +575,7 @@ pSoundList->LoadSound(eSoundID, 0); } } - if ( !pSoundList->pSL_Sounds[sound_id].pSoundData[a7] ) + if ( !pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] ) return; int start_channel = 0, @@ -584,13 +584,13 @@ if (!b3DSoundInitialized || pSoundList->pSL_Sounds[sound_id].Is3D()) { - if (a3 == 0) // generic sound like from UI + if (pid == 0) // generic sound like from UI { start_channel = 10; end_channel = 12; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -603,8 +603,8 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - char *p = (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7]; - if (a7 == 0) p = p + 4;//for RIFF + char *p = (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id]; + if (sound_data_id == 0) p = p + 4;//for RIFF if ( eSoundID == 75 )// Ritor1: include +7 for pSounds[20] p = p + 7; AIL_set_sample_file(pMixerChannels[j].hSample, p, -1); @@ -612,8 +612,8 @@ sample_volume = uMasterVolume; if (uVolume) sample_volume = uVolume; - int object_type = PID_TYPE(a3), - object_id = PID_ID(a3); + int object_type = PID_TYPE(pid), + object_id = PID_ID(pid); if (source_x != -1)//срабатывает например у форта в Хермондейле звук выстрелов пушек { //if (!source_x) @@ -630,7 +630,7 @@ if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -642,7 +642,7 @@ } return; } - else if (a3 == -1) // exclusive sounds - can override + else if (pid == -1) // exclusive sounds - can override { /*if ( AIL_sample_status(pMixerChannels[13].hSample) == AIL::Sample::Done ) { @@ -651,8 +651,8 @@ FreeChannel(&pMixerChannels[13]); }*/ AIL_init_sample(pMixerChannels[13].hSample); - char *p = (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7]; - if (a7 == 0) + char *p = (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id]; + if (sound_data_id == 0) p = p + 4;//for RIFF if ( eSoundID == 75 )// Ritor1: include +7 for pSounds[20] p = p + 7; @@ -662,12 +662,12 @@ if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[13].hSample, sample_volume); - int object_type = PID_TYPE(a3), - object_id = PID_ID(a3); + int object_type = PID_TYPE(pid), + object_id = PID_ID(pid); if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[13].hSample, uNumRepeats - 1); pMixerChannels[13].uSourceTrackIdx = sound_id; - pMixerChannels[13].source_pid = a3; + pMixerChannels[13].source_pid = pid; pMixerChannels[13].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[13].hSample);//no sound chest close if ( sPlaybackRate ) @@ -676,13 +676,13 @@ AIL_sample_ms_position(pMixerChannels[13].hSample, &sLastTrackLengthMS, 0); return; } - else if (a3 < 0) // exclusive sounds - no override (close chest) + else if (pid < 0) // exclusive sounds - no override (close chest) { start_channel = 14; end_channel = 14; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -695,8 +695,8 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - char *p = (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7]; - if (a7 == 0) p = p + 4;//for RIFF + char *p = (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id]; + if (sound_data_id == 0) p = p + 4;//for RIFF if ( eSoundID == 75 )// Ritor1: include +7 for pSounds[20] p = p + 7; AIL_set_sample_file(pMixerChannels[j].hSample, p, -1); @@ -704,12 +704,12 @@ sample_volume = uMasterVolume; if (uVolume) sample_volume = uVolume; - int object_type = PID_TYPE(a3), - object_id = PID_ID(a3); + int object_type = PID_TYPE(pid), + object_id = PID_ID(pid); if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample);//no sound chest close if ( sPlaybackRate ) @@ -723,8 +723,8 @@ } else { - int object_type = PID_TYPE(a3), - object_id = PID_ID(a3); + int object_type = PID_TYPE(pid), + object_id = PID_ID(pid); switch (object_type) { case OBJECT_BLVDoor: @@ -738,7 +738,7 @@ end_channel = 12; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -751,7 +751,7 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[j].hSample, sample_volume); @@ -765,7 +765,7 @@ if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -784,7 +784,7 @@ end_channel = 12; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -797,14 +797,14 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[j].hSample, sample_volume); if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -827,7 +827,7 @@ return; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -840,7 +840,7 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[j].hSample, sample_volume); @@ -850,7 +850,7 @@ if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -873,7 +873,7 @@ return; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing )//звук фонтана и шагов не проходят проверку на повтор + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing )//звук фонтана и шагов не проходят проверку на повтор { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -886,7 +886,7 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[j].hSample, sample_volume); @@ -896,7 +896,7 @@ if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -919,7 +919,7 @@ return; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if (pMixerChannels[i].uSourceTrackIdx == sound_id) return; // already playing the same sound from the same source - return @@ -932,7 +932,7 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[j].hSample, sample_volume); @@ -942,7 +942,7 @@ if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -961,7 +961,7 @@ end_channel = 9; for (uint i = start_channel; i <= end_channel; ++i) { - if ( pMixerChannels[i].source_pid == a3 && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) + if ( pMixerChannels[i].source_pid == pid && AIL_sample_status(pMixerChannels[i].hSample) == AIL::Sample::Playing ) { if ( pMixerChannels[i].uSourceTrackIdx == sound_id ) return; // already playing the same sound from the same source - return @@ -974,14 +974,14 @@ if ( AIL_sample_status(pMixerChannels[j].hSample) == AIL::Sample::Done ) { AIL_init_sample(pMixerChannels[j].hSample); - AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[j].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[j].hSample, sample_volume); if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[j].hSample, uNumRepeats - 1); pMixerChannels[j].uSourceTrackIdx = sound_id; - pMixerChannels[j].source_pid = a3; + pMixerChannels[j].source_pid = pid; pMixerChannels[j].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[j].hSample); if ( sPlaybackRate ) @@ -1030,13 +1030,13 @@ sample_volume = uMasterVolume; AIL_init_sample(pMixerChannels[v62].hSample); - AIL_set_sample_file(pMixerChannels[v62].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[a7] + 4 * (a7 == 0), -1); + AIL_set_sample_file(pMixerChannels[v62].hSample, (char *)pSoundList->pSL_Sounds[sound_id].pSoundData[sound_data_id] + 4 * (sound_data_id == 0), -1); if (uVolume) sample_volume = uVolume; AIL_set_sample_volume(pMixerChannels[v62].hSample, sample_volume); - int object_type = PID_TYPE(a3), - object_id = PID_ID(a3); + int object_type = PID_TYPE(pid), + object_id = PID_ID(pid); if (source_x != -1) { if (!source_x) @@ -1050,7 +1050,7 @@ if (uNumRepeats) AIL_set_sample_loop_count(pMixerChannels[v62].hSample, uNumRepeats - 1); pMixerChannels[v62].uSourceTrackIdx = sound_id; - pMixerChannels[v62].source_pid = a3; + pMixerChannels[v62].source_pid = pid; pMixerChannels[v62].uSourceTrackID = eSoundID; int rval = AIL_start_sample(pMixerChannels[v62].hSample); if ( sPlaybackRate ) @@ -1063,10 +1063,10 @@ { __debugbreak(); // 3d sound stuff, refactor v12 = 13; - if ( a3 < 0 ) + if ( pid < 0 ) { v15 = pAudioPlayer->uNum3DSamples; - if ( a3 == -1 ) + if ( pid == -1 ) { if ( v15 < 16 ) v12 = v15 - 1; @@ -1087,7 +1087,7 @@ v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; goto LABEL_47; } - if ( PID_TYPE(a3) == 2 ) + if ( PID_TYPE(pid) == 2 ) { v22 = pAudioPlayer->uNum3DSamples; if ( v22 < 16 ) @@ -1100,11 +1100,11 @@ v96 = 7; v12 = 5; } - pLayingItem = &pSpriteObjects[PID_ID(a3)]; + pLayingItem = &pSpriteObjects[PID_ID(pid)]; } else { - if ( PID_TYPE(a3) == 3 ) + if ( PID_TYPE(pid) == 3 ) { v18 = pAudioPlayer->uNum3DSamples; v12 = 0; @@ -1112,7 +1112,7 @@ v96 = 3 * v18 / 16; else v96 = 3; - pActor1 = &pActors[PID_ID(a3)]; + pActor1 = &pActors[PID_ID(pid)]; v20 = pActor1->vPosition.y; pRenderVertexSoft.vWorldPosition.x = (double)pActor1->vPosition.x; v100 = pActor1->vPosition.z; @@ -1120,10 +1120,10 @@ v21 = (double)v100; goto LABEL_47; } - if ( PID_TYPE(a3) != 5 ) + if ( PID_TYPE(pid) != 5 ) { v13 = pAudioPlayer->uNum3DSamples; - if ( PID_TYPE(a3) == 6 ) + if ( PID_TYPE(pid) == 6 ) { if ( v13 >= 16 ) { @@ -1173,7 +1173,7 @@ v12 = 4; v96 = 4; } - pLayingItem = (SpriteObject *)&pLevelDecorations[PID_ID(a3)]; + pLayingItem = (SpriteObject *)&pLevelDecorations[PID_ID(pid)]; } pRenderVertexSoft.vWorldPosition.x = (double)pLayingItem->vPosition.x; pRenderVertexSoft.vWorldPosition.y = (double)pLayingItem->vPosition.y; @@ -1184,9 +1184,9 @@ sub_4AAEA6_transform(&pRenderVertexSoft); else pGame->pIndoorCameraD3D->ViewTransform(&pRenderVertexSoft, 1); - if ( a3 ) + if ( pid ) { - if ( a3 != -1 ) + if ( pid != -1 ) { v101 = 0; if ( pAudioPlayer->uNum3DSamples > 0 ) @@ -1195,7 +1195,7 @@ do { if ( AIL_3D_sample_status(pAudioPlayer_3DSample->hSample) == 4 - && pAudioPlayer_3DSample->field_4 == a3 && AIL_3D_sample_status(pAudioPlayer_3DSample->hSample) == 4 ) + && pAudioPlayer_3DSample->field_4 == pid && AIL_3D_sample_status(pAudioPlayer_3DSample->hSample) == 4 ) { if ( pAudioPlayer_3DSample->field_8 == sound_id ) return; @@ -1295,12 +1295,12 @@ AIL_set_3D_sample_loop_count(*(int *)v42, v86); if ( source_x == -1 ) { - if ( PID_TYPE(a3) == 1 ) + if ( PID_TYPE(pid) == 1 ) { if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) { //goto LABEL_103; - pBLVDoor = &pIndoor->pDoors[PID_ID(a3)]; + pBLVDoor = &pIndoor->pDoors[PID_ID(pid)]; if ( !pBLVDoor->uDoorID ) return; pRenderVertexSoft.vWorldPosition.x = (double)*pBLVDoor->pXOffsets; @@ -1334,7 +1334,7 @@ v54 = -v99; AIL_set_3D_orientation((void *)*(int *)v42, LODWORD(v54), 0.0, LODWORD(v53), 0.0, 1.0, 0.0); //pAudioPlayer3 = pAudioPlayer; - *((int *)v41 + 6) = a3; + *((int *)v41 + 6) = pid; *((int *)v41 + 7) = sound_id; *(&pAudioPlayer->bEAXSupported + 4 * (v102 + 2)) = eSoundID; } @@ -1345,15 +1345,15 @@ } return; } - if ( PID_TYPE(a3) == 2 ) + if ( PID_TYPE(pid) == 2 ) { - pLayingItem2 = &pSpriteObjects[PID_ID(a3)]; + pLayingItem2 = &pSpriteObjects[PID_ID(pid)]; } else { - if ( PID_TYPE(a3) == 3 ) + if ( PID_TYPE(pid) == 3 ) { - pActor = &pActors[PID_ID(a3)]; + pActor = &pActors[PID_ID(pid)]; v46 = pActor->vPosition.y; pRenderVertexSoft.vWorldPosition.x = (double)pActor->vPosition.x; uNumRepeatsb = pActor->vPosition.z; @@ -1361,7 +1361,7 @@ v47 = (double)uNumRepeatsb; goto LABEL_101; } - if ( PID_TYPE(a3) != 5 ) + if ( PID_TYPE(pid) != 5 ) { pRenderVertexSoft.vWorldPosition.x = (double)pParty->vPosition.x; v43 = (double)pParty->vPosition.y; @@ -1369,7 +1369,7 @@ v47 = (double)pParty->sEyelevel + (double)pParty->vPosition.z; goto LABEL_101; } - pLayingItem2 = (SpriteObject *)&pLevelDecorations[PID_ID(a3)]; + pLayingItem2 = (SpriteObject *)&pLevelDecorations[PID_ID(pid)]; } pRenderVertexSoft.vWorldPosition.x = (double)pLayingItem2->vPosition.x; pRenderVertexSoft.vWorldPosition.y = (double)pLayingItem2->vPosition.y;
--- a/Build/Visual Studio 2010/World of Might and Magic.vcxproj Thu Jul 10 01:34:57 2014 +0200 +++ b/Build/Visual Studio 2010/World of Might and Magic.vcxproj Thu Jul 10 01:37:41 2014 +0200 @@ -468,7 +468,6 @@ <ClInclude Include="..\..\stru123.h" /> <ClInclude Include="..\..\stru159.h" /> <ClInclude Include="..\..\stru160.h" /> - <ClInclude Include="..\..\stru176.h" /> <ClInclude Include="..\..\stru298.h" /> <ClInclude Include="..\..\stru314.h" /> <ClInclude Include="..\..\stru367.h" />
--- a/Build/Visual Studio 2010/World of Might and Magic.vcxproj.filters Thu Jul 10 01:34:57 2014 +0200 +++ b/Build/Visual Studio 2010/World of Might and Magic.vcxproj.filters Thu Jul 10 01:37:41 2014 +0200 @@ -66,7 +66,6 @@ <ClInclude Include="..\..\stru123.h" /> <ClInclude Include="..\..\stru159.h" /> <ClInclude Include="..\..\stru160.h" /> - <ClInclude Include="..\..\stru176.h" /> <ClInclude Include="..\..\stru298.h" /> <ClInclude Include="..\..\stru314.h" /> <ClInclude Include="..\..\stru367.h" />
--- a/Build/Visual Studio 2012/World of Might and Magic.vcxproj Thu Jul 10 01:34:57 2014 +0200 +++ b/Build/Visual Studio 2012/World of Might and Magic.vcxproj Thu Jul 10 01:37:41 2014 +0200 @@ -468,7 +468,7 @@ <ClInclude Include="..\..\stru123.h" /> <ClInclude Include="..\..\stru159.h" /> <ClInclude Include="..\..\stru160.h" /> - <ClInclude Include="..\..\stru176.h" /> + <ClInclude Include="..\..\MapsLongTimer.h" /> <ClInclude Include="..\..\stru298.h" /> <ClInclude Include="..\..\stru314.h" /> <ClInclude Include="..\..\stru367.h" />
--- a/Build/Visual Studio 2012/World of Might and Magic.vcxproj.filters Thu Jul 10 01:34:57 2014 +0200 +++ b/Build/Visual Studio 2012/World of Might and Magic.vcxproj.filters Thu Jul 10 01:37:41 2014 +0200 @@ -460,7 +460,6 @@ <ClInclude Include="..\..\stru123.h" /> <ClInclude Include="..\..\stru159.h" /> <ClInclude Include="..\..\stru160.h" /> - <ClInclude Include="..\..\stru176.h" /> <ClInclude Include="..\..\stru298.h" /> <ClInclude Include="..\..\stru314.h" /> <ClInclude Include="..\..\stru367.h" /> @@ -968,6 +967,7 @@ <ClInclude Include="..\..\UI\UIArena.h"> <Filter>UI</Filter> </ClInclude> + <ClInclude Include="..\..\MapsLongTimer.h" /> </ItemGroup> <ItemGroup> <None Include="..\..\Player.swig" />
--- a/Events.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Events.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -16,7 +16,7 @@ #include "GUIProgressBar.h" #include "SpriteObject.h" #include "Chest.h" -#include "stru176.h" +#include "MapsLongTimer.h" #include "LOD.h" #include "Actor.h" #include "Party.h" @@ -143,11 +143,11 @@ if (!uLevelEVT_Size) return; - memset(array_5B5928_timers, 0, 3200); + memset(MapsLongTimersList, 0, 3200); memset(pLevelEVT_Index.data(), 80, sizeof(EventIndex)*4400); uLevelEVT_NumEvents = 0; - dword_5B65C8_timers_count = 0; + MapsLongTimers_count = 0; current_hdr=(raw_event_header *)pLevelEVT.data(); offset_in=0;
--- a/GUIWindow.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/GUIWindow.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -1870,8 +1870,8 @@ if ( ptr_507BD0->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) { ptr_507BD0->DrawMessageBox(0); - ptr_507BD0->DrawText(pFontCreate, 30, 40, v27, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0); - v31 = pFontCreate->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer); + ptr_507BD0->DrawText(pFontCreate, 30, 40, v27, pKeyActionMap->pPressedKeysBuffer, 0, 0, 0); + v31 = pFontCreate->GetLineWidth(pKeyActionMap->pPressedKeysBuffer); ptr_507BD0->DrawFlashingInputCursor(v31 + 30, 40, pFontCreate); continue; } @@ -1897,7 +1897,7 @@ { pWindow->DrawMessageBox(0); pWindow->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0); - pWindow->DrawText(pFontLucida, 10, 40, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0); + pWindow->DrawText(pFontLucida, 10, 40, 0, pKeyActionMap->pPressedKeysBuffer, 0, 0, 0); if ( !pKeyActionMap->field_204 ) { ItemGen2.Reset(); @@ -1905,7 +1905,7 @@ pEventTimer->Resume(); pCurrentScreen = 0; viewparams->bRedrawGameUI = true; - v26 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer); + v26 = atoi(pKeyActionMap->pPressedKeysBuffer); if ( v26 > 0 ) { if ( v26 < 800 ) @@ -2088,7 +2088,7 @@ { pWindow->DrawMessageBox(0); pWindow->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0); - pWindow->DrawText(pFontLucida, 10, 40, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0); + pWindow->DrawText(pFontLucida, 10, 40, 0, pKeyActionMap->pPressedKeysBuffer, 0, 0, 0); if ( !pKeyActionMap->field_204 ) { ItemGen2.Reset(); @@ -2096,7 +2096,7 @@ pEventTimer->Resume(); pCurrentScreen = SCREEN_GAME; viewparams->bRedrawGameUI = 1; - v39 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer); + v39 = atoi(pKeyActionMap->pPressedKeysBuffer); if ( v39 > 0 ) { if ( v39 < 800 )
--- a/Game.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Game.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -96,7 +96,7 @@ pIndoorCameraD3D->CreateWorldMatrixAndSomeStuff(); pIndoorCameraD3D->_4374E8_ProllyBuildFrustrum(); - if ( pMovie ) + if ( pMovie_Track ) { /*if ( !pRenderer->pRenderD3D ) { @@ -166,7 +166,7 @@ GameUI_Footer_2(); viewparams->bRedrawGameUI = false; } - if (!pMovie)//!pVideoPlayer->pSmackerMovie) + if (!pMovie_Track)//!pVideoPlayer->pSmackerMovie) { GameUI_DrawMinimap(488, 16, 625, 133, viewparams->uMinimapZoom, true);//redraw = pParty->uFlags & 2); if (v4) @@ -190,7 +190,7 @@ GameUI_DrawCharacterSelectionFrame(); if ( _44100D_should_alter_right_panel() ) GameUI_DrawRightPanel(); - if ( !pMovie ) + if ( !pMovie_Track ) { pStru6Instance->DrawPlayerBuffAnims(); pOtherOverlayList->DrawTurnBasedIcon(v4); @@ -425,7 +425,7 @@ pNPCStats->pNewNPCData[i].uFlags &= 0xFFFFFF7Fu; } pVideoPlayer->PlayDeathMovie(); - if ( pMovie ) + if ( pMovie_Track ) pVideoPlayer->Unload(); SaveGame(0, 0); ++pParty->uNumDeaths; @@ -1513,9 +1513,9 @@ else { pKeyActionMap->EnterText(0, 19, pGUIWindow_CurrentMenu); - 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); + if ( strcmp(pSavegameHeader[uLoadGameUI_SelectedSlot].pName, pGlobalTXT_LocalizationStrings[72]) )// "Empty" + strcpy(pKeyActionMap->pPressedKeysBuffer, pSavegameHeader[uLoadGameUI_SelectedSlot].pName); + pKeyActionMap->uNumKeysPressed = strlen(pKeyActionMap->pPressedKeysBuffer); } continue; case UIMSG_LoadGame: @@ -1530,7 +1530,7 @@ if ( pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) { pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE); - strcpy((char *)&pSavegameHeader[uLoadGameUI_SelectedSlot], (const char *)pKeyActionMap->pPressedKeysBuffer); + strcpy((char *)&pSavegameHeader[uLoadGameUI_SelectedSlot], pKeyActionMap->pPressedKeysBuffer); } DoSavegame(uLoadGameUI_SelectedSlot); stru_506E40.Release(); @@ -3068,7 +3068,7 @@ continue; for ( thisg = 0; thisg < (signed int)pGames_LOD->uNumSubDirs / 2; ++thisg ) { - if ( !_stricmp((const char *)pGames_LOD->pSubIndices[thisg].pFilename, pCurrentMapName) ) + if ( !_stricmp(pGames_LOD->pSubIndices[thisg].pFilename, pCurrentMapName) ) pPlayer9->pInstalledBeacons[uMessageParam].SaveFileID = thisg; } } @@ -3269,7 +3269,7 @@ case UIMSG_DD: __debugbreak(); sprintf(pTmpBuf.data(), "%s", pKeyActionMap->pPressedKeysBuffer); - memcpy(&v216, txt_file_frametable_parser((const char *)pKeyActionMap->pPressedKeysBuffer, &v218), sizeof(v216)); + memcpy(&v216, txt_file_frametable_parser(pKeyActionMap->pPressedKeysBuffer, &v218), sizeof(v216)); if ( v216.uPropCount == 1 ) { pNPCData4 = (NPCData *)((signed int)pGames_LOD->uNumSubDirs / 2); @@ -3284,7 +3284,7 @@ thish = 0; do { - if ( !_stricmp((const char *)&pGames_LOD->pSubIndices[thish], Str2) ) + if ( !_stricmp(pGames_LOD->pSubIndices[thish].pFilename, Str2) ) break; ++thish; pNPCData3 = (NPCData *)((char *)pNPCData3 + 1); @@ -3292,7 +3292,7 @@ while ( (signed int)pNPCData3 < (signed int)pNPCData4 ); if ( (signed int)pNPCData3 < (signed int)pNPCData4 ) { - strcpy(pCurrentMapName, (const char *)&pGames_LOD->pSubIndices[(int)pNPCData3]); + strcpy(pCurrentMapName, pGames_LOD->pSubIndices[(int)pNPCData3].pFilename); dword_6BE364_game_settings_1 |= GAME_SETTINGS_0001; uGameState = GAME_STATE_CHANGE_LOCATION; OnMapLeave(); @@ -4431,8 +4431,8 @@ { //typing in the line pKeyActionMap->EnterText(0, 19, pGUIWindow_CurrentMenu); - strcpy((char *)pKeyActionMap->pPressedKeysBuffer, pSavegameHeader[uLoadGameUI_SelectedSlot].pName); - pKeyActionMap->uNumKeysPressed = strlen((const char *)pKeyActionMap->pPressedKeysBuffer); + strcpy(pKeyActionMap->pPressedKeysBuffer, pSavegameHeader[uLoadGameUI_SelectedSlot].pName); + pKeyActionMap->uNumKeysPressed = strlen(pKeyActionMap->pPressedKeysBuffer); } break; case UIMSG_SaveLoadBtn:
--- a/Indoor.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Indoor.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -960,7 +960,7 @@ // BLVFaceExtra *v160; // ecx@149 //BLVFaceExtra *v161; // ecx@149 //signed int v162; // ebx@154 - //unsigned int v163; // ebx@157 + //unsigned int outz; // ebx@157 //unsigned int v164; // ebx@157 //unsigned int v165; // edx@158 //char *v166; // ecx@158 @@ -3817,7 +3817,7 @@ { for (uint i = 0; i < pSector->uNumNonBSPFaces; ++i) //Log::Warning(L"Non-BSP face: %X", v3->pFaceIDs[v2]); - pBspRenderer->AddFaceToRenderList_d3d(node_id, pSector->pFaceIDs[i]); + pBspRenderer->AddFaceToRenderList_d3d(node_id, pSector->pFaceIDs[i]);//рекурсия\recursion } /*else { @@ -4139,122 +4139,56 @@ this->viewing_angle_from_north_south, this->field_8_party_dir_z); } //----- (00407A1C) -------------------------------------------------------- -bool __fastcall sub_407A1C(int x, int z, int y, Vec3_int_ v) +bool __fastcall sub_407A1C(int x, int y, int z, Vec3_int_ v) { unsigned int v4; // esi@1 - Vec3_int_ v5; // ST08_12@2 - int v6; // edi@2 - int v7; // ebx@2 - int v8; // esi@2 + int dist_y; // edi@2 + int dist_z; // ebx@2 + int dist_x; // esi@2 signed int v9; // ecx@2 int v10; // eax@2 - int v11; // ecx@4 int v12; // eax@4 - int v13; // ebx@4 - int v14; // edx@6 -// char *v15; // edi@16 -// ODMFace *v16; // esi@19 int v17; // ST34_4@25 int v18; // ST38_4@25 int v19; // eax@25 char v20; // zf@25 - int v21; // ebx@25 -// int v22; // eax@26 + signed int v21; // ebx@25 signed int v23; // edi@26 int v24; // ST34_4@30 - //signed __int64 v25; // qtt@31 - //int v26; // eax@31 - Vec3_int_ v27; // ST08_12@37 - Vec3_int_ v28; // ST08_12@37 - int v29; // edi@37 - int v30; // ebx@37 - int v31; // esi@37 signed int v32; // ecx@37 int v33; // eax@37 - int v34; // ecx@39 int v35; // eax@39 - int v36; // ebx@39 - int v37; // edx@41 - //char *v38; // edi@51 ODMFace *odm_face; // esi@54 - int v40; // ebx@60 -// int v41; // eax@61 + signed int v40; // ebx@60 signed int v42; // edi@61 - //signed __int64 v43; // qtt@66 - //int v44; // eax@66 - Vec3_int_ v45; // ST08_12@73 - int v46; // edi@73 - int v47; // ebx@73 - int v48; // esi@73 signed int v49; // ecx@73 int v50; // eax@73 int v51; // edx@75 int v52; // ecx@75 int v53; // eax@75 - int v54; // ebx@75 - int v55; // edi@77 - int v56; // ecx@77 - int v57; // eax@81 - int v58; // esi@81 int v59; // eax@90 - //BLVSector *v60; // edx@90 -// int v61; // ecx@90 BLVFace *face; // esi@91 int v63; // ST34_4@98 int v64; // ST30_4@98 int v65; // eax@98 - int v66; // ebx@98 -// int v67; // eax@99 + signed int v66; // ebx@98 signed int v68; // edi@99 int v69; // ST2C_4@103 - //signed __int64 v70; // qtt@104 - //int v71; // eax@104 - Vec3_int_ v72; // ST08_12@111 - Vec3_int_ v73; // ST08_12@111 - int v74; // edi@111 - int v75; // ebx@111 - int v76; // esi@111 signed int v77; // ecx@111 int v78; // eax@111 int v79; // edx@113 int v80; // ecx@113 int v81; // eax@113 - int v82; // ebx@113 - int v83; // edi@115 - int v84; // ecx@115 - int v85; // eax@119 - int v86; // esi@119 int v87; // ecx@128 -// BLVSector *v88; // eax@128 -// int v89; // ecx@128 - //BLVFace *v90; // esi@129 - int v91; // ebx@136 -// int v92; // eax@137 + signed int v91; // ebx@136 signed int v93; // edi@137 - //signed __int64 v94; // qtt@142 - //int v95; // eax@142 Vec3_int_ v97; // [sp-18h] [bp-94h]@1 - int v98; // [sp-Ch] [bp-88h]@88 - int v99; // [sp-Ch] [bp-88h]@126 - int v100; // [sp-8h] [bp-84h]@88 - int v101; // [sp-8h] [bp-84h]@126 - int v102; // [sp-4h] [bp-80h]@88 - int v103; // [sp-4h] [bp-80h]@126 - //int v104; // [sp+Ch] [bp-70h]@13 - //int v105; // [sp+Ch] [bp-70h]@48 -// int v106; // [sp+10h] [bp-6Ch]@18 int v107; // [sp+10h] [bp-6Ch]@98 int v108; // [sp+10h] [bp-6Ch]@104 int v109; // [sp+18h] [bp-64h]@25 int v110; // [sp+18h] [bp-64h]@31 -// int i; // [sp+18h] [bp-64h]@90 -// int v112; // [sp+18h] [bp-64h]@128 signed int v113; // [sp+20h] [bp-5Ch]@1 signed int v114; // [sp+24h] [bp-58h]@1 - //unsigned __int64 a4; // [sp+28h] [bp-54h]@1 - unsigned int a4_8; // [sp+30h] [bp-4Ch]@1 - int v117; // [sp+34h] [bp-48h]@4 - int v118; // [sp+34h] [bp-48h]@39 int v119; // [sp+34h] [bp-48h]@75 int v120; // [sp+34h] [bp-48h]@113 int v121; // [sp+38h] [bp-44h]@4 @@ -4283,27 +4217,19 @@ int v144; // [sp+4Ch] [bp-30h]@113 int v145; // [sp+50h] [bp-2Ch]@5 int v146; // [sp+50h] [bp-2Ch]@40 - int v147; // [sp+50h] [bp-2Ch]@75 - int v148; // [sp+50h] [bp-2Ch]@113 int v149; // [sp+54h] [bp-28h]@4 int v150; // [sp+54h] [bp-28h]@39 - int v151; // [sp+54h] [bp-28h]@75 - int v152; // [sp+54h] [bp-28h]@113 -// int sDepth; // [sp+58h] [bp-24h]@17 -// int sDeptha; // [sp+58h] [bp-24h]@52 int sDepthb; // [sp+58h] [bp-24h]@90 -// char *a5; // [sp+5Ch] [bp-20h]@16 - //char *a5a; // [sp+5Ch] [bp-20h]@51 signed int a5b; // [sp+5Ch] [bp-20h]@83 signed int a5c; // [sp+5Ch] [bp-20h]@121 - //signed int v160; // [sp+60h] [bp-1Ch]@12 - //signed int v161; // [sp+60h] [bp-1Ch]@47 int v162; // [sp+60h] [bp-1Ch]@128 - int v163; // [sp+64h] [bp-18h]@2 + int outz; // [sp+64h] [bp-18h]@2 int outx; // [sp+68h] [bp-14h]@2 int outy; // [sp+6Ch] [bp-10h]@2 - int outz; // [sp+70h] [bp-Ch]@2 - Vec3_int_ pOut; // [sp+74h] [bp-8h]@2 + int sZ; // [sp+70h] [bp-Ch]@2 + int sX; // [sp+74h] [bp-8h]@2 + int sY; // [sp+78h] [bp-4h]@2 + //8bytes unused int ya; // [sp+84h] [bp+8h]@60 int yb; // [sp+84h] [bp+8h]@136 int ve; // [sp+88h] [bp+Ch]@60 @@ -4320,79 +4246,50 @@ //__debugbreak();срабатывает при стрельбе огненным шаром - v4 = stru_5C6E00->Atan2(v.x - x, v.y - z); + v4 = stru_5C6E00->Atan2(v.x - x, v.y - y); + + v113 = 0; v114 = 0; - v97.z = y; + + v97.z = z; v97.x = x; - v97.y = z; - v113 = 0; - a4_8 = stru_5C6E00->Atan2(v.x - x, v.y - z); + v97.y = y; + if ( uCurrentlyLoadedLevelType == LEVEL_Indoor) { - Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v97, &pOut.x, &pOut.y, &outz); - v45.z = v.z; - v45.x = v.x; - v45.y = v.y; - Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v45, &outx, &outy, &v163); - v46 = outy - pOut.y; - v47 = v163 - outz; - v48 = outx - pOut.x; - v49 = integer_sqrt(v48 * v48 + v46 * v46 + v47 * v47); + Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v97, &sX, &sY, &sZ); + Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v, &outx, &outy, &outz); + dist_y = outy - sY; + dist_z = outz - sZ; + dist_x = outx - sX; + v49 = integer_sqrt(dist_x * dist_x + dist_y * dist_y + dist_z * dist_z); v50 = 65536; if ( v49 ) v50 = 65536 / v49; v51 = outx; - v143 = v48 * v50; - v52 = v46 * v50; - v53 = v47 * v50; - v54 = pOut.x; - v147 = v52; - v151 = v53; - v119 = pOut.x; - if ( pOut.x < outx ) - v123 = outx; - else - { - v119 = outx; - v123 = pOut.x; - } - v55 = pOut.y; - v56 = outy; - v127 = pOut.y; - if ( pOut.y < outy ) - v131 = outy; - else - { - v127 = outy; - v131 = pOut.y; - } - v57 = v163; - v58 = outz; - v135 = outz; - if ( outz < v163 ) - v139 = v163; - else - { - v135 = v163; - v139 = outz; - } - - //while ( !v114 ) + v143 = dist_x * v50; + v52 = dist_y * v50; + v53 = dist_z * v50; + + v123 = max(outx, sX); + v119 = min(outx, sX); + + v131 = max(outy, sY); + v127 = min(outy, sY); + + v139 = max(outz, sZ); + v135 = min(outz, sZ); + for ( a5b = 0; a5b < 2; a5b++ ) { if ( a5b ) { - v102 = outz; - v100 = pOut.y; - v98 = pOut.x; + v59 = pIndoor->GetSector(sX, sY, sZ); } else { - v102 = v163; - v100 = outy; - v98 = outx; + v59 = pIndoor->GetSector(outx, outy, outz); } - v59 = pIndoor->GetSector(v98, v100, v102); //v60 = pIndoor->pSectors; //v61 = 116 * v59; //i = 116 * v59; @@ -4402,37 +4299,37 @@ { face = &pIndoor->pFaces[pIndoor->pSectors[v59].pFaceIDs[sDepthb]];// face = &pIndoor->pFaces[*(__int16 *)((char *)&pIndoor->pSectors->pWalls + v61)[sDepthb]] v63 = fixpoint_mul(v143, face->pFacePlane_old.vNormal.x); - v64 = fixpoint_mul(v151, face->pFacePlane_old.vNormal.z); - v65 = fixpoint_mul(v147, face->pFacePlane_old.vNormal.y); - v20 = v63 + v64 + v65; + v64 = fixpoint_mul(v53, face->pFacePlane_old.vNormal.z); + v65 = fixpoint_mul(v52, face->pFacePlane_old.vNormal.y); + v20 = v63 + v64 + v65 == 0; v66 = v63 + v64 + v65; v107 = v63 + v64 + v65; if ( face->Portal() || v119 > face->pBounding.x2 || v123 < face->pBounding.x1 || v127 > face->pBounding.y2 || v131 < face->pBounding.y1 || v135 > face->pBounding.z2 || v139 < face->pBounding.z1 - || !v20 ) + || v20 ) continue; - v68 = -(face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z); + v68 = -(face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z); if ( v66 <= 0 ) { - if ( face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z < 0 ) + if ( face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z < 0 ) continue; } else { - if ( face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z > 0 ) + if ( face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z > 0 ) continue; } - v69 = abs(-(face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z )) >> 14; + v69 = abs(-(face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z )) >> 14; if ( v69 <= abs(v66) ) { //LODWORD(v70) = v68 << 16; @@ -4442,9 +4339,9 @@ v108 = fixpoint_div(v68, v107); if ( v108 >= 0 ) { - if ( sub_4075DB(pOut.x + ((signed int)(fixpoint_mul(v108, v143) + 0x8000) >> 16), - pOut.y + ((signed int)(fixpoint_mul(v108, v147) + 0x8000) >> 16), - outz + ((signed int)(fixpoint_mul(v108, v151) + 0x8000) >> 16), + if ( sub_4075DB(sX + ((signed int)(fixpoint_mul(v108, v143) + 0x8000) >> 16), + sY + ((signed int)(fixpoint_mul(v108, v52) + 0x8000) >> 16), + sZ + ((signed int)(fixpoint_mul(v108, v53) + 0x8000) >> 16), face) ) { v114 = 1; @@ -4454,130 +4351,85 @@ } } } - v72.z = y; - v72.x = x; - v72.y = z; - Vec3_int_::Rotate(32, a4_8 - stru_5C6E00->uIntegerHalfPi, 0, v72, &pOut.x, &pOut.y, &outz); - v73.z = v.z; - v73.x = v.x; - v73.y = v.y; - Vec3_int_::Rotate(32, a4_8 - stru_5C6E00->uIntegerHalfPi, 0, v73, &outx, &outy, &v163); - v74 = outy - pOut.y; - v75 = v163 - outz; - v76 = outx - pOut.x; - v77 = integer_sqrt(v76 * v76 + v74 * v74 + v75 * v75); + + Vec3_int_::Rotate(32, v4 - stru_5C6E00->uIntegerHalfPi, 0, v97, &sX, &sY, &sZ); + Vec3_int_::Rotate(32, v4 - stru_5C6E00->uIntegerHalfPi, 0, v, &outx, &outy, &outz); + dist_y = outy - sY; + dist_z = outz - sZ; + dist_x = outx - sX; + v77 = integer_sqrt(dist_x * dist_x + dist_y * dist_y + dist_z * dist_z); v78 = 65536; if ( v77 ) v78 = 65536 / v77; v79 = outx; - v144 = v76 * v78; - v80 = v74 * v78; - v81 = v75 * v78; - v82 = pOut.x; - v148 = v80; - v152 = v81; - v120 = pOut.x; - if ( pOut.x < outx ) - v124 = outx; - else - { - v120 = outx; - v124 = pOut.x; - } - v83 = pOut.y; - v84 = outy; - v128 = pOut.y; - if ( pOut.y < outy ) - v132 = outy; - else - { - v128 = outy; - v132 = pOut.y; - } - v85 = v163; - v86 = outz; - v136 = outz; - if ( outz < v163 ) - v140 = v163; - else - { - v136 = v163; - v140 = outz; - } - //while ( 1 ) + v144 = dist_x * v78; + v80 = dist_y * v78; + v81 = dist_z * v78; + + v120 = max(outx, sX); + v124 = min(outx, sX); + + v132 = max(outy, sY); + v128 = min(outy, sY); + + v140 = max(outz, sZ); + v136 = min(outz, sZ); + for ( a5c = 0; a5c < 2; a5c++ ) { if ( v113 ) return !v114 || !v113; if ( a5c ) { - v103 = outz; - v101 = pOut.y; - v99 = pOut.x; + v87 = pIndoor->GetSector(sX, sY, sZ); } else { - v103 = v163; - v101 = outy; - v99 = outx; + v87 = pIndoor->GetSector(outx, outy, outz); } - v87 = pIndoor->GetSector(v99, v101, v103); - //v88 = pIndoor->pSectors; - //v89 = 116 * v87; - - //v112 = v89; - //if ( *(__int16 *)((char *)&pIndoor->pSectors->uNumWalls + v89) - //+ 2 * *(__int16 *)((char *)&pIndoor->pSectors->uNumFloors + v89) > 0 ) - //{ - //while ( 1 ) for ( v162 = 0; v162 < pIndoor->pSectors[v87].uNumFaces; v162++) { face = &pIndoor->pFaces[pIndoor->pSectors[v87].pFaceIDs[v162]]; yb = fixpoint_mul(v144, face->pFacePlane_old.vNormal.x); - v_4b = fixpoint_mul(v148, face->pFacePlane_old.vNormal.y); - vf = fixpoint_mul(v152, face->pFacePlane_old.vNormal.z); - v20 = yb + vf + v_4b; + v_4b = fixpoint_mul(v80, face->pFacePlane_old.vNormal.y); + vf = fixpoint_mul(v81, face->pFacePlane_old.vNormal.z); + v20 = yb + vf + v_4b == 0; v91 = yb + vf + v_4b; vc = yb + vf + v_4b; if ( face->Portal() || v120 > face->pBounding.x2 || v124 < face->pBounding.x1 || v128 > face->pBounding.y2 || v132 < face->pBounding.y1 || v136 > face->pBounding.z2 || v140 < face->pBounding.z1 - || !v20 ) + || v20 ) continue; - //v92 = outz * face->pFacePlane_old.vNormal.z; - v93 = -(face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z); + v93 = -(face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z); if ( v91 <= 0 ) { - if ( face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z < 0 ) + if ( face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z < 0 ) continue; } else { - if ( face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z > 0 ) + if ( face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z > 0 ) continue; } - v_4c = abs(-(face->pFacePlane_old.dist + pOut.x * face->pFacePlane_old.vNormal.x - + pOut.y * face->pFacePlane_old.vNormal.y - + outz * face->pFacePlane_old.vNormal.z)) >> 14; + v_4c = abs(-(face->pFacePlane_old.dist + sX * face->pFacePlane_old.vNormal.x + + sY * face->pFacePlane_old.vNormal.y + + sZ * face->pFacePlane_old.vNormal.z)) >> 14; if ( v_4c <= abs(v91) ) { - //LODWORD(v94) = v93 << 16; - //HIDWORD(v94) = v93 >> 16; - //v95 = v94 / vc; - //vd = v94 / vc; vd = fixpoint_div(v93, vc); if ( vd >= 0 ) { - if ( sub_4075DB(pOut.x + ((signed int)(fixpoint_mul(vd, v144) + 0x8000) >> 16), - pOut.y + ((signed int)(fixpoint_mul(vd, v148) + 0x8000) >> 16), - outz + ((signed int)(fixpoint_mul(vd, v152) + 0x8000) >> 16), + if ( sub_4075DB(sX + ((signed int)(fixpoint_mul(vd, v144) + 0x8000) >> 16), + sY + ((signed int)(fixpoint_mul(vd, v80) + 0x8000) >> 16), + sZ + ((signed int)(fixpoint_mul(vd, v81) + 0x8000) >> 16), face) ) { v113 = 1; @@ -4590,52 +4442,31 @@ } else if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) { - Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v97, &pOut.x, &pOut.y, &outz); - v5.z = v.z; - v5.x = v.x; - v5.y = v.y; - Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v5, &outx, &outy, &v163); - v6 = outy - pOut.y; - v7 = v163 - outz; - v8 = outx - pOut.x; - v9 = integer_sqrt(v8 * v8 + v6 * v6 + v7 * v7); + Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v97, &sX, &sY, &sZ); + Vec3_int_::Rotate(32, stru_5C6E00->uIntegerHalfPi + v4, 0, v, &outx, &outy, &outz); + dist_y = outy - sY; + dist_z = outz - sZ; + dist_x = outx - sX; + v9 = integer_sqrt(dist_x* dist_x+ dist_y* dist_y+ dist_z* dist_z); v10 = 65536; if ( v9 ) v10 = 65536 / v9; - v125 = v8 * v10; - v11 = v10; - v12 = v7 * v10; - v13 = pOut.x; - v117 = v12; - v121 = v6 * v11; - v149 = pOut.x; - if ( pOut.x < outx ) - v145 = outx; - else + v125 = dist_x* v10; + v12 = dist_z* v10; + v121 = dist_y* v10; + + v145 = max(outx, sX); + v149 = min(outx, sX); + + v137 = max(outy, sY); + v141 = min(outy, sY); + + v129 = max(outz, sZ); + v133 = min(outz, sZ); + + for ( uint model_id = 0; model_id < pOutdoor->uNumBModels; model_id++) { - v149 = outx; - v145 = pOut.x; - } - v14 = outy; - v141 = pOut.y; - if ( pOut.y < outy ) - v137 = outy; - else - { - v141 = outy; - v137 = pOut.y; - } - v133 = outz; - if ( outz < v163 ) - v129 = v163; - else - { - v133 = v163; - v129 = outz; - } - for ( uint model_id = 0; model_id < pOutdoor->uNumBModels; model_id++) - { - if ( sub_4088E9(pOut.x, pOut.y, outx, outy, pOutdoor->pBModels[model_id].vPosition.x, pOutdoor->pBModels[model_id].vPosition.y) + if ( sub_4088E9(sX, sY, outx, outy, pOutdoor->pBModels[model_id].vPosition.x, pOutdoor->pBModels[model_id].vPosition.y) <= pOutdoor->pBModels[model_id].sBoundingRadius + 128 ) { for ( uint face_id = 0; face_id < pOutdoor->pBModels[model_id].uNumFaces; ++face_id ) @@ -4643,47 +4474,43 @@ odm_face = &pOutdoor->pBModels[model_id].pFaces[face_id]; v17 = fixpoint_mul(v125, odm_face->pFacePlane.vNormal.x); v18 = fixpoint_mul(v121, odm_face->pFacePlane.vNormal.y); - v19 = fixpoint_mul(v117, odm_face->pFacePlane.vNormal.z); - v20 = v17 + v18 + v19; + v19 = fixpoint_mul(v12, odm_face->pFacePlane.vNormal.z); + v20 = v17 + v18 + v19 == 0; v21 = v17 + v18 + v19; v109 = v17 + v18 + v19; if ( v149 > odm_face->pBoundingBox.x2 || v145 < odm_face->pBoundingBox.x1 || v141 > odm_face->pBoundingBox.y2 || v137 < odm_face->pBoundingBox.y1 || v133 > odm_face->pBoundingBox.z2 || v129 < odm_face->pBoundingBox.z1 - || !v20 ) + || v20 ) continue; - v23 = -(odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z); + v23 = -(odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z); if ( v21 <= 0 ) { - if ( odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z < 0 ) + if ( odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z < 0 ) continue; } else { - if ( odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z > 0 ) + if ( odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z > 0 ) continue; } - v24 = abs(-(odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z)) >> 14; + v24 = abs(-(odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z)) >> 14; if ( v24 <= abs(v21) ) { - //LODWORD(v25) = v23 << 16; - //HIDWORD(v25) = v23 >> 16; - //v26 = v25 / v109; - //v110 = v25 / v109; v110 = fixpoint_div(v23, v109); if ( v110 >= 0 ) { - if ( sub_4077F1(pOut.x + ((signed int)(fixpoint_mul(v110, v125) + 0x8000) >> 16), - pOut.y + ((signed int)(fixpoint_mul(v110, v121) + 0x8000) >> 16), - outz + ((signed int)(fixpoint_mul(v110, v117) + 0x8000) >> 16), + if ( sub_4077F1(sX + ((signed int)(fixpoint_mul(v110, v125) + 0x8000) >> 16), + sY + ((signed int)(fixpoint_mul(v110, v121) + 0x8000) >> 16), + sZ + ((signed int)(fixpoint_mul(v110, v12) + 0x8000) >> 16), odm_face, &pOutdoor->pBModels[model_id].pVertices) ) { @@ -4695,56 +4522,32 @@ } } } - v27.z = y; - v27.x = x; - v27.y = z; - Vec3_int_::Rotate(32, a4_8 - stru_5C6E00->uIntegerHalfPi, 0, v27, &pOut.x, &pOut.y, &outz); - v28.z = v.z; - v28.x = v.x; - v28.y = v.y; - Vec3_int_::Rotate(32, a4_8 - stru_5C6E00->uIntegerHalfPi, 0, v28, &outx, &outy, &v163); - v29 = outy - pOut.y; - v30 = v163 - outz; - v31 = outx - pOut.x; - v32 = integer_sqrt(v31 * v31 + v29 * v29 + v30 * v30); + + Vec3_int_::Rotate(32, v4 - stru_5C6E00->uIntegerHalfPi, 0, v97, &sX, &sY, &sZ); + Vec3_int_::Rotate(32, v4 - stru_5C6E00->uIntegerHalfPi, 0, v, &outx, &outy, &outz); + dist_y = outy - sY; + dist_z = outz - sZ; + dist_x = outx - sX; + v32 = integer_sqrt(dist_x * dist_x + dist_y * dist_y + dist_z * dist_z); v33 = 65536; if ( v32 ) v33 = 65536 / v32; - v126 = v31 * v33; - v34 = v33; - v35 = v30 * v33; - v36 = pOut.x; - v118 = v35; - v122 = v29 * v34; - v150 = pOut.x; - if ( pOut.x < outx ) - v146 = outx; - else - { - v150 = outx; - v146 = pOut.x; - } - v37 = outy; - v142 = pOut.y; - if ( pOut.y < outy ) - v138 = outy; - else - { - v142 = outy; - v138 = pOut.y; - } - v134 = outz; - if ( outz < v163 ) - v130 = v163; - else - { - v134 = v163; - v130 = outz; - } + v126 = dist_x * v33; + v35 = dist_z * v33; + v122 = dist_y * v33; + + v146 = max(outx, sX); + v150 = min(outx, sX); + + v138 = max(outy, sY); + v142 = min(outy, sY); + + v130 = max(outz, sZ); + v134 = min(outz, sZ); for ( uint model_id = 0; model_id < (signed int)pOutdoor->uNumBModels; ++model_id ) { - if ( sub_4088E9(pOut.x, pOut.y, outx, outy, pOutdoor->pBModels[model_id].vPosition.x, pOutdoor->pBModels[model_id].vPosition.y) + if ( sub_4088E9(sX, sY, outx, outy, pOutdoor->pBModels[model_id].vPosition.x, pOutdoor->pBModels[model_id].vPosition.y) <= pOutdoor->pBModels[model_id].sBoundingRadius + 128 ) { for ( uint face_id = 0; face_id < pOutdoor->pBModels[model_id].uNumFaces; ++face_id ) @@ -4752,35 +4555,35 @@ odm_face = &pOutdoor->pBModels[model_id].pFaces[face_id]; ya = fixpoint_mul(v126, odm_face->pFacePlane.vNormal.x); ve = fixpoint_mul(v122, odm_face->pFacePlane.vNormal.y); - v_4 = fixpoint_mul(v118, odm_face->pFacePlane.vNormal.z); - v20 = ya + ve + v_4; + v_4 = fixpoint_mul(v35, odm_face->pFacePlane.vNormal.z); + v20 = ya + ve + v_4 == 0; v40 = ya + ve + v_4; va = ya + ve + v_4; if ( v150 > odm_face->pBoundingBox.x2 || v146 < odm_face->pBoundingBox.x1 || v142 > odm_face->pBoundingBox.y2 || v138 < odm_face->pBoundingBox.y1 || v134 > odm_face->pBoundingBox.z2 || v130 < odm_face->pBoundingBox.z1 - || !v20 ) + || v20 ) continue; - v42 = -(odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z); + v42 = -(odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z); if ( v40 <= 0 ) { - if ( odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z < 0 ) + if ( odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z < 0 ) continue; } else { - if ( odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z > 0 ) + if ( odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z > 0 ) continue; } - v_4a = abs(-(odm_face->pFacePlane.dist + pOut.x * odm_face->pFacePlane.vNormal.x - + pOut.y * odm_face->pFacePlane.vNormal.y - + outz * odm_face->pFacePlane.vNormal.z )) >> 14; + v_4a = abs(-(odm_face->pFacePlane.dist + sX * odm_face->pFacePlane.vNormal.x + + sY * odm_face->pFacePlane.vNormal.y + + sZ * odm_face->pFacePlane.vNormal.z )) >> 14; if ( v_4a <= abs(v40) ) { //LODWORD(v43) = v42 << 16; @@ -4789,9 +4592,9 @@ vb = fixpoint_div(v42, va); if ( vb >= 0 ) { - if ( sub_4077F1(pOut.x + ((signed int)(fixpoint_mul(vb, v126) + 0x8000) >> 16), - pOut.y + ((signed int)(fixpoint_mul(vb, v122) + 0x8000) >> 16), - outz + ((signed int)(fixpoint_mul(vb, v118) + 0x8000) >> 16), + if ( sub_4077F1(sX + ((signed int)(fixpoint_mul(vb, v126) + 0x8000) >> 16), + sY + ((signed int)(fixpoint_mul(vb, v122) + 0x8000) >> 16), + sZ + ((signed int)(fixpoint_mul(vb, v35) + 0x8000) >> 16), odm_face, &pOutdoor->pBModels[model_id].pVertices) ) { @@ -5791,6 +5594,7 @@ } int fall_start; + /* if (!pParty->FeatherFallActive())// не активно падение пера { bFeatherFall = false; @@ -5801,6 +5605,12 @@ { fall_start = pParty->uFallStartY; } + else// was missing + { + fall_start = floor_level; + bFeatherFall = true; + pParty->uFallStartY = floor_level; + } } else// активно падение пера { @@ -5809,6 +5619,23 @@ pParty->uFallStartY = floor_level; } + Reworked condition below + */ + if (pParty->FeatherFallActive() + || pParty->pPlayers[0].WearsItemAnyWhere(ITEM_ARTIFACT_LADYS_ESCORT) + || pParty->pPlayers[1].WearsItemAnyWhere(ITEM_ARTIFACT_LADYS_ESCORT) + || pParty->pPlayers[2].WearsItemAnyWhere(ITEM_ARTIFACT_LADYS_ESCORT) + || pParty->pPlayers[3].WearsItemAnyWhere(ITEM_ARTIFACT_LADYS_ESCORT)) + { + fall_start = floor_level; + bFeatherFall = true; + pParty->uFallStartY = floor_level; + } + else + { + bFeatherFall = false; + fall_start = pParty->uFallStartY; + } if (fall_start - party_z > 512 && !bFeatherFall && party_z <= floor_level + 1)//повреждение от падения с высоты {
--- a/Keyboard.h Thu Jul 10 01:34:57 2014 +0200 +++ b/Keyboard.h Thu Jul 10 01:37:41 2014 +0200 @@ -67,7 +67,7 @@ unsigned int pVirtualKeyCodesMapping[30]; KeyToggleType pToggleTypes[30]; int max_input_string_len; - unsigned __int8 pPressedKeysBuffer[257]; + __int8 pPressedKeysBuffer[257]; unsigned __int8 uNumKeysPressed; char field_202; char field_203;
--- a/LOD.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/LOD.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -1862,7 +1862,7 @@ v9 = v4; do { - result = _stricmp((const char *)pContainerName, (const char *)&v10->pSubIndices[v9]); + result = _stricmp(pContainerName, v10->pSubIndices[v9].pFilename); if ( !result ) goto LABEL_21; ++v7; @@ -1886,7 +1886,7 @@ v8 = v4; while ( 1 ) { - result = _stricmp((const char *)pContainerName, (const char *)&v10->pSubIndices[v8]); + result = _stricmp(pContainerName, v10->pSubIndices[v8].pFilename); if ( !result ) break; ++v7; @@ -1919,7 +1919,7 @@ } else { - while ( _stricmp((const char *)pContainer, (const char *)&this_dup->pSubIndices[i]) ) + while ( _stricmp(pContainer, this_dup->pSubIndices[i].pFilename) ) { ++i_dup; ++i;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MapsLongTimer.h Thu Jul 10 01:37:41 2014 +0200 @@ -0,0 +1,24 @@ +#pragma once + + +/* 169 */ +#pragma pack(push, 1) +struct MapsLongTimer +{ + __int64 NextStartTime; // timer will either fire event at this time (type 2, field_C == 0) + __int16 timer_evt_ID; + __int16 timer_evt_seq_num; + __int16 time_left_to_fire; + __int16 IntervalHalfMins; // or fire on these intervals (type 1) + __int16 YearsInterval; + __int16 MonthsInterval; + __int16 WeeksInterval; + __int16 HoursInterval; + __int16 MinutesInterval; + __int16 SecondsInterval; + __int16 timer_evt_type; + __int16 field_1E; +}; +#pragma pack(pop) +extern MapsLongTimer MapsLongTimersList[100]; +
--- a/MediaPlayer.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/MediaPlayer.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -20,12 +20,14 @@ #include "stuff.h" #include "OpenALSoundProvider.h" +#include "Log.h" + #include "MediaPlayer.h" using namespace Media; Media::MPlayer *pMediaPlayer; -Media::IMovie *pMovie; -Media::ITrack *pTrack; +Media::IMovie *pMovie_Track; +Media::ITrack *pAudio_Track; Movie *movie; int mSourceID; @@ -185,8 +187,9 @@ if (dec_ctx) { // Close the codec - // закрытие видео кодека + // закрытие кодека avcodec_close(dec_ctx); + Log::Warning(L"close decoder context file\n"); dec_ctx = nullptr; } } @@ -198,10 +201,9 @@ AVCodecContext *dec_ctx; }; -struct AVAudioStream: public AVStreamWrapper +struct AVAudioStream: public AVStreamWrapper//структура AVAudioStreem производная от структуры AVStreemWrapper { - inline AVAudioStream(): - AVStreamWrapper() + inline AVAudioStream():AVStreamWrapper() { this->bytes_per_sample = 0; this->bytes_per_second = 0; @@ -213,8 +215,7 @@ struct AVVideoStream: public AVStreamWrapper { - inline AVVideoStream(): - AVStreamWrapper() + inline AVVideoStream(): AVStreamWrapper() { this->frames_per_second = 0.0; } @@ -650,10 +651,10 @@ return true; } -class Track: public Media::ITrack +class Track: public Media::ITrack//класс производная от базового Media::ITrack { public: - inline Track() + inline Track()//прямая вставка в код { this->format_ctx = nullptr; this->audio_num_samples = 0; @@ -669,8 +670,9 @@ audio.Release(); if (format_ctx) { - // закрытия контекста файла + // закрытие контекста файла av_close_input_file(format_ctx); + Log::Warning(L"close audio format context file\n"); format_ctx = nullptr; } } @@ -755,10 +757,10 @@ OpenALSoundProvider::TrackBuffer *device_buffer; }; -class Movie: public Media::IMovie +class Movie: public Media::IMovie//класс производная от базового Media::IMovie { public: - inline Movie() + inline Movie()//прямая вставка в код { this->movie_filename[0] = 0; this->width = 0; @@ -775,9 +777,9 @@ memset(last_resampled_frame_linesize, 0, sizeof(last_resampled_frame_linesize)); decoding_packet = nullptr; - ioBuffer = nullptr; - format_ctx = nullptr; - avioContext = nullptr; + ioBuffer = nullptr; + format_ctx = nullptr; + avioContext = nullptr; } inline void Release() @@ -795,6 +797,7 @@ // Close the video file // закрытие контекста файла(видео файла) av_close_input_file(format_ctx); + Log::Warning(L"close video format context file\n"); format_ctx = nullptr; } if(avioContext) @@ -877,7 +880,6 @@ decoding_frame = avcodec_alloc_frame(); audio_data_in_device = provider->CreateStreamingTrack16(audio.dec_ctx->channels, audio.dec_ctx->sample_rate, 2); - return true; } fprintf(stderr, "ffmpeg: Unable to find stream info\n"); @@ -1032,21 +1034,25 @@ ITrack *MPlayer::LoadTrack(const wchar_t *filename) //Загрузить mp3 { - auto track = new Track; - if (!track->LoadAudio(filename)) + auto audio_track = new Track; + Log::Warning(L"allocation dynamic memory for audio_track\n"); + if (!audio_track->LoadAudio(filename)) { - delete track; - track = nullptr; + delete audio_track; + Log::Warning(L"delete dynamic memory for audio_track\n"); + audio_track = nullptr; } - return track; + return audio_track; } IMovie *MPlayer::LoadMovie(const wchar_t *filename, int width, int height, int cache_ms) //Загрузить видео { movie = new Movie; + Log::Warning(L"allocation dynamic memory for movie\n"); if (!movie->Load(filename, width, height, cache_ms)) { delete movie; + Log::Warning(L"delete dynamic memory for movie\n"); movie = nullptr; } return movie; @@ -1055,11 +1061,13 @@ IMovie *MPlayer::LoadMovieFromLOD(HANDLE h, int readFunction(void*, uint8_t*, int), int64_t seekFunction(void*, int64_t, int), int width, int height) { movie = new Movie; + Log::Warning(L"allocation dynamic memory for movie\n"); if (movie) { if (movie->LoadFromLOD(h, readFunction, seekFunction, width, height)) - return movie; + return movie; delete movie; + Log::Warning(L"delete dynamic memory for movie\n"); } return nullptr; } @@ -1096,30 +1104,37 @@ if (!provider) { provider = new OpenALSoundProvider; + Log::Warning(L"allocation dynamic memory for provider\n"); provider->Initialize(); } } MPlayer::~MPlayer() { + delete provider; + Log::Warning(L"delete dynamic memory for provider\n"); } void PlayAudio(const wchar_t * pFilename) { - pTrack = pMediaPlayer->LoadTrack(pFilename); - pTrack->Play(); + pAudio_Track = pMediaPlayer->LoadTrack(pFilename); + pAudio_Track->Play(); + delete pAudio_Track; + Log::Warning(L"delete dynamic memory for pAudio_Track\n"); + pAudio_Track = nullptr; } void PlayMovie(const wchar_t * pFilename) { - Media::IMovie *track = pMediaPlayer->LoadMovie(pFilename, 640, 480, 0); - track->Play(); + Media::IMovie *Movie_track = pMediaPlayer->LoadMovie(pFilename, 640, 480, 0); + Movie_track->Play(); } void MovieRelease() { movie->Release(); delete movie; + Log::Warning(L"delete dynamic memory for movie\n"); movie = nullptr; }
--- a/MediaPlayer.h Thu Jul 10 01:34:57 2014 +0200 +++ b/MediaPlayer.h Thu Jul 10 01:37:41 2014 +0200 @@ -4,13 +4,15 @@ { class ITrack { - public: virtual void Play(bool loop = false) = 0; + public: + virtual void Play(bool loop = false) = 0; }; class IMovie { - public: virtual void Play() = 0; - virtual void GetNextFrame(double dt, void *target_surface) = 0; + public: + virtual void Play() = 0; + virtual void GetNextFrame(double dt, void *target_surface) = 0; }; class MPlayer @@ -26,8 +28,8 @@ }; extern Media::MPlayer *pMediaPlayer; -extern Media::IMovie *pMovie; -extern Media::ITrack *pTrack; +extern Media::IMovie *pMovie_Track; +extern Media::ITrack *pAudio_Track; extern class Movie *movie; extern bool end_current_file;
--- a/OSWindow.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/OSWindow.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -316,14 +316,14 @@ pMiscTimer->Resume(); viewparams->bRedrawGameUI = true; - if ( pMovie)//pVideoPlayer->pSmackerMovie ) + if ( pMovie_Track)//pVideoPlayer->pSmackerMovie ) { pRenderer->RestoreFrontBuffer(); pRenderer->RestoreBackBuffer(); //pVideoPlayer->_4BF5B2(); } } - if ( pAudioPlayer->hAILRedbook && !bGameoverLoop && !pMovie)//!pVideoPlayer->pSmackerMovie ) + if ( pAudioPlayer->hAILRedbook && !bGameoverLoop && !pMovie_Track)//!pVideoPlayer->pSmackerMovie ) AIL_redbook_resume(pAudioPlayer->hAILRedbook); } } @@ -332,7 +332,7 @@ if (!(dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE)) { dword_4E98BC_bApplicationActive = 0; - if ( pMovie//(pVideoPlayer->pSmackerMovie || pVideoPlayer->pBinkMovie) + if ( pMovie_Track//(pVideoPlayer->pSmackerMovie || pVideoPlayer->pBinkMovie) && pVideoPlayer->bPlayingMovie ) pVideoPlayer->bStopBeforeSchedule = 1;
--- a/Outdoor.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Outdoor.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -271,7 +271,7 @@ } //----- (00488F5C) -------------------------------------------------------- -bool OutdoorLocation::Initialize(const char *pFilename, int File, size_t uRespawnInterval, int thisa) +bool OutdoorLocation::Initialize(const char *pFilename, int File, size_t uRespawnInterval, int *thisa) { OutdoorLocation *v5; // esi@1 bool result; // eax@2 @@ -1070,7 +1070,7 @@ } //----- (0047D0A6) -------------------------------------------------------- -bool OutdoorLocation::Load(const char *pFilename, ODMFace *File, size_t pNumItems, int thisa)//загрузка локации +bool OutdoorLocation::Load(const char *pFilename, ODMFace *File, size_t pNumItems, int *thisa)//загрузка локации { //OutdoorLocation *pOutdoorLocation; // esi@1 /*bool result; // eax@9 @@ -1945,7 +1945,7 @@ if (Str2 == 0) ++ddm.uNumRespawns; v108 = 0; - *(int *)thisa = 1; + *thisa = 1; v39 = pGames_LOD->FindContainer(Str, 0); fread(&header, 0x10, 1u, v39); //pFilename = (char *)header.uCompressedSize; @@ -1971,7 +1971,7 @@ goto LABEL_120; } - *(int *)thisa = 0; + *thisa = 0; LABEL_120: //v108 = (int)".odm"; //v83 = strlen(pContainer); @@ -1984,7 +1984,7 @@ pGameLoadingUI_ProgressBar->Progress(); - if ( *(int *)thisa ) + if ( *thisa ) { memcpy(uFullyRevealedCellOnMap, Dst, 0x3C8u); memcpy(uPartiallyRevealedCellOnMap, Src, 0x3C8u);
--- a/Outdoor.h Thu Jul 10 01:34:57 2014 +0200 +++ b/Outdoor.h Thu Jul 10 01:37:41 2014 +0200 @@ -138,7 +138,7 @@ void PrepareActorsDrawList(); void CreateDebugLocation(); void Release(); - bool Load(const char *pFilename, ODMFace *File, size_t a4, int thisa); + bool Load(const char *pFilename, ODMFace *File, size_t a4, int *thisa); int GetTileIdByTileMapId(signed int a2); unsigned int DoGetTileTexture(signed int uX, signed int uZ); int _47ED83(signed int a2, signed int a3); @@ -158,7 +158,7 @@ int GetSomeOtherTileInfo(int sX, int sY); unsigned int GetTileTexture(int sX, int sZ); int GetHeightOnTerrain(int sX, int sZ); - bool Initialize(const char *pFilename, int File, size_t uRespawnInterval, int thisa); + bool Initialize(const char *pFilename, int File, size_t uRespawnInterval, int *thisa); //bool Release2(); bool GetTravelDestination(signed int sPartyX, signed int sPartyZ, char *pOut, signed int a5); void MessWithLUN();
--- a/Render.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Render.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -9001,7 +9001,7 @@ && pCurrentScreen != SCREEN_CHANGE_LOCATION ) { if (pCurrentScreen == SCREEN_INPUT_BLV) - return pMovie;//pSmackerMovie != 0; + return pMovie_Track;//pSmackerMovie != 0; if ( pCurrentScreen != SCREEN_BRANCHLESS_NPC_DIALOG ) return true; }
--- a/SaveLoad.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/SaveLoad.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -40,12 +40,10 @@ { bool v25; // esi@62 bool v26; // eax@62 -// int v30; // [sp-Ch] [bp-FCh]@65 -// int v31; // [sp-8h] [bp-F8h]@4 SavegameHeader header; // [sp+Ch] [bp-E4h]@23 char Str[123]; // [sp+70h] [bp-80h]@25 - dword_5B65C8_timers_count = 0; + MapsLongTimers_count = 0; if (!pSavegameUsedSlots[uSlot]) { pAudioPlayer->PlaySound(SOUND_error, 0, 0, -1, 0, 0, 0, 0); @@ -571,7 +569,7 @@ FILE *file; // eax@7 void *pSave; // [sp+170h] [bp-8h]@3 - if ( pMovie ) + if ( pMovie_Track ) pVideoPlayer->Unload(); pSave = malloc(1000000); pNew_LOD->CloseWriteFile();
--- a/UI/Books/UINotesBooks.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/Books/UINotesBooks.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -405,7 +405,7 @@ journal_window.uFrameZ = game_viewport_z; journal_window.uFrameW = game_viewport_w; if ( pStorylineText->StoreLine[achieved_awards[books_primary_item_per_page]].pPageTitle ) - journal_window.DrawTitleText(pBook2Font, 0, 22, ui_book_journal_title_color, (const char *)pStorylineText->StoreLine[achieved_awards[books_primary_item_per_page]].pPageTitle, 3); + journal_window.DrawTitleText(pBook2Font, 0, 22, ui_book_journal_title_color, pStorylineText->StoreLine[achieved_awards[books_primary_item_per_page]].pPageTitle, 3); } //for other text @@ -441,7 +441,7 @@ pDialogueString = BuildDialogueString(pStorylineText->StoreLine[ achieved_awards[books_primary_item_per_page]].pText, uActiveCharacter - 1, 0, 0, 0, &pParty->PartyTimes.HistoryEventTimes[index]); pStringOnPage = pAutonoteFont->GetPageTop(pDialogueString, &journal_window, 1, (unsigned __int8)Journal_limitation_factor[books_primary_item_per_page]); - journal_window.DrawText(pAutonoteFont, 1, 0, ui_book_journal_text_color, (const char *)pStringOnPage, 0, + journal_window.DrawText(pAutonoteFont, 1, 0, ui_book_journal_text_color, pStringOnPage, 0, journal_window.uFrameY + journal_window.uFrameHeight, ui_book_journal_text_shadow); ++num_achieved_awards; }
--- a/UI/UIHouses.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/UIHouses.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -1721,14 +1721,14 @@ { sprintfex(pTmpBuf.data(), "%s\n%s", pGlobalTXT_LocalizationStrings[606], pGlobalTXT_LocalizationStrings[112]); // "Pay" "How Much?" townHall_window.DrawTitleText(pFontArrus, 0, 146, Color16(0xFFu, 0xFFu, 0x9Bu), pTmpBuf.data(), 3); - townHall_window.DrawTitleText(pFontArrus, 0, 186, Color16(0xFFu, 0xFFu, 0xFFu), (const char *)pKeyActionMap->pPressedKeysBuffer, 3); - townHall_window.DrawFlashingInputCursor(pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer) / 2 + 80, 185, pFontArrus); + townHall_window.DrawTitleText(pFontArrus, 0, 186, Color16(0xFFu, 0xFFu, 0xFFu), pKeyActionMap->pPressedKeysBuffer, 3); + townHall_window.DrawFlashingInputCursor(pFontArrus->GetLineWidth(pKeyActionMap->pPressedKeysBuffer) / 2 + 80, 185, pFontArrus); return; } if ( window_SpeakInHouse->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED) { - v1 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer); - v2 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer); + v1 = atoi(pKeyActionMap->pPressedKeysBuffer); + v2 = atoi(pKeyActionMap->pPressedKeysBuffer); if ( v1 <= 0 ) { pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0); @@ -1795,13 +1795,13 @@ { sprintf(pTmpBuf.data(), "%s\n%s", pGlobalTXT_LocalizationStrings[60], pGlobalTXT_LocalizationStrings[112]);//"Положить" "Сколько?" bank_window.DrawTitleText(pFontArrus, 0, 146, Color16(0xFFu, 0xFFu, 0x9Bu), pTmpBuf.data(), 3); - bank_window.DrawTitleText(pFontArrus, 0, 186, Color16(0xFFu, 0xFFu, 0xFFu), (const char *)pKeyActionMap->pPressedKeysBuffer, 3); - bank_window.DrawFlashingInputCursor(pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer) / 2 + 80, 185, pFontArrus); + bank_window.DrawTitleText(pFontArrus, 0, 186, Color16(0xFFu, 0xFFu, 0xFFu), pKeyActionMap->pPressedKeysBuffer, 3); + bank_window.DrawFlashingInputCursor(pFontArrus->GetLineWidth(pKeyActionMap->pPressedKeysBuffer) / 2 + 80, 185, pFontArrus); return; } if ( window_SpeakInHouse->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED) { - entered_sum = atoi((const char *)pKeyActionMap->pPressedKeysBuffer); + entered_sum = atoi(pKeyActionMap->pPressedKeysBuffer); takes_sum = entered_sum; if ( !entered_sum ) { @@ -1837,14 +1837,14 @@ { sprintfex(pTmpBuf.data(), "%s\n%s", pGlobalTXT_LocalizationStrings[244], pGlobalTXT_LocalizationStrings[112]);//"Снять" "Сколько?" bank_window.DrawTitleText(pFontArrus, 0, 146, Color16(0xFFu, 0xFFu, 0x9Bu), pTmpBuf.data(), 3); - bank_window.DrawTitleText(pFontArrus, 0, 186, Color16(0xFFu, 0xFFu, 0xFFu), (const char *)pKeyActionMap->pPressedKeysBuffer, 3); - bank_window.DrawFlashingInputCursor(pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer) / 2 + 80, 185, pFontArrus); + bank_window.DrawTitleText(pFontArrus, 0, 186, Color16(0xFFu, 0xFFu, 0xFFu), pKeyActionMap->pPressedKeysBuffer, 3); + bank_window.DrawFlashingInputCursor(pFontArrus->GetLineWidth(pKeyActionMap->pPressedKeysBuffer) / 2 + 80, 185, pFontArrus); return; } if ( window_SpeakInHouse->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED) { window_SpeakInHouse->receives_keyboard_input_2 = WINDOW_INPUT_NONE; - entered_sum = atoi((const char *)pKeyActionMap->pPressedKeysBuffer); + entered_sum = atoi(pKeyActionMap->pPressedKeysBuffer); takes_sum = entered_sum; if ( entered_sum ) { @@ -2183,14 +2183,14 @@ { pButton = pDialogueWindow->GetControl(pItemNum); pButton->uY = all_text_height + v54; - pTextHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0); + pTextHeight = pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0); pButton->uHeight = pTextHeight; v54 = pButton->uY + pTextHeight - 1; pButton->uW = v54; pColorText = Color16(0xFFu, 0xFFu, 0x9Bu); if ( pDialogueWindow->pCurrentPosActiveItem != pItemNum ) pColorText = Color16(0xFFu, 0xFFu, 0xFFu); - dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, (const char *)pShopOptions[pNumString], 3); + dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, pShopOptions[pNumString], 3); ++pNumString; } }
--- a/UI/UIPartyCreation.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/UIPartyCreation.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -154,19 +154,19 @@ switch ( pGUIWindow_CurrentMenu->receives_keyboard_input_2 ) { case WINDOW_INPUT_IN_PROGRESS://press name panel - v17 = pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, 159 * (int)pGUIWindow_CurrentMenu->ptr_1C + 18, 124, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 120, 1); + v17 = pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, 159 * (int)pGUIWindow_CurrentMenu->ptr_1C + 18, 124, 0, pKeyActionMap->pPressedKeysBuffer, 120, 1); pGUIWindow_CurrentMenu->DrawFlashingInputCursor(159 * (unsigned int)pGUIWindow_CurrentMenu->ptr_1C + v17 + 20, 124, pFontCreate); break; case WINDOW_INPUT_CONFIRMED: // press enter pGUIWindow_CurrentMenu->receives_keyboard_input_2 = WINDOW_INPUT_NONE; v126 = 0; - for ( int i = 0; i < strlen((const char *)pKeyActionMap->pPressedKeysBuffer); ++i )//edit name + for ( int i = 0; i < strlen(pKeyActionMap->pPressedKeysBuffer); ++i )//edit name { if ( pKeyActionMap->pPressedKeysBuffer[i] == ' ' ) ++v126; } - if ( strlen((const char *)pKeyActionMap->pPressedKeysBuffer) && v126 != strlen((const char *)pKeyActionMap->pPressedKeysBuffer) ) - strcpy(pParty->pPlayers[i].pName, (const char *)pKeyActionMap->pPressedKeysBuffer); + if ( strlen(pKeyActionMap->pPressedKeysBuffer) && v126 != strlen(pKeyActionMap->pPressedKeysBuffer) ) + strcpy(pParty->pPlayers[i].pName, pKeyActionMap->pPressedKeysBuffer); pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, pIntervalX, 124, 0, pParty->pPlayers[i].pName, 130, 0); pParty->pPlayers[i].field_1988[27] = 1; break;
--- a/UI/UISaveLoad.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/UISaveLoad.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -95,7 +95,7 @@ if ( pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED) { pGUIWindow_CurrentMenu->receives_keyboard_input_2 = WINDOW_INPUT_NONE; - strcpy((char *)&pSavegameHeader + 100 * uLoadGameUI_SelectedSlot, (const char *)pKeyActionMap->pPressedKeysBuffer); + strcpy((char *)&pSavegameHeader + 100 * uLoadGameUI_SelectedSlot, pKeyActionMap->pPressedKeysBuffer); pMessageQueue_50CBD0->AddMessage(UIMSG_SaveGame, 0, 0); } else @@ -108,7 +108,7 @@ pGUIWindow_CurrentMenu->DrawText(pFontSmallnum, pFontSmallnum->AlignText_Center(186, pGlobalTXT_LocalizationStrings[135]) + 25, 220, 0, pGlobalTXT_LocalizationStrings[135], 0, 0, 0);//Загрузка pGUIWindow_CurrentMenu->DrawTextInRect(pFontSmallnum, pFontSmallnum->AlignText_Center(186, - (const char *)pSavegameHeader.data() + 100 * uLoadGameUI_SelectedSlot) + 25, 0x106, 0, pSavegameHeader[uLoadGameUI_SelectedSlot].pName, 185, 0); + pSavegameHeader[uLoadGameUI_SelectedSlot].pName) + 25, 0x106, 0, pSavegameHeader[uLoadGameUI_SelectedSlot].pName, 185, 0); pGUIWindow_CurrentMenu->DrawText(pFontSmallnum, pFontSmallnum->AlignText_Center(186, pGlobalTXT_LocalizationStrings[165]) + 25, 304, 0, pGlobalTXT_LocalizationStrings[165], 0, 0, 0);//"Пожалуйста, пожождите" }
--- a/UI/UIShops.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/UIShops.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -61,13 +61,13 @@ { pButton = pDialogueWindow->GetControl(i); pButton->uY = v103 + v19; - pButton->uHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0); - v19 = pButton->uY + pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0) - 1; + pButton->uHeight = pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0); + v19 = pButton->uY + pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0) - 1; pButton->uW = v19; pColorText = Color16(0xE1u, 0xCDu, 0x23u); if ( pDialogueWindow->pCurrentPosActiveItem != i ) pColorText = Color16(0xFFu, 0xFFu, 0xFFu); - dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, (const char *)pShopOptions[pNumString], 3); + dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, pShopOptions[pNumString], 3); ++pNumString; } } @@ -263,13 +263,13 @@ { pButton = pDialogueWindow->GetControl(i); pButton->uY = v103 + v19; - pButton->uHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0); - v19 = pButton->uY + pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0) - 1; + pButton->uHeight = pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0); + v19 = pButton->uY + pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0) - 1; pButton->uW = v19; pColorText = Color16(0xE1u, 0xCDu, 0x23u); if ( pDialogueWindow->pCurrentPosActiveItem != i ) pColorText = Color16(0xFFu, 0xFFu, 0xFFu); - dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, (const char *)pShopOptions[pNumString], 3); + dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, pShopOptions[pNumString], 3); ++pNumString; } break; @@ -733,13 +733,13 @@ { pButton = pDialogueWindow->GetControl(i); pButton->uY = v18 + v105; - pButton->uHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0); - v105 = pButton->uY + pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0) - 1; + pButton->uHeight = pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0); + v105 = pButton->uY + pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0) - 1; pButton->uW = v105; pColorText = Color16(0xE1u, 0xCDu, 0x23u); if ( pDialogueWindow->pCurrentPosActiveItem != i ) pColorText = Color16(0xFFu, 0xFFu, 0xFFu); - dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, (const char *)pShopOptions[pNumString], 3); + dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, pShopOptions[pNumString], 3); ++pNumString; } } @@ -982,13 +982,13 @@ { pButton = pDialogueWindow->GetControl(i); pButton->uY = v18 + v105; - pButton->uHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0); - v105 = pButton->uY + pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0) - 1; + pButton->uHeight = pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0); + v105 = pButton->uY + pFontArrus->CalcTextHeight(pShopOptions[pNumString], &dialog_window, 0, 0) - 1; pButton->uW = v105; pColorText = Color16(0xE1u, 0xCDu, 0x23u); if ( pDialogueWindow->pCurrentPosActiveItem != i ) pColorText = Color16(0xFFu, 0xFFu, 0xFFu); - dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, (const char *)pShopOptions[pNumString], 3); + dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, pColorText, pShopOptions[pNumString], 3); ++pNumString; } return;
--- a/UI/UITransition.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/UITransition.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -178,7 +178,7 @@ pRenderer->DrawTextureIndexed(556, 451, pIcons_LOD->GetTexture(uTextureID_x_x_u)); pRenderer->DrawTextureIndexed(476, 451, pIcons_LOD->GetTexture(uTextureID_x_ok_u)); map_id = pMapStats->GetMapInfo(pCurrentMapName); - if ( (pMovie || v9) && *dword_591164_teleport_map_name != ' ' ) + if ( (pMovie_Track || v9) && *dword_591164_teleport_map_name != ' ' ) map_id = pMapStats->GetMapInfo(dword_591164_teleport_map_name); transition_window.uFrameX = 493; transition_window.uFrameWidth = 126;
--- a/UI/UiGame.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/UI/UiGame.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -660,7 +660,7 @@ if ( pGUIWindow2->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED) { pGUIWindow2->receives_keyboard_input_2 = WINDOW_INPUT_NONE; - strcpy(GameUI_Footer_TimedString.data(), (const char *)pKeyActionMap->pPressedKeysBuffer); + strcpy(GameUI_Footer_TimedString.data(), pKeyActionMap->pPressedKeysBuffer); sub_4452BB(); return; }
--- a/VideoPlayer.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/VideoPlayer.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -144,7 +144,7 @@ auto image = new char[client_width * client_height * 4]; - pMovie->GetNextFrame(dt, image); //получить следующий кадр + pMovie_Track->GetNextFrame(dt, image); //получить следующий кадр if (end_current_file)//достигнут ли конец видео? break; @@ -254,13 +254,14 @@ AIL_redbook_resume(pAudioPlayer->hAILRedbook); pEventTimer->Resume(); - delete pMovie; - pMovie = nullptr; + delete pMovie_Track; + Log::Warning(L"delete dynamic memory for pMovie_Track\n"); + pMovie_Track = nullptr; } void VideoPlayer::_inlined_in_463149() { - if (pMovie) + if (pMovie_Track) { pRenderer->BeginScene(); pMouse->DrawCursorToTarget(); @@ -282,8 +283,9 @@ MovieRelease(); SetFilePointer(hVidFile, uOffset, nullptr, FILE_BEGIN); - pMovie = nullptr; - pMovie = pMediaPlayer->LoadMovieFromLOD(hVidFile, &readFunction, &seekFunction, width, height); + pMovie_Track = nullptr; + Log::Warning(L"reload pMovie_Track"); + pMovie_Track = pMediaPlayer->LoadMovieFromLOD(hVidFile, &readFunction, &seekFunction, width, height); end_current_file = false; } //else @@ -296,7 +298,7 @@ auto image = new char[current_movie_width * current_movie_height * 4]; - pMovie->GetNextFrame(dt, image); + pMovie_Track->GetNextFrame(dt, image); int image_array[460 * 344];//game_viewport_width * game_viewport_height if (image) @@ -347,7 +349,7 @@ //----- (004BF3F9) -------------------------------------------------------- bool VideoPlayer::AnyMovieLoaded() { - return pMovie;// pSmackerMovie || pBinkMovie; + return pMovie_Track;// pSmackerMovie || pBinkMovie; } //----- (004BF411) -------------------------------------------------------- @@ -395,7 +397,7 @@ } }*/ pMouse->_469E24(); - if ( window_SpeakInHouse && window_SpeakInHouse->ptr_1C == (void *)165 && !pMovie)//!this->pSmackerMovie ) + if ( window_SpeakInHouse && window_SpeakInHouse->ptr_1C == (void *)165 && !pMovie_Track)//!this->pSmackerMovie ) { bGameoverLoop = true; HouseDialogPressCloseBtn(); @@ -449,7 +451,8 @@ bStopBeforeSchedule = false; pResetflag = 0; pMediaPlayer = new Media::MPlayer;//создаётся плеер - pMovie = nullptr; + Log::Warning(L"allocation dynamic memory for pMediaPlayer\n"); + pMovie_Track = nullptr; //pBinkMovie = nullptr; } @@ -529,6 +532,6 @@ client_height = rc_client.bottom - rc_client.top; - pMovie = pMediaPlayer->LoadMovieFromLOD(hVidFile, &readFunction, &seekFunction, client_width, client_height); + pMovie_Track = pMediaPlayer->LoadMovieFromLOD(hVidFile, &readFunction, &seekFunction, client_width, client_height); }
--- a/Vis.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/Vis.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -263,6 +263,9 @@ } } + if (ownerSprite == nullptr) + return false; + int i = ownerSprite->uAreaX + int(ownerSprite->uAreaWidth * (x - drX) / drW); int j = ownerSprite->uAreaY + int(ownerSprite->uAreaHeight * (y - drY) / drH);
--- a/mm7_2.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/mm7_2.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -42,7 +42,7 @@ #include "DecorationList.h" #include "SaveLoad.h" #include "stru123.h" -#include "stru176.h" +#include "MapsLongTimer.h" #include "Timer.h" #include "IconFrameTable.h" #include "GUIProgressBar.h" @@ -224,9 +224,9 @@ sprintf(pTmpBuf2.data(), " %lu %s, %lu %s, %lu %s ", v14, v9, v18, v8, v17, v7); strcat(pTmpBuf.data(), pTmpBuf2.data()); - pWindow.DrawTitleText(pFont, 1u, pWindow.uFrameHeight - 2 * LOBYTE(pFont->uFontHeight) - 5, 1u, pTmpBuf.data(), 3u); + pWindow.DrawTitleText(pFont, 1, pWindow.uFrameHeight - 2 * LOBYTE(pFont->uFontHeight) - 5, 1, pTmpBuf.data(), 3); sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[94], v23); - pWindow.DrawTitleText(pFont, 1, pWindow.uFrameHeight, 1u, pTmpBuf.data(), 3); + pWindow.DrawTitleText(pFont, 1, pWindow.uFrameHeight, 1, pTmpBuf.data(), 3); dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; pRenderer->EndScene(); pRenderer->Present(); @@ -1939,7 +1939,7 @@ static_assert(sizeof(TrailParticle) == 0x18, "Wrong type size"); static_assert(sizeof(EventIndex) == 0xC, "Wrong type size"); static_assert(sizeof(_2devent) == 0x34, "Wrong type size"); - static_assert(sizeof(stru176) == 0x20, "Wrong type size"); + static_assert(sizeof(MapsLongTimer) == 0x20, "Wrong type size"); static_assert(sizeof(SavegameHeader) == 0x64, "Wrong type size"); static_assert(sizeof(SavegameList) == 0x3138, "Wrong type size"); static_assert(sizeof(StorylineText) == 0x160, "Wrong type size"); @@ -2361,7 +2361,7 @@ { sCurrentMenuID = uMenu; - Log::Warning(L"CurrentMenu = %s", MENU_STATE_to_string(uMenu)); + Log::Warning(L"CurrentMenu = %s \n", MENU_STATE_to_string(uMenu)); } //----- (00466CA0) -------------------------------------------------------- @@ -2554,959 +2554,753 @@ //v6 = v2->uType; //v7 = v2->uType; - if ( pSpriteObjects[uLayingItemID].uType > 3060 ) + + switch (pSpriteObjects[uLayingItemID].uType) + { + + case 1060: + case 2030: + case 9010: + { + //v9 = 0; + if (PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2)) + return 1; + if (PID_TYPE(a2) != 2) + { + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + v95 = 0; + for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) + v95 = v52; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v95; + if (!v95) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (!pSpriteObjects[uLayingItemID].uSoundID) + v97 = 0; + else + v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); + return 0; + } + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; + v121 = 0; + for (v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID) + v121 = v119; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v121; + if (!v121) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + v13 = 8 * uLayingItemID; + LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); + pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); + return 0; + } + + + case 500: + case 505: + case 510: + case 515: + case 520: + case 525: + case 530: + case 535: + case 540: + { + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + v12 = 0; + for (v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID) + v12 = v10; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v12; + if (!v12) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (pSpriteObjects[uLayingItemID].uType == 555) + { + v13 = 8 * uLayingItemID; + LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); + pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); + } + return 0; + } + + case 545: + case 550: + { + if (pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3) + { + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + sub_43A97E(uLayingItemID, a2); + SpriteObject::OnInteraction(uLayingItemID); + if (pSpriteObjects[uLayingItemID].uSoundID == 0) + v16 = 0; + else + v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); + return 0; + } + v18 = 0; + pSpriteObjects[uLayingItemID].uType = 600; + v22 = 0; + for (v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID) + v22 = v19; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v22; + if (!v22) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = v18; + pSpriteObjects[uLayingItemID].vVelocity.y = v18; + pSpriteObjects[uLayingItemID].vVelocity.x = v18; + pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; + v12 = 0; + for (v10; v10 < (signed int)v8; ++v10) + { + v11 += 56; + if (pSpriteObjects[uLayingItemID].uType != *(short *)v11) + v12 = v10; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v12; + if (!v12) + SpriteObject::OnInteraction(uLayingItemID); + v44 = pSpriteObjects[uLayingItemID].uType == 555; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (!v44) + { + v13 = 8 * uLayingItemID; + LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); + pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); + return 0; + } + return 0; + } + + case 600: + { + pSpriteObjects[uLayingItemID].uType = 601; + v36 = 0; + for (v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID) + v36 = v34; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v36; + if (!v36) + SpriteObject::OnInteraction(uLayingItemID); + v37 = pSpriteObjects[uLayingItemID].vPosition.z; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + v38 = 8 * uLayingItemID; + v39 = pSpriteObjects[uLayingItemID].vPosition.y; + LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + v40 = pSpriteObjects[uLayingItemID].vPosition.x; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + v147 = v38; + AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); + if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) + trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); + pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); + return 0; + } + + case 1010: + case 1100: + case 2060: + case 3010: + case 3030: + case 3060: + case 4000: + case 4030: + case 4050: + case 4100: + case 6010: + case 6090: + { + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + v95 = 0; + for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) + v95 = v52; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v95; + if (!v95) + SpriteObject::OnInteraction(uLayingItemID); + v96 = pSpriteObjects[uLayingItemID].uSoundID; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (!v96) + v97 = 0; + else + v97 = (signed __int16)v96 + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); + return 0; + } + + + case 555: + { + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + v18 = 0; + v22 = 0; + v25 = (char *)&pObjectList->pObjects->uObjectID; + for (v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID) + v22 = v24; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v22; + if (v22 == v18) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = v18; + pSpriteObjects[uLayingItemID].vVelocity.y = v18; + pSpriteObjects[uLayingItemID].vVelocity.x = v18; + pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; + return 0; + } + + case 3090: + { + //v9 = 0; + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; + v63 = 0; + for (v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61) + { + if (v59 == pObjectList->pObjects[v61].uObjectID) + v63 = v61; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v63; + if (!v63) + SpriteObject::OnInteraction(uLayingItemID); + v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; + v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + v65 = 7; + if (v44) + v65 = 9; + if (v65 > 0) + { + v141 = v65; + do + { + v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; + pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); + --v141; + } while (v141); + } + SpriteObject::OnInteraction(uLayingItemID); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v16 = 0; + else + v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); + return 0; + } + + case 3092: + { + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; + v58 = 0; + for (v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID) + v58 = v56; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v58; + if (!v58) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + sub_43A97E(uLayingItemID, a2); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v16 = 0; + else + v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); + return 0; + } + + case 4070: + { + if (PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2)) + return 1; + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; + v71 = 0; + for (v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID) + v71 = v69; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v71; + if (!v71) + SpriteObject::OnInteraction(uLayingItemID); + v134 = 0; + v72 = uLayingItemID; + v132 = 0; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + AttackerInfo.Add(PID(OBJECT_Item, v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v78 = 0; + else + v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); + return 0; + } + + case 4090: { - if ( pSpriteObjects[uLayingItemID].uType > 6090 ) - { - if ( pSpriteObjects[uLayingItemID].uType > 8090 ) - { - if ( pSpriteObjects[uLayingItemID].uType == 9010 ) - goto LABEL_247; - if ( pSpriteObjects[uLayingItemID].uType != 9030 ) - { - if ( pSpriteObjects[uLayingItemID].uType != 9040 ) - { - if ( pSpriteObjects[uLayingItemID].uType != 9080 ) - return 0; - v95 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; - for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) - v95 = v146; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v100 = pSpriteObjects[uLayingItemID].field_61; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v102 = 8 * uLayingItemID; - LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); - if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) - trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v47 = 0; - else - v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); - return 0; - } - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } -LABEL_172: - v143 = 17030; - switch ( pSpriteObjects[uLayingItemID].uType ) - { - case 0x1798u: - v143 = 15040; - break; - case 0xFAAu: - v143 = 13010; - break; - case 0x2346u: - v143 = 18030; - break; - } - v138 = 1; - if ( PID_TYPE(a2) != OBJECT_Actor) - { - if ( pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4 ) - { - SpriteObject::OnInteraction(uLayingItemID); - return 0; - } - pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); -LABEL_233: - if ( !v138 ) - { - ++pSpriteObjects[uLayingItemID].uType; - v112 = 0; - for ( v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID ) - v112 = v110; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v112; - if ( !v112 ) - SpriteObject::OnInteraction(uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v113 = pSpriteObjects[uLayingItemID].uSoundID; - if ( v113 ) - v114 = (signed __int16)v113 + 4; - else - v114 = 0; - v115 = 8 * uLayingItemID; - LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); - v125 = v143 + 1; - pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); - return 0; - } - SpriteObject::OnInteraction(uLayingItemID); - return 0; - } - v106 = a2; - v150 = 0; - v139 = PID_ID(v106); - v137 = pSpriteObjects[uLayingItemID].spell_level; - v152 = pSpriteObjects[uLayingItemID].spell_skill; - v136 = pSpriteObjects[uLayingItemID].spell_id; - if ( pSpriteObjects[uLayingItemID].uType == 9030 ) - { - v150 = 2; - if ( v152 == 2 ) - { - v150 = 3; - } - else - { - if ( v152 >= 3 ) - v150 = 4; - } - pActors[v139].uAttributes |= 0x80000; - } - if ( pSpriteObjects[uLayingItemID].uType == 6040 ) - { - v135 = 7; - } - else - { - if ( pSpriteObjects[uLayingItemID].uType == 8030 ) - { - v135 = 9; - } - else - { - if ( pSpriteObjects[uLayingItemID].uType != 9030 ) - { - v107 = v136; -LABEL_222: - if ( pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4 ) - { - v108 = v139; - if ( pActors[v139].DoesDmgTypeDoDamage((DAMAGE_TYPE)v107) ) - { - v138 = 0; - if ( pSpriteObjects[uLayingItemID].uType == 8030 ) - { - pActors[v108].uAIState = Standing; - pActors[v108].UpdateAnimation(); - } - pActors[v108].pActorBuffs[v136].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v137 << 7) * 0.033333335), - v152, v150, 0, 0); - } - } - else - { - pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); - } - pSpriteObjects[uLayingItemID].spell_level = 0; - pSpriteObjects[uLayingItemID].spell_skill = 0; - pSpriteObjects[uLayingItemID].spell_id = 0; - goto LABEL_233; - } - v135 = 10; - } - } - v107 = v135; - goto LABEL_222; - } - if ( pSpriteObjects[uLayingItemID].uType == 8090 - || pSpriteObjects[uLayingItemID].uType == 7030 - || pSpriteObjects[uLayingItemID].uType == 7090 || pSpriteObjects[uLayingItemID].uType == 8000 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType == 8010 ) - { - if ( PID_TYPE(a2) == 3 - && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - //v9 = 0; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v92 = uLayingItemID; - v124 = 8 * v92; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - v79 = pSpriteObjects[uLayingItemID].uType == 8030; - } - else - { - if ( pSpriteObjects[uLayingItemID].uType == 6090 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType <= 4070 ) - { - if ( pSpriteObjects[uLayingItemID].uType != 4070 ) - { - v48 = pSpriteObjects[uLayingItemID].uType - 3090; - if ( v48 ) - { - v49 = v48 - 2; - if ( v49 ) - { - v50 = v49 - 908; - if ( v49 == 908 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - v45 = v50 - 30; - v44 = v45 == 0; - goto LABEL_91; - } - //v9 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; - v58 = 0; - for ( v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID ) - v58 = v56; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v58; - if ( !v58 ) - SpriteObject::OnInteraction(uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - sub_43A97E(uLayingItemID, a2); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v16 = 0; - else - v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); - return 0; - } - //v9 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; - v63 = 0; - for ( v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61 ) - { - if ( v59 == pObjectList->pObjects[v61].uObjectID ) - v63 = v61; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v63; - if ( !v63 ) - SpriteObject::OnInteraction(uLayingItemID); - v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; - v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - v65 = 7; - if ( v44 ) - v65 = 9; - if ( v65 > 0 ) - { - v141 = v65; - do - { - v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; - pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); - --v141; - } - while ( v141 ); - } - SpriteObject::OnInteraction(uLayingItemID); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v16 = 0; - else - v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); - return 0; - } - //v66 = 0; - if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) - return 1; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; - v71 = 0; - for ( v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID ) - v71 = v69; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v71; - if ( !v71 ) - SpriteObject::OnInteraction(uLayingItemID); - v134 = 0; - v72 = uLayingItemID; - v132 = 0; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - AttackerInfo.Add(PID(OBJECT_Item,v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v78 = 0; - else - v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType == 4090 ) - { - //v9 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; - v88 = 0; - for ( v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID ) - v88 = v86; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v88; - if ( !v88 ) - SpriteObject::OnInteraction(uLayingItemID); - v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - v142 = v89; - v148 = 7; - do - { - pRnd->SetRange(-128, 128); - v90 = pRnd->GetInRange(); - pRnd->SetRange(5, 500); - v91 = pRnd->GetInRange(); - v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; - pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); - --v148; - } - while ( v148 ); - SpriteObject::OnInteraction(uLayingItemID); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v16 = 0; - else - v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id-1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType == 4092 ) - { - //v66 = 0; - pSpriteObjects[uLayingItemID].uType = 4091; - v83 = 0; - for ( v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID ) - v83 = v81; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v83; - if ( !v83 ) - SpriteObject::OnInteraction(uLayingItemID); - v134 = 0; - //v72 = uLayingItemID; - v132 = pSpriteObjects[uLayingItemID].field_61; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v78 = 0; - else - v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType == 4100 || pSpriteObjects[uLayingItemID].uType == 6010 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - v79 = pSpriteObjects[uLayingItemID].uType == 6040; - } - if ( !v79 ) - return 0; - goto LABEL_172; + //v9 = 0; + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; + v88 = 0; + for (v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID) + v88 = v86; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v88; + if (!v88) + SpriteObject::OnInteraction(uLayingItemID); + v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + v142 = v89; + v148 = 7; + do + { + pRnd->SetRange(-128, 128); + v90 = pRnd->GetInRange(); + pRnd->SetRange(5, 500); + v91 = pRnd->GetInRange(); + v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; + pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); + --v148; + } while (v148); + SpriteObject::OnInteraction(uLayingItemID); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v16 = 0; + else + v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); + return 0; + } + + case 4092: + { + pSpriteObjects[uLayingItemID].uType = 4091; + v83 = 0; + for (v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID) + v83 = v81; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v83; + if (!v83) + SpriteObject::OnInteraction(uLayingItemID); + v134 = 0; + //v72 = uLayingItemID; + v132 = pSpriteObjects[uLayingItemID].field_61; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v78 = 0; + else + v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); + return 0; } - if ( pSpriteObjects[uLayingItemID].uType == 3060 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType <= 555 ) - { - if ( pSpriteObjects[uLayingItemID].uType == 555 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v18 = 0; - v22 = 0; - v25 = (char *)&pObjectList->pObjects->uObjectID; - for ( v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID ) - v22 = v24; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v22; - if ( v22 == v18 ) - SpriteObject::OnInteraction(uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.z = v18; - pSpriteObjects[uLayingItemID].vVelocity.y = v18; - pSpriteObjects[uLayingItemID].vVelocity.x = v18; - pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; - } - else - { - switch ( pSpriteObjects[uLayingItemID].uType ) - { - case 500: - case 505: - case 510: - case 515: - case 520: - case 525: - case 530: - case 535: - case 540: - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v12 = 0; - for ( v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID ) - v12 = v10; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v12; - if ( !v12 ) - SpriteObject::OnInteraction(uLayingItemID); - v44 = pSpriteObjects[uLayingItemID].uType == 555; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v44 ) - { - v13 = 8 * uLayingItemID; - LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); - pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); - } - return 0; - case 545: - case 550: - if ( pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3 ) - { - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - sub_43A97E(uLayingItemID, a2); - SpriteObject::OnInteraction(uLayingItemID); - if ( pSpriteObjects[uLayingItemID].uSoundID == 0 ) - v16 = 0; - else - v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); - return 0; - } - v18 = 0; - pSpriteObjects[uLayingItemID].uType = 600; - v22 = 0; - for ( v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID ) - v22 = v19; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v22; - if ( !v22 ) - SpriteObject::OnInteraction(uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.z = v18; - pSpriteObjects[uLayingItemID].vVelocity.y = v18; - pSpriteObjects[uLayingItemID].vVelocity.x = v18; - pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; - default: - return 0; - } - v12 = 0; - for ( v10; v10 < (signed int)v8; ++v10 ) - { - v11 += 56; - if ( pSpriteObjects[uLayingItemID].uType != *(short *)v11 ) - v12 = v10; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v12; - if ( !v12 ) - SpriteObject::OnInteraction(uLayingItemID); - v44 = pSpriteObjects[uLayingItemID].uType == 555; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v44 ) - { - v13 = 8 * uLayingItemID; - LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); - pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); - return 0; - } - } - return 0; + + case 8010: + { + if (PID_TYPE(a2) == 3 + && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD)) + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + //v9 = 0; + v95 = 0; + for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) + v95 = v52; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v95; + if (!v95) + SpriteObject::OnInteraction(uLayingItemID); + v96 = pSpriteObjects[uLayingItemID].uSoundID; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (!v96) + v97 = 0; + else + v97 = (signed __int16)v96 + 4; + v92 = uLayingItemID; + v124 = 8 * v92; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); + return 0; + } + + case 7030: + case 7090: + case 8000: + case 8090: + { + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + v95 = 0; + for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) + v95 = v52; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v95; + if (!v95) + SpriteObject::OnInteraction(uLayingItemID); + v96 = pSpriteObjects[uLayingItemID].uSoundID; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (!v96) + v97 = 0; + else + v97 = (signed __int16)v96 + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); + return 0; + } + + case 6040: + case 8030: + case 9030: + { + v143 = 17030; + switch (pSpriteObjects[uLayingItemID].uType) + { + case 0x1798u: + v143 = 15040; + break; + case 0xFAAu: + v143 = 13010; + break; + case 0x2346u: + v143 = 18030; + break; + } + v138 = 1; + if (PID_TYPE(a2) != OBJECT_Actor) + { + if (pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4) + { + SpriteObject::OnInteraction(uLayingItemID); + return 0; + } + pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); + if (!v138) + { + ++pSpriteObjects[uLayingItemID].uType; + v112 = 0; + for (v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID) + v112 = v110; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v112; + if (!v112) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + v113 = pSpriteObjects[uLayingItemID].uSoundID; + if (v113) + v114 = (signed __int16)v113 + 4; + else + v114 = 0; + v115 = 8 * uLayingItemID; + LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); + v125 = v143 + 1; + pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); + } + else + SpriteObject::OnInteraction(uLayingItemID); + return 0; + } + v106 = a2; + v150 = 0; + v139 = PID_ID(v106); + v137 = pSpriteObjects[uLayingItemID].spell_level; + v152 = pSpriteObjects[uLayingItemID].spell_skill; + v136 = pSpriteObjects[uLayingItemID].spell_id; + if (pSpriteObjects[uLayingItemID].uType == 9030) + { + v150 = 2; + if (v152 == 2) + { + v150 = 3; + } + else + { + if (v152 >= 3) + v150 = 4; + } + pActors[v139].uAttributes |= 0x80000; + v107 = v135; + } + if (pSpriteObjects[uLayingItemID].uType == 6040) + { + v135 = 7; + v107 = v135; + } + else + { + if (pSpriteObjects[uLayingItemID].uType == 8030) + { + v135 = 9; + v107 = v135; + } + else + { + if (pSpriteObjects[uLayingItemID].uType != 9030) + { + v107 = v136; + } + if (pSpriteObjects[uLayingItemID].uType == 9030) + { + v135 = 10; + v107 = v135; + } + } + } + if (pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4) + { + v108 = v139; + if (pActors[v139].DoesDmgTypeDoDamage((DAMAGE_TYPE)v107)) + { + v138 = 0; + if (pSpriteObjects[uLayingItemID].uType == 8030) + { + pActors[v108].uAIState = Standing; + pActors[v108].UpdateAnimation(); + } + pActors[v108].pActorBuffs[v136].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v137 << 7) * 0.033333335), + v152, v150, 0, 0); + } + } + else + { + pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); + } + pSpriteObjects[uLayingItemID].spell_level = 0; + pSpriteObjects[uLayingItemID].spell_skill = 0; + pSpriteObjects[uLayingItemID].spell_id = 0; + if (!v138) + { + ++pSpriteObjects[uLayingItemID].uType; + v112 = 0; + for (v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID) + v112 = v110; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v112; + if (!v112) + SpriteObject::OnInteraction(uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + v113 = pSpriteObjects[uLayingItemID].uSoundID; + if (v113) + v114 = (signed __int16)v113 + 4; + else + v114 = 0; + v115 = 8 * uLayingItemID; + LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); + v125 = v143 + 1; + pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); + } + else + SpriteObject::OnInteraction(uLayingItemID); + return 0; + } + + case 9040: + { + sub_43A97E(uLayingItemID, a2); + ++pSpriteObjects[uLayingItemID].uType; + v95 = 0; + for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) + v95 = v52; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v95; + if (!v95) + SpriteObject::OnInteraction(uLayingItemID); + v96 = pSpriteObjects[uLayingItemID].uSoundID; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + if (!v96) + v97 = 0; + else + v97 = (signed __int16)v96 + 4; + v124 = 8 * uLayingItemID; + LOBYTE(v124) = v124 | 2; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); + return 0; + } + +/* + case 1080: + case 2100: + { + if (PID_TYPE(a2) != 3) + { + //v32 = 0; + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; + v46 = 0; + for (v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID) + v46 = v146; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v46; + if (!v46) + SpriteObject::OnInteraction(uLayingItemID); + v100 = pSpriteObjects[uLayingItemID].field_61; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + v102 = 8 * uLayingItemID; + LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); + if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) + trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v47 = 0; + else + v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); + return 0; + } + return 1; + }*/ + + case 1080: + case 2100: + { + if (PID_TYPE(a2) == 3) + return 1; + //else go to next case + } + + case 1050: + case 9080: + { + v95 = 0; + pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; + for (v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146) + { + if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID) + v95 = v146; + } + pSpriteObjects[uLayingItemID].uObjectDescID = v95; + if (!v95) + SpriteObject::OnInteraction(uLayingItemID); + v100 = pSpriteObjects[uLayingItemID].field_61; + pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; + v102 = 8 * uLayingItemID; + LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); + pSpriteObjects[uLayingItemID].vVelocity.x = 0; + pSpriteObjects[uLayingItemID].vVelocity.y = 0; + pSpriteObjects[uLayingItemID].vVelocity.z = 0; + AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); + if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) + trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); + if (!pSpriteObjects[uLayingItemID].uSoundID) + v47 = 0; + else + v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; + pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); + return 0; + } + + default: + return 0; } - if ( pSpriteObjects[uLayingItemID].uType > 1100 ) - { - v41 = pSpriteObjects[uLayingItemID].uType - 2030; - if ( !v41 ) - goto LABEL_247; - v42 = v41 - 30; - if ( v42 ) - { - v43 = v42 - 40; - if ( v42 == 40 ) - { - if ( PID_TYPE(a2) != 3 ) - { - //v32 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; - v46 = 0; - for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) - v46 = v146; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v46; - if ( !v46 ) - SpriteObject::OnInteraction(uLayingItemID); - v100 = pSpriteObjects[uLayingItemID].field_61; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v102 = 8 * uLayingItemID; - LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); - if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) - trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v47 = 0; - else - v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); - return 0; - } - return 1; - } - v45 = v43 - 910; - v44 = v45 == 0; -LABEL_91: - if ( !v44 && v45 != 20 ) - return 0; - } - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - if ( pSpriteObjects[uLayingItemID].uType == 1100 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v92 = uLayingItemID; - v124 = 8 * v92; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - v26 = pSpriteObjects[uLayingItemID].uType - 600; - if ( pSpriteObjects[uLayingItemID].uType == 600 ) - { - pSpriteObjects[uLayingItemID].uType = 601; - v36 = 0; - for ( v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID ) - v36 = v34; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v36; - if ( !v36 ) - SpriteObject::OnInteraction(uLayingItemID); - v37 = pSpriteObjects[uLayingItemID].vPosition.z; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - v38 = 8 * uLayingItemID; - v39 = pSpriteObjects[uLayingItemID].vPosition.y; - LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - v40 = pSpriteObjects[uLayingItemID].vPosition.x; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v147 = v38; - AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); - if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) - trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); - pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); - return 0; - } - v27 = v26 - 410; - if ( v26 == 410 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v96 = pSpriteObjects[uLayingItemID].uSoundID; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !v96 ) - v97 = 0; - else - v97 = (signed __int16)v96 + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - v28 = v27 - 40; - if ( !v28 ) - { - v95 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; - for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) - v95 = v146; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - v100 = pSpriteObjects[uLayingItemID].field_61; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v102 = 8 * uLayingItemID; - LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); - if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) - trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v47 = 0; - else - v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); - return 0; - } - v29 = v28 - 10; - if ( v29 ) - { - if ( v29 != 20 ) - return 0; - if ( PID_TYPE(a2) != 3 ) - { - //v32 = 0; - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; - v46 = 0; - for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) - v46 = v146; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v46; - if ( !v46 ) - SpriteObject::OnInteraction(uLayingItemID); - v100 = pSpriteObjects[uLayingItemID].field_61; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v102 = 8 * uLayingItemID; - LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); - if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) - trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v47 = 0; - else - v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); - return 0; - } - return 1; - } -LABEL_247: - //v9 = 0; - if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) - return 1; - if ( PID_TYPE(a2) != 2 ) - { - sub_43A97E(uLayingItemID, a2); - ++pSpriteObjects[uLayingItemID].uType; - v95 = 0; - for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) - v95 = v52; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v95; - if ( !v95 ) - SpriteObject::OnInteraction(uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - if ( !pSpriteObjects[uLayingItemID].uSoundID ) - v97 = 0; - else - v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; - v124 = 8 * uLayingItemID; - LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; - pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); - return 0; - } - pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; - v121 = 0; - for ( v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119 ) - { - if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID ) - v121 = v119; - } - pSpriteObjects[uLayingItemID].uObjectDescID = v121; - if ( !v121 ) - SpriteObject::OnInteraction(uLayingItemID); - pSpriteObjects[uLayingItemID].vVelocity.z = 0; - pSpriteObjects[uLayingItemID].vVelocity.y = 0; - pSpriteObjects[uLayingItemID].vVelocity.x = 0; - pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; - v13 = 8 * uLayingItemID; - LOBYTE(v13) = PID(OBJECT_Item,uLayingItemID); - pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); - return 0; + }
--- a/mm7_3.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/mm7_3.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -26,7 +26,7 @@ #include "Timer.h" #include "TurnEngine.h" #include "Events2D.h" -#include "stru176.h" +#include "MapsLongTimer.h" #include "stru298.h" #include "texts.h" #include "Level/Decoration.h" @@ -2650,13 +2650,14 @@ const char *pFilename; // [sp+84h] [bp-Ch]@1 //unsigned int v12; // [sp+88h] [bp-8h]@12 //int v13; // [sp+8Ch] [bp-4h]@11 + int v; pFilename = pLevelFilename; //thisa->AllocSoftwareDrawBuffers(); pODMRenderParams->Initialize(); pWeather->bRenderSnow = false; pRenderer->ClearZBuffer(0, 479); - thisa = (ODMRenderParams *)1; + //thisa = (ODMRenderParams *)1; GetAlertStatus(); if ( _A750D8_player_speech_timer ) _A750D8_player_speech_timer = 0; @@ -2668,14 +2669,14 @@ v3 = v4->uRespawnIntervalDays; } else - v4 = (MapInfo *)thisa; + v4 = (MapInfo *)1; day_attrib &= ~DAY_ATTRIB_FOG; dword_6BE13C_uCurrentlyLoadedLocationID = v2; pOutdoor->Initialize( pFilename, (unsigned int)(signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 0x3C / 0x3C / 0x18 + 1, v3, - (int)&thisa); + &v); if ( !(dword_6BE364_game_settings_1 & GAME_SETTINGS_2000) ) { Actor::InitializeActors(); @@ -2684,8 +2685,8 @@ dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_2000; //v5 = 0; if ( !v2 ) - thisa = 0; - if ( thisa == (ODMRenderParams *)1 ) + v = 0; + if ( v == 1 ) { //v13 = 0; for (uint i = 0; i < pOutdoor->uNumSpawnPoints; ++i) @@ -3444,16 +3445,8 @@ //----- (00443FDC) -------------------------------------------------------- void OnMapLoad() { -// __int16 v4; // cx@9 int v6; // eax@9 unsigned __int64 v8; // qax@26 -// unsigned int v9; // ecx@26 - unsigned __int64 v10; // qax@26 - unsigned __int64 v11; // qax@26 - unsigned __int64 v13; // qax@26 - unsigned __int64 v14; // qax@26 -// int v15; // ST58_4@26 - unsigned __int64 v16; // qax@26 int hours; // ebx@26 unsigned __int64 v18; // [sp+Ch] [bp-44h]@12 unsigned int seconds; // [sp+14h] [bp-3Ch]@26 @@ -3464,10 +3457,6 @@ int v26; // [sp+3Ch] [bp-14h]@15 unsigned int days; // [sp+3Ch] [bp-14h]@26 unsigned int months; // [sp+40h] [bp-10h]@26 -// __int16 v29; // [sp+46h] [bp-Ah]@9 -// __int16 v30; // [sp+48h] [bp-8h]@9 -// __int16 v32; // [sp+4Ch] [bp-4h]@9 -// __int16 v33; // [sp+4Eh] [bp-2h]@9 for (uint i = 0; i < uLevelEVT_NumEvents; ++i) { @@ -3481,28 +3470,28 @@ EventProcessor(pEvent.uEventID, 0, 0, pEvent.event_sequence_num); else if (_evt->_e_type == EVENT_OnTimer || _evt->_e_type == EVENT_Initialize) { - //v3 = &array_5B5928_timers[dword_5B65C8_timers_count]; + //v3 = &MapsLongTimersList[MapsLongTimers_count]; v20 = pOutdoor->loc_time.uLastVisitDay; if (uCurrentlyLoadedLevelType == LEVEL_Indoor) v20 = pIndoor->stru1.uLastVisitDay; - array_5B5928_timers[dword_5B65C8_timers_count].timer_evt_type = _evt->_e_type; - array_5B5928_timers[dword_5B65C8_timers_count].timer_evt_ID = pEvent.uEventID; - array_5B5928_timers[dword_5B65C8_timers_count].timer_evt_seq_num = pEvent.event_sequence_num; - - array_5B5928_timers[dword_5B65C8_timers_count].field_10 = _evt->v5; - array_5B5928_timers[dword_5B65C8_timers_count].field_12 = _evt->v6; - array_5B5928_timers[dword_5B65C8_timers_count].field_14 = _evt->v7; - array_5B5928_timers[dword_5B65C8_timers_count].field_16 = _evt->v8; - array_5B5928_timers[dword_5B65C8_timers_count].field_18 = _evt->v9; - array_5B5928_timers[dword_5B65C8_timers_count].field_1A = _evt->v10; + MapsLongTimersList[MapsLongTimers_count].timer_evt_type = _evt->_e_type; + MapsLongTimersList[MapsLongTimers_count].timer_evt_ID = pEvent.uEventID; + MapsLongTimersList[MapsLongTimers_count].timer_evt_seq_num = pEvent.event_sequence_num; + + MapsLongTimersList[MapsLongTimers_count].YearsInterval = _evt->v5; + MapsLongTimersList[MapsLongTimers_count].MonthsInterval = _evt->v6; + MapsLongTimersList[MapsLongTimers_count].WeeksInterval = _evt->v7; + MapsLongTimersList[MapsLongTimers_count].HoursInterval = _evt->v8; + MapsLongTimersList[MapsLongTimers_count].MinutesInterval = _evt->v9; + MapsLongTimersList[MapsLongTimers_count].SecondsInterval = _evt->v10; v6 = ((unsigned short)_evt->v12 << 8) + _evt->v11; - array_5B5928_timers[dword_5B65C8_timers_count].time_left_to_fire = ((unsigned short)_evt->v12 << 8) + _evt->v11; - array_5B5928_timers[dword_5B65C8_timers_count].fire_interval = ((unsigned short)_evt->v12 << 8) + _evt->v11; - if (array_5B5928_timers[dword_5B65C8_timers_count].timer_evt_type == EVENT_Initialize && !(short)v6 ) + MapsLongTimersList[MapsLongTimers_count].time_left_to_fire = ((unsigned short)_evt->v12 << 8) + _evt->v11; + MapsLongTimersList[MapsLongTimers_count].IntervalHalfMins = ((unsigned short)_evt->v12 << 8) + _evt->v11; + if (MapsLongTimersList[MapsLongTimers_count].timer_evt_type == EVENT_Initialize && !(short)v6 ) { if ( v20 ) v18 = pParty->uTimePlayed - v20; @@ -3510,13 +3499,13 @@ v18 = 0; v26 = (signed int)(signed __int64)((double)(signed __int64)v18 * 0.234375) / 60 / 60 / 24; - if ( v26 / 7 / 4 / 12 != 0 && array_5B5928_timers[dword_5B65C8_timers_count].field_10 || - v26 / 7 / 4 != 0 && array_5B5928_timers[dword_5B65C8_timers_count].field_12 != 0 || - v26 / 7 != 0 && array_5B5928_timers[dword_5B65C8_timers_count].field_14 != 0 || + if ( v26 / 7 / 4 / 12 != 0 && MapsLongTimersList[MapsLongTimers_count].YearsInterval || + v26 / 7 / 4 != 0 && MapsLongTimersList[MapsLongTimers_count].MonthsInterval != 0 || + v26 / 7 != 0 && MapsLongTimersList[MapsLongTimers_count].WeeksInterval != 0 || v26 != 0 || !v20) { - ++dword_5B65C8_timers_count; - array_5B5928_timers[dword_5B65C8_timers_count].next_fire_time = 0; + ++MapsLongTimers_count; + MapsLongTimersList[MapsLongTimers_count].NextStartTime = 0; continue; } } @@ -3524,32 +3513,27 @@ { v8 = (__int64)((double)pParty->uTimePlayed * 0.234375); seconds = v8 % 60; - v10 = v8 / 60; - minutes = v10 % 60; - v11 = v10 / 60; - hours = v11 % 24; - v13 = v11 / 24; - days = v13 % 7; - v14 = v13 / 7; - weeks = v14 % 4; - v16 = v14 / 4; - months = v16 % 12; - years = v16 / 12; - - if ( array_5B5928_timers[dword_5B65C8_timers_count].field_10 ) + minutes = (v8 / 60) % 60; + hours = ((v8 / 60) / 60) % 24; + days = (((v8 / 60) / 60) / 24) % 7; + weeks = ((((v8 / 60) / 60) / 24) / 7) % 4; + months = (((((v8 / 60) / 60) / 24) / 7) / 4) % 12; + years = (((((v8 / 60) / 60) / 24) / 7) / 4) / 12; + + if ( MapsLongTimersList[MapsLongTimers_count].YearsInterval ) ++years; - else if ( array_5B5928_timers[dword_5B65C8_timers_count].field_12 ) + else if ( MapsLongTimersList[MapsLongTimers_count].MonthsInterval ) ++months; - else if ( array_5B5928_timers[dword_5B65C8_timers_count].field_14 ) + else if ( MapsLongTimersList[MapsLongTimers_count].WeeksInterval ) ++weeks; else { ++days; - minutes = array_5B5928_timers[dword_5B65C8_timers_count].field_18; - hours = array_5B5928_timers[dword_5B65C8_timers_count].field_16; - seconds = array_5B5928_timers[dword_5B65C8_timers_count].field_1A; + hours = MapsLongTimersList[MapsLongTimers_count].HoursInterval; + minutes = MapsLongTimersList[MapsLongTimers_count].MinutesInterval; + seconds = MapsLongTimersList[MapsLongTimers_count].SecondsInterval; } - array_5B5928_timers[dword_5B65C8_timers_count].next_fire_time = (signed __int64)((double)((seconds + MapsLongTimersList[MapsLongTimers_count].NextStartTime = (signed __int64)((double)((seconds + 60 * minutes + 3600 * hours + 86400 * days @@ -3558,7 +3542,7 @@ + 29030400 * years) << 7) * 0.033333335); - ++dword_5B65C8_timers_count; + ++MapsLongTimers_count; } } } @@ -3797,10 +3781,10 @@ _5773B8_event_timer = pParty->uTimePlayed; - for (uint i = 0; i < dword_5B65C8_timers_count; ++i) + for (uint i = 0; i < MapsLongTimers_count; ++i) { //v4 = (char *)&array_5B5928_timers[0].field_C; - stru176* timer = &array_5B5928_timers[i]; + MapsLongTimer* timer = &MapsLongTimersList[i]; //while ( 1 ) //{ //v5 = *(short *)v4; @@ -3810,25 +3794,25 @@ timer->time_left_to_fire -= v13; else { - timer->time_left_to_fire = timer->fire_interval; + timer->time_left_to_fire = timer->IntervalHalfMins; EventProcessor(timer->timer_evt_ID, 0, 1, timer->timer_evt_seq_num); } } else { - if (timer->next_fire_time < pParty->uTimePlayed) + if (timer->NextStartTime < pParty->uTimePlayed) { uint next_trigger_time = 1 * 60 * 60 * 24; // 1 day - if (timer->field_10) + if (timer->YearsInterval) next_trigger_time = 336 * 60 * 60 * 24; // 1 year - else if (timer->field_12) + else if (timer->MonthsInterval) next_trigger_time = 28 * 60 * 60 * 24; // 1 month - else if (timer->field_14) + else if (timer->WeeksInterval) next_trigger_time = 7 * 60 * 60 * 24; // 1 week - timer->next_fire_time += (next_trigger_time * 128) / 3.0f; - if (timer->next_fire_time < pParty->uTimePlayed) // make sure in wont fire several times in a row if big time interval has lapsed - timer->next_fire_time = pParty->uTimePlayed; + timer->NextStartTime += (next_trigger_time * 128) / 3.0f; + if (timer->NextStartTime < pParty->uTimePlayed) // make sure in wont fire several times in a row if big time interval has lapsed + timer->NextStartTime = pParty->uTimePlayed; EventProcessor(timer->timer_evt_ID, 0, 1, timer->timer_evt_seq_num); }
--- a/mm7_5.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/mm7_5.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -114,7 +114,7 @@ v15 = pActors[target_id].vPosition.y - AttackerInfo.pYs[attacker_id]; a1 = pActors[target_id].vPosition.x - AttackerInfo.pXs[attacker_id]; v44 = pActors[target_id].vPosition.z; - v19 = AttackerInfo.pYs[attacker_id] + pActors[target_id].uActorRadius; + v19 = AttackerInfo.field_324[attacker_id] + pActors[target_id].uActorRadius; v48 = v15; if ( a1 * a1 + v15 * v15 + (pActors[target_id].vPosition.z + (pActors[target_id].uActorHeight >> 1) - AttackerInfo.pZs[attacker_id]) * (pActors[target_id].vPosition.z + (pActors[target_id].uActorHeight >> 1) - AttackerInfo.pZs[attacker_id]) < (unsigned int)(v19 * v19) ) @@ -167,7 +167,7 @@ v48 = pActors[actorID].vPosition.y - AttackerInfo.pYs[attacker_id]; v44 = pActors[actorID].vPosition.z; v32 = (pActors[actorID].uActorHeight / 2) - AttackerInfo.pZs[attacker_id]; - v33 = pActors[actorID].uActorRadius + AttackerInfo.pYs[attacker_id]; + v33 = pActors[actorID].uActorRadius + AttackerInfo.field_324[attacker_id]; if ( a1 * a1 + v48 * v48 + (v31 + v32) * (v31 + v32) < (unsigned int)(v33 * v33) ) { attacker_coord.x = AttackerInfo.pXs[attacker_id];
--- a/mm7_data.cpp Thu Jul 10 01:34:57 2014 +0200 +++ b/mm7_data.cpp Thu Jul 10 01:37:41 2014 +0200 @@ -222,8 +222,8 @@ 0x00000031, 0x00000031, 0x0000002D, 0x00000041 }}; -#include "stru176.h" -stru176 array_5B5928_timers[100]; +#include "MapsLongTimer.h" +MapsLongTimer MapsLongTimersList[100]; #include "ObjectList.h" struct ObjectList *pObjectList; @@ -873,7 +873,7 @@ int dword_5B65BC; // weak int dword_5B65C0; // weak int dword_5B65C4_cancelEventProcessing; // weak -int dword_5B65C8_timers_count; // weak +int MapsLongTimers_count; // dword_5B65C8 счётчик таймеров для колодцев, фаерволов-ловушек int npcIdToDismissAfterDialogue; // weak signed int dword_5B65D0_dialogue_actor_npc_id; // weak int dword_5C3418; // weak
--- a/mm7_data.h Thu Jul 10 01:34:57 2014 +0200 +++ b/mm7_data.h Thu Jul 10 01:37:41 2014 +0200 @@ -537,7 +537,7 @@ extern int dword_5B65BC; // weak extern int dword_5B65C0; // weak extern int dword_5B65C4_cancelEventProcessing; // weak -extern int dword_5B65C8_timers_count; // weak +extern int MapsLongTimers_count; // dword_5B65C8 extern int npcIdToDismissAfterDialogue; // weak extern int dword_5B65D0_dialogue_actor_npc_id; // weak extern int dword_5C3418; // weak
--- a/stru176.h Thu Jul 10 01:34:57 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -#pragma once - - -/* 169 */ -#pragma pack(push, 1) -struct stru176 -{ - __int64 next_fire_time; // timer will either fire event at this time (type 2, field_C == 0) - __int16 timer_evt_ID; - __int16 timer_evt_seq_num; - __int16 time_left_to_fire; - __int16 fire_interval; // or fire on these intervals (type 1) - __int16 field_10; - __int16 field_12; - __int16 field_14; - __int16 field_16; - __int16 field_18; - __int16 field_1A; - __int16 timer_evt_type; - __int16 field_1E; -}; -#pragma pack(pop) -extern stru176 array_5B5928_timers[100]; -