Merge branch 'miami' of github.com:GTAmodding/re3 into miami

This commit is contained in:
aap
2020-12-18 13:50:37 +01:00
32 changed files with 589 additions and 622 deletions

View File

@ -1218,10 +1218,10 @@ void CReplay::ProcessReplayCamera(void)
TheCamera.GetUp() = CVector(0.0f, 1.0f, 0.0f);
TheCamera.GetRight() = CVector(1.0f, 0.0f, 0.0f);
RwMatrix* pm = RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera));
pm->pos = *(RwV3d*)&TheCamera.GetPosition();
pm->at = *(RwV3d*)&TheCamera.GetForward();
pm->up = *(RwV3d*)&TheCamera.GetUp();
pm->right = *(RwV3d*)&TheCamera.GetRight();
pm->pos = TheCamera.GetPosition();
pm->at = TheCamera.GetForward();
pm->up = TheCamera.GetUp();
pm->right = TheCamera.GetRight();
break;
}
case REPLAYCAMMODE_FIXED:
@ -1237,10 +1237,10 @@ void CReplay::ProcessReplayCamera(void)
TheCamera.GetMatrix().GetUp() = up;
TheCamera.GetMatrix().GetRight() = right;
RwMatrix* pm = RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera));
pm->pos = *(RwV3d*)&TheCamera.GetMatrix().GetPosition();
pm->at = *(RwV3d*)&TheCamera.GetMatrix().GetForward();
pm->up = *(RwV3d*)&TheCamera.GetMatrix().GetUp();
pm->right = *(RwV3d*)&TheCamera.GetMatrix().GetRight();
pm->pos = TheCamera.GetMatrix().GetPosition();
pm->at = TheCamera.GetMatrix().GetForward();
pm->up = TheCamera.GetMatrix().GetUp();
pm->right = TheCamera.GetMatrix().GetRight();
break;
}
default:
@ -1840,10 +1840,10 @@ void CReplay::ProcessLookAroundCam(void)
TheCamera.GetRight() = right;
TheCamera.SetPosition(camera_pt);
RwMatrix* pm = RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera));
pm->pos = *(RwV3d*)&TheCamera.GetPosition();
pm->at = *(RwV3d*)&TheCamera.GetForward();
pm->up = *(RwV3d*)&TheCamera.GetUp();
pm->right = *(RwV3d*)&TheCamera.GetRight();
pm->pos = TheCamera.GetPosition();
pm->at = TheCamera.GetForward();
pm->up = TheCamera.GetUp();
pm->right = TheCamera.GetRight();
TheCamera.CalculateDerivedValues();
RwMatrixUpdate(RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera)));
RwFrameUpdateObjects(RwCameraGetFrame(TheCamera.m_pRwCamera));

View File

@ -2192,3 +2192,143 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
}
return -1;
}
int32 CTheScripts::GetNewUniqueScriptSphereIndex(int32 index)
{
if (ScriptSphereArray[index].m_Index >= UINT16_MAX - 1)
ScriptSphereArray[index].m_Index = 1;
else
ScriptSphereArray[index].m_Index++;
return (uint16)index | ScriptSphereArray[index].m_Index << 16;
}
int32 CTheScripts::GetActualScriptSphereIndex(int32 index)
{
if (index == -1)
return -1;
uint16 check = (uint32)index >> 16;
uint16 array_idx = index & (0xFFFF);
script_assert(array_idx < ARRAY_SIZE(ScriptSphereArray));
if (check != ScriptSphereArray[array_idx].m_Index)
return -1;
return array_idx;
}
void CTheScripts::DrawScriptSpheres()
{
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (ScriptSphereArray[i].m_bInUse)
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
}
}
int32 CTheScripts::AddScriptSphere(int32 id, CVector pos, float radius)
{
int16 i = 0;
for (i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (!ScriptSphereArray[i].m_bInUse)
break;
}
#ifdef FIX_BUGS
if (i == MAX_NUM_SCRIPT_SPHERES)
return -1;
#endif
ScriptSphereArray[i].m_bInUse = true;
ScriptSphereArray[i].m_Id = id;
ScriptSphereArray[i].m_vecCenter = pos;
ScriptSphereArray[i].m_fRadius = radius;
return GetNewUniqueScriptSphereIndex(i);
}
void CTheScripts::RemoveScriptSphere(int32 index)
{
index = GetActualScriptSphereIndex(index);
if (index == -1)
return;
ScriptSphereArray[index].m_bInUse = false;
ScriptSphereArray[index].m_Id = 0;
}
void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == pBuilding)
found = true;
else
i++;
}
if (found) {
if (BuildingSwapArray[i].m_nOldModel == new_model) {
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
else {
BuildingSwapArray[i].m_nNewModel = new_model;
}
}
else {
i = 0;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == nil)
found = true;
else
i++;
}
if (found) {
BuildingSwapArray[i].m_pBuilding = pBuilding;
BuildingSwapArray[i].m_nNewModel = new_model;
BuildingSwapArray[i].m_nOldModel = old_model;
}
}
}
void CTheScripts::AddToInvisibilitySwapArray(CEntity* pEntity, bool remove)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == pEntity)
found = true;
else
i++;
}
if (found) {
if (remove)
InvisibilitySettingArray[i] = nil;
}
else if (!remove) {
i = 0;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == nil)
found = true;
else
i++;
}
if (found)
InvisibilitySettingArray[i] = pEntity;
}
}
void CTheScripts::UndoBuildingSwaps()
{
for (int i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
if (BuildingSwapArray[i].m_pBuilding) {
BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nOldModel);
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
}
}
void CTheScripts::UndoEntityInvisibilitySettings()
{
for (int i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) {
if (InvisibilitySettingArray[i]) {
InvisibilitySettingArray[i]->bIsVisible = true;
InvisibilitySettingArray[i] = nil;
}
}
}

