Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
Merge branch 'master' of https://github.com/gtamodding/re3
  • Loading branch information
gennariarmando committed Jul 7, 2019
2 parents 0ac6d05 + 53023eb commit d1c6a6aaa6c17250e069d1267b27e13303d6e20f
Showing with 389 additions and 187 deletions.
  1. +23 −14 premake5.lua
  2. +1 −1 src/animation/AnimBlendAssociation.h
  3. +1 −1 src/animation/AnimManager.cpp
  4. +2 −2 src/control/{PhoneInfo.cpp → Phones.cpp}
  5. 0 src/control/{PhoneInfo.h → Phones.h}
  6. +3 −3 src/control/Replay.cpp
  7. +2 −2 src/control/Replay.h
  8. +145 −6 src/control/Script.cpp
  9. +14 −2 src/control/Script.h
  10. +1 −1 src/{ → core}/Camera.cpp
  11. 0 src/{ → core}/Camera.h
  12. 0 src/{ → core}/CdStream.cpp
  13. 0 src/{ → core}/CdStream.h
  14. 0 src/{ → core}/Clock.cpp
  15. 0 src/{ → core}/Clock.h
  16. +1 −1 src/{ → core}/Collision.cpp
  17. 0 src/{ → core}/Collision.h
  18. 0 src/{ → core}/ControllerConfig.cpp
  19. 0 src/{ → core}/ControllerConfig.h
  20. 0 src/{ → core}/CutsceneMgr.cpp
  21. 0 src/{ → core}/CutsceneMgr.h
  22. 0 src/{ → core}/Directory.cpp
  23. 0 src/{ → core}/Directory.h
  24. +1 −1 src/{ → core}/FileLoader.cpp
  25. 0 src/{ → core}/FileLoader.h
  26. 0 src/{ → core}/FileMgr.cpp
  27. 0 src/{ → core}/FileMgr.h
  28. 0 src/{ → core}/Fire.cpp
  29. 0 src/{ → core}/Fire.h
  30. 0 src/{ → core}/Frontend.cpp
  31. 0 src/{ → core}/Frontend.h
  32. 0 src/{ → core}/Game.cpp
  33. 0 src/{ → core}/Game.h
  34. 0 src/{ → core}/General.h
  35. 0 src/{ → core}/Lists.cpp
  36. 0 src/{ → core}/Lists.h
  37. 0 src/{ → core}/MenuScreens.h
  38. 0 src/{ → core}/Messages.cpp
  39. 0 src/{ → core}/Messages.h
  40. 0 src/{ → core}/NodeName.cpp
  41. 0 src/{ → core}/NodeName.h
  42. 0 src/{ → core}/PCSave.cpp
  43. 0 src/{ → core}/PCSave.h
  44. 0 src/{ → core}/Pad.cpp
  45. +64 −64 src/{ → core}/Pad.h
  46. 0 src/{ → core}/Placeable.cpp
  47. 0 src/{ → core}/Placeable.h
  48. 0 src/{entities → core}/PlayerInfo.cpp
  49. 0 src/{entities → core}/PlayerInfo.h
  50. 0 src/{entities → core}/PlayerSkin.cpp
  51. 0 src/{entities → core}/PlayerSkin.h
  52. 0 src/{ → core}/Pools.cpp
  53. 0 src/{ → core}/Pools.h
  54. 0 src/{ → core}/Radar.cpp
  55. 0 src/{ → core}/Radar.h
  56. 0 src/{ → core}/References.cpp
  57. 0 src/{ → core}/References.h
  58. 0 src/{ → core}/RwClumpRead.cpp
  59. 0 src/{ → core}/RwHelper.cpp
  60. 0 src/{ → core}/RwHelper.h
  61. 0 src/{ → core}/RwMatFX.cpp
  62. 0 src/{ → core}/RwTexRead.cpp
  63. 0 src/{ → core}/Stats.cpp
  64. 0 src/{ → core}/Stats.h
  65. +1 −1 src/{ → core}/Streaming.cpp
  66. 0 src/{ → core}/Streaming.h
  67. 0 src/{ → core}/SurfaceTable.cpp
  68. 0 src/{ → core}/SurfaceTable.h
  69. 0 src/{ → core}/TempColModels.cpp
  70. 0 src/{ → core}/TempColModels.h
  71. 0 src/{ → core}/Text.cpp
  72. 0 src/{ → core}/Text.h
  73. 0 src/{ → core}/Timer.cpp
  74. +11 −8 src/{ → core}/Timer.h
  75. 0 src/{ → core}/TxdStore.cpp
  76. 0 src/{ → core}/TxdStore.h
  77. 0 src/{ → core}/User.cpp
  78. 0 src/{ → core}/User.h
  79. 0 src/{ → core}/Wanted.cpp
  80. 0 src/{ → core}/Wanted.h
  81. 0 src/{ → core}/World.cpp
  82. 0 src/{ → core}/World.h
  83. +1 −1 src/{CullZones.cpp → core/ZoneCull.cpp}
  84. 0 src/{CullZones.h → core/ZoneCull.h}
  85. 0 src/{ → core}/Zones.cpp
  86. 0 src/{ → core}/Zones.h
  87. 0 src/{ → core}/common.h
  88. 0 src/{ → core}/config.h
  89. 0 src/{ → core}/debugmenu_public.h
  90. +1 −1 src/{ → core}/main.cpp
  91. 0 src/{ → core}/main.h
  92. 0 src/{ → core}/patcher.cpp
  93. 0 src/{ → core}/patcher.h
  94. 0 src/{ → core}/re3.cpp
  95. 0 src/{ → core}/rw.cpp
  96. 0 src/{ → core}/templates.h
  97. +53 −12 src/entities/Physical.cpp
  98. +7 −1 src/entities/Physical.h
  99. +5 −5 src/math/Vector.h
  100. 0 src/{ → modelinfo}/MloInstance.cpp
  101. 0 src/{ → modelinfo}/MloInstance.h
  102. 0 src/{entities → objects}/CutsceneHead.cpp
  103. 0 src/{entities → objects}/CutsceneHead.h
  104. 0 src/{entities → objects}/CutsceneObject.cpp
  105. 0 src/{entities → objects}/CutsceneObject.h
  106. 0 src/{entities → objects}/DummyObject.cpp
  107. 0 src/{entities → objects}/DummyObject.h
  108. 0 src/{entities → objects}/Object.cpp
  109. 0 src/{entities → objects}/Object.h
  110. 0 src/{control → objects}/ObjectData.cpp
  111. 0 src/{control → objects}/ObjectData.h
  112. 0 src/{ → objects}/ParticleObject.cpp
  113. 0 src/{ → objects}/ParticleObject.h
  114. 0 src/{entities → objects}/Projectile.cpp
  115. 0 src/{entities → objects}/Projectile.h
  116. 0 src/{entities → peds}/CivilianPed.cpp
  117. 0 src/{entities → peds}/CivilianPed.h
  118. 0 src/{entities → peds}/CopPed.cpp
  119. 0 src/{entities → peds}/CopPed.h
  120. 0 src/{entities → peds}/DummyPed.h
  121. 0 src/{entities → peds}/EmergencyPed.cpp
  122. 0 src/{entities → peds}/EmergencyPed.h
  123. +18 −18 src/{entities → peds}/Ped.cpp
  124. +5 −5 src/{entities → peds}/Ped.h
  125. 0 src/{entities → peds}/PedIK.cpp
  126. 0 src/{entities → peds}/PedIK.h
  127. 0 src/{control → peds}/PedPlacement.cpp
  128. 0 src/{control → peds}/PedPlacement.h
  129. 0 src/{control → peds}/PedStats.cpp
  130. 0 src/{control → peds}/PedStats.h
  131. 0 src/{control → peds}/PedType.cpp
  132. 0 src/{control → peds}/PedType.h
  133. 0 src/{entities → peds}/PlayerPed.cpp
  134. 0 src/{entities → peds}/PlayerPed.h
  135. +22 −22 src/render/Hud.cpp
  136. +1 −1 src/render/Lights.cpp
  137. +1 −1 src/render/Particle.h
  138. +1 −1 src/{ → render}/Timecycle.cpp
  139. 0 src/{ → render}/Timecycle.h
  140. 0 src/{ → render}/Weather.cpp
  141. 0 src/{ → render}/Weather.h
  142. 0 src/{entities → vehicles}/Automobile.cpp
  143. +3 −4 src/{entities → vehicles}/Automobile.h
  144. 0 src/{entities → vehicles}/Boat.cpp
  145. 0 src/{entities → vehicles}/Boat.h
  146. 0 src/{ → vehicles}/DamageManager.cpp
  147. 0 src/{ → vehicles}/DamageManager.h
  148. 0 src/{control → vehicles}/HandlingMgr.cpp
  149. 0 src/{control → vehicles}/HandlingMgr.h
  150. 0 src/{entities → vehicles}/Heli.cpp
  151. 0 src/{entities → vehicles}/Heli.h
  152. 0 src/{entities → vehicles}/Plane.cpp
  153. 0 src/{entities → vehicles}/Plane.h
  154. 0 src/{entities → vehicles}/Train.cpp
  155. 0 src/{entities → vehicles}/Train.h
  156. 0 src/{control → vehicles}/Transmission.cpp
  157. 0 src/{control → vehicles}/Transmission.h
  158. +1 −1 src/{entities → vehicles}/Vehicle.cpp
  159. +0 −7 src/{entities → vehicles}/Vehicle.h
