summaryrefslogtreecommitdiff
path: root/src/control/Remote.cpp
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
committerclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
commit9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686 (patch)
treea84756b82513739a2672db3a1f0ec579db6d18ff /src/control/Remote.cpp
downloadre3-miami.tar.gz
re3-miami.zip
Import Cai1Hsu/re3 @ miami (reVC / GTA:VC decompilation)HEADmiami
Snapshot import (no upstream history) into git.ancap.in.ua/claude, per @lzcnt. Source: https://github.com/Cai1Hsu/re3 branch miami.
Diffstat (limited to 'src/control/Remote.cpp')
-rw-r--r--src/control/Remote.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/control/Remote.cpp b/src/control/Remote.cpp
new file mode 100644
index 0000000..047b19f
--- /dev/null
+++ b/src/control/Remote.cpp
@@ -0,0 +1,58 @@
+#include "common.h"
+
+#include "Automobile.h"
+#include "CarCtrl.h"
+#include "Camera.h"
+#include "Remote.h"
+#include "Timer.h"
+#include "World.h"
+#include "PlayerInfo.h"
+#include "Vehicle.h"
+
+void
+CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uint16 model)
+{
+ CAutomobile *car = new CAutomobile(model, MISSION_VEHICLE);
+ bool found;
+
+ z = car->GetDistanceFromCentreOfMassToBaseOfModel() + CWorld::FindGroundZFor3DCoord(x, y, z + 2.0f, &found);
+
+ car->GetMatrix().SetRotateZOnly(rot);
+ car->SetPosition(x, y, z);
+ car->SetStatus(STATUS_PLAYER_REMOTE);
+ car->bIsLocked = true;
+
+ CCarCtrl::JoinCarWithRoadSystem(car);
+ car->AutoPilot.m_nCarMission = MISSION_NONE;
+ car->AutoPilot.m_nTempAction = TEMPACT_NONE;
+ car->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
+ car->AutoPilot.m_nCruiseSpeed = car->AutoPilot.m_fMaxTrafficSpeed = 9.0f;
+ car->AutoPilot.m_nNextLane = car->AutoPilot.m_nCurrentLane = 0;
+ car->bEngineOn = true;
+ CWorld::Add(car);
+ if (FindPlayerVehicle() != nil)
+ FindPlayerVehicle()->SetStatus(STATUS_PLAYER_DISABLED);
+
+ CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = car;
+ CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle);
+ if (car->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE || car->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI) {
+ TheCamera.TakeControl(car, CCam::MODE_CAM_ON_A_STRING, INTERPOLATION, CAMCONTROL_SCRIPT);
+ TheCamera.SetZoomValueCamStringScript(0);
+ } else
+ TheCamera.TakeControl(car, CCam::MODE_BEHINDCAR, INTERPOLATION, CAMCONTROL_SCRIPT);
+}
+
+void
+CRemote::TakeRemoteControlledCarFromPlayer(bool blowUp)
+{
+ if (CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy == MISSION_VEHICLE) {
+ CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy = RANDOM_VEHICLE;
+ CCarCtrl::NumMissionCars--;
+ CCarCtrl::NumRandomCars++;
+ }
+ CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bIsLocked = false;
+ CWorld::Players[CWorld::PlayerInFocus].m_nTimeLostRemoteCar = CTimer::GetTimeInMilliseconds();
+ CWorld::Players[CWorld::PlayerInFocus].m_bInRemoteMode = true;
+ CWorld::Players[CWorld::PlayerInFocus].field_D5 = blowUp;
+ CWorld::Players[CWorld::PlayerInFocus].field_D6 = true;
+}