View File

@ -17,146 +17,6 @@
#include "World.h"
#include "main.h"
int32 CTheScripts::GetNewUniqueScriptSphereIndex(int32 index)
{
if (ScriptSphereArray[index].m_Index >= UINT16_MAX - 1)
ScriptSphereArray[index].m_Index = 1;
else
ScriptSphereArray[index].m_Index++;
return (uint16)index | ScriptSphereArray[index].m_Index << 16;
}
int32 CTheScripts::GetActualScriptSphereIndex(int32 index)
{
if (index == -1)
return -1;
uint16 check = (uint32)index >> 16;
uint16 array_idx = index & (0xFFFF);
script_assert(array_idx < ARRAY_SIZE(ScriptSphereArray));
if (check != ScriptSphereArray[array_idx].m_Index)
return -1;
return array_idx;
}
void CTheScripts::DrawScriptSpheres()
{
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (ScriptSphereArray[i].m_bInUse)
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
}
}
int32 CTheScripts::AddScriptSphere(int32 id, CVector pos, float radius)
{
int16 i = 0;
for (i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (!ScriptSphereArray[i].m_bInUse)
break;
}
#ifdef FIX_BUGS
if (i == MAX_NUM_SCRIPT_SPHERES)
return -1;
#endif
ScriptSphereArray[i].m_bInUse = true;
ScriptSphereArray[i].m_Id = id;
ScriptSphereArray[i].m_vecCenter = pos;
ScriptSphereArray[i].m_fRadius = radius;
return GetNewUniqueScriptSphereIndex(i);
}
void CTheScripts::RemoveScriptSphere(int32 index)
{
index = GetActualScriptSphereIndex(index);
if (index == -1)
return;
ScriptSphereArray[index].m_bInUse = false;
ScriptSphereArray[index].m_Id = 0;
}
void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == pBuilding)
found = true;
else
i++;
}
if (found) {
if (BuildingSwapArray[i].m_nOldModel == new_model) {
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
else {
BuildingSwapArray[i].m_nNewModel = new_model;
}
}
else {
i = 0;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == nil)
found = true;
else
i++;
}
if (found) {
BuildingSwapArray[i].m_pBuilding = pBuilding;
BuildingSwapArray[i].m_nNewModel = new_model;
BuildingSwapArray[i].m_nOldModel = old_model;
}
}
}
void CTheScripts::AddToInvisibilitySwapArray(CEntity* pEntity, bool remove)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == pEntity)
found = true;
else
i++;
}
if (found) {
if (remove)
InvisibilitySettingArray[i] = nil;
}
else if (!remove) {
i = 0;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == nil)
found = true;
else
i++;
}
if (found)
InvisibilitySettingArray[i] = pEntity;
}
}
void CTheScripts::UndoBuildingSwaps()
{
for (int i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
if (BuildingSwapArray[i].m_pBuilding) {
BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nOldModel);
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
}
}
void CTheScripts::UndoEntityInvisibilitySettings()
{
for (int i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) {
if (InvisibilitySettingArray[i]) {
InvisibilitySettingArray[i]->bIsVisible = true;
InvisibilitySettingArray[i] = nil;
}
}
}
void CRunningScript::UpdateCompareFlag(bool flag)
{
if (m_bNotFlag)

View File

@ -999,7 +999,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
CVector vTestedPos(pTestedPed->GetPosition().x, pTestedPed->GetPosition().y, pTestedPed->GetPosition().z + 0.4);
CVector vScreenPos;
float w, h;
if (CSprite::CalcScreenCoors(vTestedPos, vScreenPos, &w, &h, false)) {
if (CSprite::CalcScreenCoors(vTestedPos, &vScreenPos, &w, &h, false)) {
CVector2D vCrosshairPosition(CCamera::m_f3rdPersonCHairMultX * RsGlobal.maximumWidth, CCamera::m_f3rdPersonCHairMultY * RsGlobal.maximumHeight);
float fScreenDistance = ((CVector2D)vScreenPos - vCrosshairPosition).Magnitude();
if (SCREEN_STRETCH_X(0.45f) > fScreenDistance / w) {