@@ -3,30 +3,39 @@ workspace "re3"
location "build"

files { "src/*.*" }
files { "src/skel/*.*" }
files { "src/skel/win/*.*" }
files { "src/animation/*.*" }
files { "src/audio/*.*" }
files { "src/control/*.*" }
files { "src/core/*.*" }
files { "src/entities/*.*" }
files { "src/math/*.*" }
files { "src/modelinfo/*.*" }
files { "src/entities/*.*" }
files { "src/weapons/*.*" }
files { "src/objects/*.*" }
files { "src/peds/*.*" }
files { "src/render/*.*" }
files { "src/control/*.*" }
files { "src/animation/*.*" }
files { "src/audio/*.*" }
files { "src/skel/*.*" }
files { "src/skel/win/*.*" }
files { "src/vehicles/*.*" }
files { "src/weapons/*.*" }

includedirs { "src" }
includedirs { "src/animation" }
includedirs { "src/audio" }
includedirs { "src/control" }
includedirs { "src/core" }
includedirs { "src/entities" }
includedirs { "src/modelinfo" }
includedirs { "src/objects" }
includedirs { "src/peds" }
includedirs { "src/render" }
includedirs { "src/skel/" }
includedirs { "src/skel/win" }
includedirs { "src/modelinfo" }
includedirs { "src/entities" }
includedirs { "src/vehicles" }
includedirs { "src/weapons" }
includedirs { "src/render" }
includedirs { "src/control" }
includedirs { "src/audio" }
includedirs { "src/animation" }

