From 5edd9e75da54534fe48c779d4f6c6cd17535be10 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 1 Nov 2020 18:21:05 +0300 Subject: [PATCH 1/2] finished script and replay --- src/control/Replay.cpp | 10 ++++++---- src/control/Replay.h | 3 ++- src/control/Script.cpp | 16 +++++++++------- src/peds/Ped.cpp | 14 ++++++++++++++ src/peds/Ped.h | 1 + src/render/Fluff.cpp | 2 +- 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp index 4fdd3439..e28bbf35 100644 --- a/src/control/Replay.cpp +++ b/src/control/Replay.cpp @@ -53,7 +53,7 @@ #include "Fluff.h" #include "WaterCreatures.h" -//--MIAMI: file done except TODO +//--MIAMI: file done uint8 CReplay::Mode; CAddressInReplayBuffer CReplay::Record; @@ -158,7 +158,7 @@ static void(*CBArray[])(CAnimBlendAssociation*, void*) = &CPed::FinishedAttackCB, &CPed::FinishFightMoveCB, &PhonePutDownCB, &PhonePickUpCB, &CPed::PedAnimDoorCloseRollingCB, &CPed::FinishJumpCB, &CPed::PedLandCB, &CPed::RestoreHeadingRateCB, &CPed::PedSetQuickDraggedOutCarPositionCB, &CPed::PedSetDraggedOutCarPositionCB, - &CPed::PedSetPreviousStateCB, &CPed::FinishedReloadCB, /*&CPed::PedSetGetInCarPositionCB, TODO(MIAMI)*/ + &CPed::PedSetPreviousStateCB, &CPed::FinishedReloadCB, &CPed::PedSetGetInCarPositionCB, &CPed::PedAnimShuffleCB, &CPed::DeleteSunbatheIdleAnimCB, &StartTalkingOnMobileCB, &FinishTalkingOnMobileCB }; @@ -396,7 +396,8 @@ void CReplay::RecordThisFrame(void) misc->cam_shake_start = TheCamera.m_uiCamShakeStart; misc->cam_shake_strength = TheCamera.m_fCamShakeForce; misc->cur_area = CGame::currArea; - //misc->special_fx_flags; // TODO(MIAMI)!!! + misc->video_cam = CSpecialFX::bVideoCam; + misc->lift_cam = CSpecialFX::bLiftCam; Record.m_nOffset += sizeof(*misc); tEndOfFramePacket* eof = (tEndOfFramePacket*)&Record.m_pBase[Record.m_nOffset]; eof->type = REPLAYPACKET_ENDOFFRAME; @@ -1139,7 +1140,8 @@ bool CReplay::PlayBackThisFrameInterpolation(CAddressInReplayBuffer *buffer, flo tMiscPacket* pm = (tMiscPacket*)&ptr[offset]; TheCamera.m_uiCamShakeStart = pm->cam_shake_start; TheCamera.m_fCamShakeForce = pm->cam_shake_strength; - // TODO(MIAMI): SpecialFX + CSpecialFX::bVideoCam = pm->video_cam; + CSpecialFX::bLiftCam = pm->lift_cam; CGame::currArea = pm->cur_area; buffer->m_nOffset += sizeof(tMiscPacket); break; diff --git a/src/control/Replay.h b/src/control/Replay.h index 42d6ad1a..319d8bd4 100644 --- a/src/control/Replay.h +++ b/src/control/Replay.h @@ -263,7 +263,8 @@ class CReplay uint32 cam_shake_start; float cam_shake_strength; uint8 cur_area; - uint8 special_fx_flags; + uint8 video_cam : 1; + uint8 lift_cam : 1; }; VALIDATE_SIZE(tMiscPacket, 16); diff --git a/src/control/Script.cpp b/src/control/Script.cpp index f85fc076..7c6082c8 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -88,6 +88,8 @@ #include #endif +//--MIAMI: file done + #define PICKUP_PLACEMENT_OFFSET 0.5f #define PED_FIND_Z_OFFSET 5.0f #define COP_PED_FIND_Z_OFFSET 10.0f @@ -15751,7 +15753,7 @@ INITSAVEBUF uint32 script_data_size = SCRIPT_DATA_SIZE; WriteSaveBuf(buf, script_data_size); WriteSaveBuf(buf, OnAMissionFlag); - WriteSaveBuf(buf, NextFreeCollectiveIndex); + WriteSaveBuf(buf, LastMissionPassedTime); for (uint32 i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) { CBuilding* pBuilding = BuildingSwapArray[i].m_pBuilding; uint32 type, handle; @@ -15801,12 +15803,12 @@ INITSAVEBUF WriteSaveBuf(buf, handle); } WriteSaveBuf(buf, bUsingAMultiScriptFile); - WriteSaveBuf(buf, (uint8)0); + WriteSaveBuf(buf, bPlayerHasMetDebbieHarry); WriteSaveBuf(buf, (uint16)0); WriteSaveBuf(buf, MainScriptSize); WriteSaveBuf(buf, LargestMissionScriptSize); WriteSaveBuf(buf, NumberOfMissionScripts); - WriteSaveBuf(buf, (uint16)0); + WriteSaveBuf(buf, NumberOfExclusiveMissionScripts); WriteSaveBuf(buf, runningScripts); for (CRunningScript* pScript = pActiveScripts; pScript; pScript = pScript->GetNext()) pScript->Save(buf); @@ -15823,7 +15825,7 @@ INITSAVEBUF ScriptSpace[i] = ReadSaveBuf(buf); script_assert(ReadSaveBuf(buf) == SCRIPT_DATA_SIZE); OnAMissionFlag = ReadSaveBuf(buf); - NextFreeCollectiveIndex = ReadSaveBuf(buf); + LastMissionPassedTime = ReadSaveBuf(buf); for (uint32 i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) { uint32 type = ReadSaveBuf(buf); uint32 handle = ReadSaveBuf(buf); @@ -15871,12 +15873,12 @@ INITSAVEBUF InvisibilitySettingArray[i]->bIsVisible = false; } script_assert(ReadSaveBuf(buf) == bUsingAMultiScriptFile); - ReadSaveBuf(buf); + bPlayerHasMetDebbieHarry = ReadSaveBuf(buf); ReadSaveBuf(buf); script_assert(ReadSaveBuf(buf) == MainScriptSize); script_assert(ReadSaveBuf(buf) == LargestMissionScriptSize); script_assert(ReadSaveBuf(buf) == NumberOfMissionScripts); - ReadSaveBuf(buf); + script_assert(ReadSaveBuf(buf) == NumberOfExclusiveMissionScripts); uint32 runningScripts = ReadSaveBuf(buf); for (uint32 i = 0; i < runningScripts; i++) StartNewScript(0)->Load(buf); @@ -16103,7 +16105,7 @@ void CTheScripts::CleanUpThisObject(CObject* pObject) if (pObject->ObjectCreatedBy != MISSION_OBJECT) return; pObject->ObjectCreatedBy = TEMP_OBJECT; - pObject->m_nEndOfLifeTime = CTimer::GetTimeInMilliseconds() + 20000; + pObject->m_nEndOfLifeTime = CTimer::GetTimeInMilliseconds() + 20000000; pObject->m_nRefModelIndex = -1; pObject->bUseVehicleColours = false; ++CObject::nNoTempObjects; diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 03c0bf2c..15eb79b6 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -21440,3 +21440,17 @@ CPed::SetLook(float direction) SetLookFlag(direction, false); } } + +// --MIAMI: Done +// Unused +void CPed::PedSetGetInCarPositionCB(CAnimBlendAssociation* assoc, void* arg) +{ + CPed* pPed = (CPed*)arg; + CMatrix mat(pPed->GetMatrix()); + CVehicle* pVehicle = pPed->m_pMyVehicle; + const CVector& offset = (pVehicle->bIsVan && (pPed->m_vehEnterType == CAR_DOOR_RR || pPed->m_vehEnterType == CAR_DOOR_LR)) ? vecPedVanRearDoorAnimOffset : vecPedCarDoorAnimOffset; + CVector position = Multiply3x3(mat, offset) + pPed->GetPosition(); + CPedPlacement::FindZCoorForPed(&position); + pPed->SetMoveSpeed(0.0f, 0.0f, 0.0f); + pPed->SetPosition(position); +} diff --git a/src/peds/Ped.h b/src/peds/Ped.h index 1f0e9243..aa0a69db 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -911,6 +911,7 @@ public: static void DeleteSunbatheIdleAnimCB(CAnimBlendAssociation *assoc, void *arg); static void PedSetPreviousStateCB(CAnimBlendAssociation *assoc, void *arg); static void PedAnimShuffleCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetGetInCarPositionCB(CAnimBlendAssociation* assoc, void* arg); bool IsPlayer(void); bool IsFemale(void) { return m_nPedType == PEDTYPE_CIVFEMALE || m_nPedType == PEDTYPE_PROSTITUTE; } diff --git a/src/render/Fluff.cpp b/src/render/Fluff.cpp index 4874bf04..3c0d3708 100644 --- a/src/render/Fluff.cpp +++ b/src/render/Fluff.cpp @@ -418,7 +418,7 @@ void CMovingThings::Init() } CEscalators::Init(); - aScrollBars[0].Init(CVector(-1069.209f, 1320.126f, 18.848f), CVector(-1069.209f, 1342.299f, 22.612), SCROLL_ARENA_STRING, 128, 255, 0, 0.3f); + aScrollBars[0].Init(CVector(-1069.209f, 1320.126f, 18.848f), CVector(-1069.209f, 1342.299f, 22.612f), SCROLL_ARENA_STRING, 128, 255, 0, 0.3f); } void CMovingThings::Shutdown() From bae6c242090ec2a40fab2b58a420892c3b2c7c20 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Mon, 2 Nov 2020 15:54:42 +0300 Subject: [PATCH 2/2] fix --- src/control/Script.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 7c6082c8..f9935e21 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -9115,12 +9115,16 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) switch (pPed->m_vehEnterType) { case CAR_DOOR_LF: flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR; + break; case CAR_DOOR_LR: flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_RF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR; + break; case CAR_DOOR_RF: flags = CAR_DOOR_FLAG_RF; + break; case CAR_DOOR_RR: flags = CAR_DOOR_FLAG_RR; + break; } } pPed->m_pMyVehicle->m_nGettingOutFlags &= ~flags;