From 0ac3477035e0bf217eeb33f25a265faa391cf1af Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 26 May 2020 18:50:27 +0200 Subject: [PATCH 1/6] fix UB shit --- src/core/Camera.cpp | 2 +- src/render/Sprite.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index 35d230dc..53bee20f 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -3218,7 +3218,7 @@ CCamera::GetLookDirection(void) Cams[ActiveCam].Mode == CCam::MODE_BEHINDBOAT || Cams[ActiveCam].Mode == CCam::MODE_FOLLOWPED) return Cams[ActiveCam].DirectionWasLooking; - return LOOKING_FORWARD;; + return LOOKING_FORWARD; } bool diff --git a/src/render/Sprite.cpp b/src/render/Sprite.cpp index 1dd1aaab..0789769a 100644 --- a/src/render/Sprite.cpp +++ b/src/render/Sprite.cpp @@ -22,8 +22,8 @@ CSprite::CalcHorizonCoors(void) bool CSprite::CalcScreenCoors(const RwV3d &in, RwV3d *out, float *outw, float *outh, bool farclip) { - CVector viewvec = TheCamera.m_viewMatrix * *(CVector*)∈ - *out = *(RwV3d*)&viewvec; + CVector viewvec = TheCamera.m_viewMatrix * in; + *out = viewvec; if(out->z <= CDraw::GetNearClipZ() + 1.0f) return false; if(out->z >= CDraw::GetFarClipZ() && farclip) return false; float recip = 1.0f/out->z; From 4f1ce8bd4272186bb7a40fd88bf8d4f772f9fbfd Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 26 May 2020 20:44:03 +0200 Subject: [PATCH 2/6] added some unused enums --- src/vehicles/Automobile.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/vehicles/Automobile.h b/src/vehicles/Automobile.h index a2ff2616..0c02379f 100644 --- a/src/vehicles/Automobile.h +++ b/src/vehicles/Automobile.h @@ -36,7 +36,14 @@ enum eCarPositions CAR_POS_TAILLIGHTS, CAR_POS_FRONTSEAT, CAR_POS_BACKSEAT, - CAR_POS_EXHAUST = 9, + // these are unused so we don't know the actual values + CAR_POS_REVERSELIGHTS, + CAR_POS_BRAKELIGHTS, + CAR_POS_INDICATORS_FRONT, + CAR_POS_INDICATORS_BACK, + CAR_POS_STEERWHEEL, + // + CAR_POS_EXHAUST }; // These are used for all the wheel arrays From 7a79b74778b883f21ed202fa15143217f5c2422e Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Wed, 27 May 2020 03:33:27 +0300 Subject: [PATCH 3/6] Restore original logic --- src/audio/AudioLogic.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 56e602fd..ab135877 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -8552,12 +8552,12 @@ const MissionAudioData MissionAudioNameSfxAssoc[] = { {"door_1", STREAMED_SOUND_MISSION_DOOR_1}, {"door_2", STREAMED_SOUND_MISSION_DOOR_2}, {"door_3", STREAMED_SOUND_MISSION_DOOR_3}, {"door_4", STREAMED_SOUND_MISSION_DOOR_4}, {"door_5", STREAMED_SOUND_MISSION_DOOR_5}, {"door_6", STREAMED_SOUND_MISSION_DOOR_6}, {"t3_a", STREAMED_SOUND_MISSION_T3_A}, {"t3_b", STREAMED_SOUND_MISSION_T3_B}, {"t3_c", STREAMED_SOUND_MISSION_T3_C}, - {"k1_b", STREAMED_SOUND_MISSION_K1_B}, {"c_1", STREAMED_SOUND_MISSION_CAT1}}; + {"k1_b", STREAMED_SOUND_MISSION_K1_B}, {"c_1", STREAMED_SOUND_MISSION_CAT1}, {nil, 0}}; int32 FindMissionAudioSfx(const char *name) { - for (uint32 i = 0; i < ARRAY_SIZE(MissionAudioNameSfxAssoc); ++i) { + for (uint32 i = 0; MissionAudioNameSfxAssoc[i].m_pName != nil; ++i) { if (!CGeneral::faststricmp(MissionAudioNameSfxAssoc[i].m_pName, name)) return MissionAudioNameSfxAssoc[i].m_nId; } From 926281f9097ee754ccf1467ca4ef0a7c73a607b8 Mon Sep 17 00:00:00 2001 From: aap Date: Wed, 27 May 2020 06:49:29 +0200 Subject: [PATCH 4/6] MT function for fakerw --- src/fakerw/fake.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fakerw/fake.cpp b/src/fakerw/fake.cpp index 71646020..0c85728b 100644 --- a/src/fakerw/fake.cpp +++ b/src/fakerw/fake.cpp @@ -615,8 +615,8 @@ RpGeometry *RpGeometryCreateSpace(RwReal radius); RpMorphTarget *RpMorphTargetSetBoundingSphere(RpMorphTarget *morphTarget, const RwSphere *boundingSphere) { morphTarget->boundingSphere = *boundingSphere; return morphTarget; } RwSphere *RpMorphTargetGetBoundingSphere(RpMorphTarget *morphTarget) { return &morphTarget->boundingSphere; } const RpMorphTarget *RpMorphTargetCalcBoundingSphere(const RpMorphTarget *morphTarget, RwSphere *boundingSphere) { *boundingSphere = morphTarget->calculateBoundingSphere(); return morphTarget; } -RwInt32 RpGeometryAddMorphTargets(RpGeometry *geometry, RwInt32 mtcount); -RwInt32 RpGeometryAddMorphTarget(RpGeometry *geometry); +RwInt32 RpGeometryAddMorphTargets(RpGeometry *geometry, RwInt32 mtcount) { RwInt32 n = geometry->numMorphTargets; geometry->addMorphTargets(mtcount); return n; } +RwInt32 RpGeometryAddMorphTarget(RpGeometry *geometry) { return RpGeometryAddMorphTargets(geometry, 1); } RpGeometry *RpGeometryRemoveMorphTarget(RpGeometry *geometry, RwInt32 morphTarget); RwInt32 RpGeometryGetNumMorphTargets(const RpGeometry *geometry); RpMorphTarget *RpGeometryGetMorphTarget(const RpGeometry *geometry, RwInt32 morphTarget) { return &geometry->morphTargets[morphTarget]; } From 1af4edd43a902b127b4c4f0f5bdd6596c886214d Mon Sep 17 00:00:00 2001 From: aap Date: Wed, 27 May 2020 09:47:21 +0200 Subject: [PATCH 5/6] RwCameraGetCurrentCamera --- src/extras/debugmenu.cpp | 12 +++--------- src/fakerw/fake.cpp | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/extras/debugmenu.cpp b/src/extras/debugmenu.cpp index f6b6eeb8..3a4c4175 100644 --- a/src/extras/debugmenu.cpp +++ b/src/extras/debugmenu.cpp @@ -1028,12 +1028,6 @@ DebugMenuProcess(void) } -#ifdef LIBRW -#define CURRENTCAM (rw::engine->currentCamera) -#else -#define CURRENTCAM ((RwCamera*)RWSRCGLOBAL(curCamera)) -#endif - void DebugMenuRender(void) { @@ -1048,7 +1042,7 @@ DebugMenuRender(void) RwRenderStateSet(rwRENDERSTATEFOGENABLE, 0); RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE); - RwCamera *cam = CURRENTCAM; + RwCamera *cam = RwCameraGetCurrentCamera(); screenWidth = RwRasterGetWidth(RwCameraGetRaster(cam)); screenHeight = RwRasterGetHeight(RwCameraGetRaster(cam)); @@ -1080,7 +1074,7 @@ drawArrow(RwRect r, int direction, int style) static RwImVertexIndex indices[] = { 0, 1, 2, 2, 1, 3 }; static RwIm2DVertex arrowVerts[4]; - RwCamera *cam = CURRENTCAM; + RwCamera *cam = RwCameraGetCurrentCamera(); float recipz = 1.0f/RwCameraGetNearClipPlane(cam); int width = RwRasterGetWidth(arrow); @@ -1183,7 +1177,7 @@ drawMouse(void) static RwIm2DVertex vertices[4]; RwIm2DVertex *vert; RwCamera *cam; - cam = CURRENTCAM; + cam = RwCameraGetCurrentCamera(); float x = mouseX; float y = mouseY; float w = RwRasterGetWidth(cursor); diff --git a/src/fakerw/fake.cpp b/src/fakerw/fake.cpp index 0c85728b..08d106f4 100644 --- a/src/fakerw/fake.cpp +++ b/src/fakerw/fake.cpp @@ -152,7 +152,7 @@ RwReal RwCameraGetNearClipPlane(const RwCamera *camera) { return camera->n RwReal RwCameraGetFarClipPlane(const RwCamera *camera) { return camera->farPlane; } RwCamera *RwCameraSetFogDistance(RwCamera *camera, RwReal fogDistance) { camera->fogPlane = fogDistance; return camera; } RwReal RwCameraGetFogDistance(const RwCamera *camera) { return camera->fogPlane; } -RwCamera *RwCameraGetCurrentCamera(void); +RwCamera *RwCameraGetCurrentCamera(void) { return rw::engine->currentCamera; } RwCameraProjection RwCameraGetProjection(const RwCamera *camera); const RwV2d *RwCameraGetViewWindow(const RwCamera *camera) { return &camera->viewWindow; } RwMatrix *RwCameraGetViewMatrix(RwCamera *camera) { return &camera->viewMatrix; } From 3a5a12288755a90cf274b04c591e4ba38bf8f1c7 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Wed, 27 May 2020 20:48:47 +0300 Subject: [PATCH 6/6] Fix city sound playing on restarting a new game --- src/audio/MusicManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp index 8e8e9c24..b8d6dc03 100644 --- a/src/audio/MusicManager.cpp +++ b/src/audio/MusicManager.cpp @@ -301,14 +301,14 @@ cMusicManager::GetRadioInCar(void) CVehicle *veh = FindPlayerVehicle(); if (veh != nil){ if (UsesPoliceRadio(veh)) { - if (m_nRadioInCar == NO_STREAMED_SOUND || CReplay::IsPlayingBack() && AudioManager.m_nUserPause) + if (m_nRadioInCar == NO_STREAMED_SOUND || (CReplay::IsPlayingBack() && AudioManager.m_nUserPause == 0)) return POLICE_RADIO; return m_nRadioInCar; } else return veh->m_nRadioStation; } } - if (m_nRadioInCar == NO_STREAMED_SOUND || CReplay::IsPlayingBack() && AudioManager.m_nUserPause) + if (m_nRadioInCar == NO_STREAMED_SOUND || (CReplay::IsPlayingBack() && AudioManager.m_nUserPause == 0)) return RADIO_OFF; return m_nRadioInCar; }