includedirs { "dxsdk/include" }
includedirs { "rwsdk/include/d3d8" }

libdirs { "dxsdk/lib" }

project "re3"
@@ -77,7 +77,7 @@ class CAnimBlendAssociation
void UpdateTime(float timeDelta, float relSpeed);
bool UpdateBlend(float timeDelta);

float GetTimeLeft() { return hierarchy->totalLength - currentTime; }
inline float GetTimeLeft() { return hierarchy->totalLength - currentTime; }

static CAnimBlendAssociation *FromLink(CAnimBlendLink *l) {
return (CAnimBlendAssociation*)((uint8*)l - offsetof(CAnimBlendAssociation, link));
@@ -752,7 +752,7 @@ CAnimManager::LoadAnimFiles(void)
AnimAssocDefinition *def = &CAnimManager::ms_aAnimAssocDefinitions[i];
group->CreateAssociations(def->blockName, clump, def->animNames, def->numAnims);
for(j = 0; j < group->numAssociations; j++)
group->GetAnimation(def->animDescs[j].animId)->flags |= def->animDescs[j].flags;
group->GetAnimation(j)->flags |= def->animDescs[j].flags;
RpClumpDestroy(clump);
}
}
@@ -1,6 +1,6 @@
#include "common.h"
#include "patcher.h"
#include "PhoneInfo.h"
#include "Phones.h"

WRAPPER void PhonePutDownCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x42F570); }
WRAPPER void PhonePickUpCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x42F470); }
WRAPPER void PhonePickUpCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x42F470); }
File renamed without changes.
@@ -16,7 +16,7 @@
#include "ModelInfo.h"
#include "Object.h"
#include "Pad.h"
#include "PhoneInfo.h"
#include "Phones.h"
#include "Pickups.h"
#include "Plane.h"
#include "Pools.h"
@@ -638,7 +638,7 @@ void CReplay::StoreCarUpdate(CVehicle *vehicle, int id)
if (vehicle->IsCar()){
CAutomobile* car = (CAutomobile*)vehicle;
for (int i = 0; i < 4; i++){
vp->wheel_susp_dist[i] = 50.0f * car->m_aWheelDist[i];
vp->wheel_susp_dist[i] = 50.0f * car->m_aSuspensionSpringRatio[i];
vp->wheel_rotation[i] = 128.0f / M_PI * car->m_aWheelRotation[i];
}
vp->door_angles[0] = 127.0f / M_PI * car->Doors[2].m_fAngle;
@@ -683,7 +683,7 @@ void CReplay::ProcessCarUpdate(CVehicle *vehicle, float interpolation, CAddressI
if (vehicle->IsCar()) {
CAutomobile* car = (CAutomobile*)vehicle;
for (int i = 0; i < 4; i++) {
car->m_aWheelDist[i] = vp->wheel_susp_dist[i] / 50.0f;
car->m_aSuspensionSpringRatio[i] = vp->wheel_susp_dist[i] / 50.0f;
car->m_aWheelRotation[i] = vp->wheel_rotation[i] * M_PI / 128.0f;
}
car->Doors[2].m_fAngle = car->Doors[2].m_fPreviousAngle = vp->door_angles[0] * M_PI / 127.0f;
@@ -262,8 +262,8 @@ class CReplay
static void StreamAllNecessaryCarsAndPeds(void);
static bool ShouldStandardCameraBeProcessed(void);

inline static bool IsPlayingBack() { return Mode == MODE_PLAYBACK; }
inline static bool IsPlayingBackFromFile() { return bPlayingBackFromFile; }
static bool IsPlayingBack() { return Mode == MODE_PLAYBACK; }
static bool IsPlayingBackFromFile() { return bPlayingBackFromFile; }

private:
static void RecordThisFrame(void);
@@ -129,6 +129,10 @@ void CMissionCleanup::Process()
}
}

/* NB: CUpsideDownCarCheck is not used by actual script at all
* It has a weird usage: AreAnyCarsUpsideDown would fail any mission
* just like death or arrest. */

void CUpsideDownCarCheck::Init()
{
for (int i = 0; i < MAX_UPSIDEDOWN_CAR_CHECKS; i++){
@@ -137,16 +141,140 @@ void CUpsideDownCarCheck::Init()
}
}

bool CUpsideDownCarCheck::IsCarUpsideDown(int32 id)
{
CVehicle* v = CPools::GetVehiclePool()->GetAt(id);
return v->GetUp().z <= -0.97f &&
v->GetMoveSpeed().Magnitude() < 0.01f &&
v->GetTurnSpeed().Magnitude() < 0.02f;
}

void CUpsideDownCarCheck::UpdateTimers()
{
uint32 timeStep = CTimer::GetTimeStepInMilliseconds();
for (int i = 0; i < MAX_UPSIDEDOWN_CAR_CHECKS; i++){
CVehicle* v = CPools::GetVehiclePool()->GetAt(m_sCars[i].m_nVehicleIndex);
if (v){
if (IsCarUpsideDown(m_sCars[i].m_nVehicleIndex))
m_sCars[i].m_nUpsideDownTimer += timeStep;
else
m_sCars[i].m_nUpsideDownTimer = 0;
}else{
m_sCars[i].m_nVehicleIndex = -1;
m_sCars[i].m_nUpsideDownTimer = 0;
}
}
}

bool CUpsideDownCarCheck::AreAnyCarsUpsideDown()
{
for (int i = 0; i < MAX_UPSIDEDOWN_CAR_CHECKS; i++){
if (m_sCars[i].m_nVehicleIndex >= 0 && m_sCars[i].m_nUpsideDownTimer > 1000)
return true;
}
return false;
}

void CUpsideDownCarCheck::AddCarToCheck(int32 id)
{
uint16 index = 0;
while (index < MAX_UPSIDEDOWN_CAR_CHECKS && m_sCars[index].m_nVehicleIndex >= 0)
index++;
if (index >= MAX_UPSIDEDOWN_CAR_CHECKS)
return;
m_sCars[index].m_nVehicleIndex = id;
m_sCars[index].m_nUpsideDownTimer = 0;
}

void CUpsideDownCarCheck::RemoveCarFromCheck(int32 id)
{
for (int i = 0; i < MAX_UPSIDEDOWN_CAR_CHECKS; i++){
if (m_sCars[i].m_nVehicleIndex == id){
m_sCars[i].m_nVehicleIndex = -1;
m_sCars[i].m_nUpsideDownTimer = 0;
}
}
}

bool CUpsideDownCarCheck::HasCarBeenUpsideDownForAWhile(int32 id)
{
for (int i = 0; i < MAX_UPSIDEDOWN_CAR_CHECKS; i++){
if (m_sCars[i].m_nVehicleIndex == id)
return m_sCars[i].m_nUpsideDownTimer > 1000;
}
return false;
}

void CStuckCarCheckEntry::Reset()
{
m_nVehicleIndex = -1;
m_vecPos = CVector(-5000.0f, -5000.0f, -5000.0f);
m_nLastCheck = -1;
m_fRadius = 0.0f;
m_nStuckTime = 0;
m_bStuck = false;
}

void CStuckCarCheck::Init()
{
for (int i = 0; i < MAX_STUCK_CAR_CHECKS; i++) {
m_sCars[i].m_nVehicleIndex = -1;
m_sCars[i].m_vecPos = CVector(-5000.0f, -5000.0f, -5000.0f);
m_sCars[i].m_nStartTime = -1;
m_sCars[i].m_fDistance = 0.0f;
m_sCars[i].m_nStuckTime = 0;
m_sCars[i].m_bStuck = false;
m_sCars[i].Reset();
}
}

void CStuckCarCheck::Process()
{
uint32 timer = CTimer::GetTimeInMilliseconds();
for (int i = 0; i < MAX_STUCK_CAR_CHECKS; i++){
if (m_sCars[i].m_nVehicleIndex < 0)
continue;
if (timer <= m_sCars[i].m_nStuckTime + m_sCars[i].m_nLastCheck)
continue;
CVehicle* pv = CPools::GetVehiclePool()->GetAt(m_sCars[i].m_nVehicleIndex);
if (!pv){
m_sCars[i].Reset();
continue;
}
float distance = (pv->GetPosition() - m_sCars[i].m_vecPos).Magnitude();
m_sCars[i].m_bStuck = distance < m_sCars[i].m_fRadius;
m_sCars[i].m_vecPos = pv->GetPosition();
m_sCars[i].m_nLastCheck = timer;
}
}

void CStuckCarCheck::AddCarToCheck(int32 id, float radius, uint32 time)
{
CVehicle* pv = CPools::GetVehiclePool()->GetAt(id);
if (!pv)
return;
int index = 0;
while (index < MAX_STUCK_CAR_CHECKS && m_sCars[index].m_nVehicleIndex >= 0)
index++;
/* Would be nice to return if index >= MAX_STUCK_CAR_CHECKS... */
m_sCars[index].m_nVehicleIndex = id;
m_sCars[index].m_vecPos = pv->GetPosition();
m_sCars[index].m_nLastCheck = CTimer::GetTimeInMilliseconds();
m_sCars[index].m_fRadius = radius;
m_sCars[index].m_nStuckTime = time;
m_sCars[index].m_bStuck = false;
}

void CStuckCarCheck::RemoveCarFromCheck(int32 id)
{
for (int i = 0; i < MAX_STUCK_CAR_CHECKS; i++){
if (m_sCars[i].m_nVehicleIndex == id){
m_sCars[i].Reset();
}
}
}

bool CStuckCarCheck::HasCarBeenStuckForAWhile(int32 id)
{
for (int i = 0; i < MAX_STUCK_CAR_CHECKS; i++){
if (m_sCars[i].m_nVehicleIndex == id)
return m_sCars[i].m_bStuck;
}
return false;
}

WRAPPER void CTheScripts::CleanUpThisVehicle(CVehicle*) { EAXJMP(0x4548D0); }
@@ -160,4 +288,15 @@ InjectHook(0x437AE0, &CMissionCleanup::Init, PATCH_JUMP);
InjectHook(0x437BA0, &CMissionCleanup::AddEntityToList, PATCH_JUMP);
InjectHook(0x437BD0, &CMissionCleanup::RemoveEntityFromList, PATCH_JUMP);
InjectHook(0x437C10, &CMissionCleanup::Process, PATCH_JUMP);
InjectHook(0x437DC0, &CUpsideDownCarCheck::Init, PATCH_JUMP);
InjectHook(0x437EE0, &CUpsideDownCarCheck::UpdateTimers, PATCH_JUMP);
InjectHook(0x437F80, &CUpsideDownCarCheck::AreAnyCarsUpsideDown, PATCH_JUMP);
InjectHook(0x437FB0, &CUpsideDownCarCheck::AddCarToCheck, PATCH_JUMP);
InjectHook(0x437FE0, &CUpsideDownCarCheck::RemoveCarFromCheck, PATCH_JUMP);
InjectHook(0x438010, &CUpsideDownCarCheck::HasCarBeenUpsideDownForAWhile, PATCH_JUMP);
InjectHook(0x438050, &CStuckCarCheck::Init, PATCH_JUMP);
InjectHook(0x4380A0, &CStuckCarCheck::Process, PATCH_JUMP);
InjectHook(0x4381C0, &CStuckCarCheck::AddCarToCheck, PATCH_JUMP);
InjectHook(0x438240, &CStuckCarCheck::RemoveCarFromCheck, PATCH_JUMP);
InjectHook(0x4382A0, &CStuckCarCheck::HasCarBeenStuckForAWhile, PATCH_JUMP);
ENDPATCHES
@@ -101,16 +101,24 @@ class CUpsideDownCarCheck

public:
void Init();
bool IsCarUpsideDown(int32);
void UpdateTimers();
bool AreAnyCarsUpsideDown();
void AddCarToCheck(int32);
void RemoveCarFromCheck(int32);
bool HasCarBeenUpsideDownForAWhile(int32);
};

struct CStuckCarCheckEntry
{
int32 m_nVehicleIndex;
CVector m_vecPos;
int32 m_nStartTime;
float m_fDistance;
int32 m_nLastCheck;
float m_fRadius;
uint32 m_nStuckTime;
bool m_bStuck;

inline void Reset();
};

class CStuckCarCheck
@@ -119,6 +127,10 @@ class CStuckCarCheck

public:
void Init();
void Process();
void AddCarToCheck(int32, float, uint32);
void RemoveCarFromCheck(int32);
bool HasCarBeenStuckForAWhile(int32);
};

class CTheScripts
@@ -8,7 +8,7 @@
#include "PlayerPed.h"
#include "Pad.h"
#include "General.h"
#include "CullZones.h"
#include "ZoneCull.h"
#include "SurfaceTable.h"
#include "MBlur.h"
#include "Camera.h"
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -5,7 +5,7 @@
#include "Game.h"
#include "Zones.h"
#include "General.h"
#include "CullZones.h"
#include "ZoneCull.h"
#include "World.h"
#include "Entity.h"
#include "Train.h"
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -21,7 +21,7 @@
#include "DummyObject.h"
#include "World.h"
#include "Zones.h"
#include "CullZones.h"
#include "ZoneCull.h"
#include "CdStream.h"
#include "FileLoader.h"

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit d1c6a6a

Please sign in to comment.