script 500-599 plus bugfix

This commit is contained in:
Nikolay Korolev 2019-10-22 00:39:59 +03:00
parent 9d4140734f
commit d579ee1b64
14 changed files with 907 additions and 22 deletions

View file

@ -72,6 +72,9 @@ WRAPPER void CGarages::TriggerMessage(const char *text, int16, uint16 time, int1
WRAPPER bool CGarages::IsPointWithinHideOutGarage(CVector&) { EAXJMP(0x428260); }
WRAPPER bool CGarages::IsPointWithinAnyGarage(CVector&) { EAXJMP(0x428320); }
WRAPPER void CGarages::PlayerArrestedOrDied() { EAXJMP(0x427F60); }
WRAPPER int16 CGarages::AddOne(float, float, float, float, float, float, uint8, uint32) { EAXJMP(0x421FA0); }
WRAPPER void CGarages::SetTargetCarForMissonGarage(int16, CVehicle*) { EAXJMP(0x426BD0); }
WRAPPER bool CGarages::HasCarBeenDroppedOffYet(int16) { EAXJMP(0x426C20); }
#if 0
WRAPPER void CGarages::PrintMessages(void) { EAXJMP(0x426310); }

View file

@ -1,5 +1,7 @@
#pragma once
class CVehicle;
class CGarages
{
public:
@ -28,4 +30,7 @@ public:
static bool IsPointWithinHideOutGarage(CVector&);
static bool IsPointWithinAnyGarage(CVector&);
static void PlayerArrestedOrDied();
static int16 AddOne(float, float, float, float, float, float, uint8, uint32);
static void SetTargetCarForMissonGarage(int16, CVehicle*);
static bool HasCarBeenDroppedOffYet(int16);
};

File diff suppressed because it is too large Load diff

View file

@ -31,6 +31,7 @@ public:
static CCutsceneObject* GetCutsceneObject(int id) { return ms_pCutsceneObjects[id]; }
static int GetCutsceneTimeInMilleseconds(void) { return 1000.0f * ms_cutsceneTimer; }
static char *GetCutsceneName(void) { return ms_cutsceneName; }
static void SetCutsceneOffset(const CVector& vec) { ms_cutsceneOffset = vec; }
static bool HasCutsceneFinished(void);
static void Initialise(void);

View file

@ -10,6 +10,7 @@ WRAPPER void CMessages::InsertNumberInString(wchar* src, int n1, int n2, int n3,
WRAPPER void CMessages::InsertPlayerControlKeysInString(wchar* src) { EAXJMP(0x52A490); }
WRAPPER int CMessages::GetWideStringLength(wchar* src) { EAXJMP(0x529490); }
WRAPPER void CMessages::AddBigMessage(wchar* key, uint32 time, uint16 pos) { EAXJMP(0x529EB0); }
WRAPPER void CMessages::AddBigMessageQ(wchar* key, uint32 time, uint16 pos) { EAXJMP(0x529F60); }
WRAPPER void CMessages::AddBigMessageWithNumber(wchar* key, uint32 time, uint16 pos, int n1, int n2, int n3, int n4, int n5, int n6) { EAXJMP(0x52AD10); }
WRAPPER void CMessages::AddBigMessageWithNumberQ(wchar* key, uint32 time, uint16 pos, int n1, int n2, int n3, int n4, int n5, int n6) { EAXJMP(0x52AE00); }
WRAPPER void CMessages::AddMessage(wchar* key, uint32 time, uint16 pos) { EAXJMP(0x529900); }

View file

@ -42,6 +42,7 @@ public:
static void InsertPlayerControlKeysInString(wchar* src);
static int GetWideStringLength(wchar *src);
static void AddBigMessage(wchar* key, uint32 time, uint16 pos);
static void AddBigMessageQ(wchar* key, uint32 time, uint16 pos);
static void AddBigMessageWithNumber(wchar* key, uint32 time, uint16 pos, int n1, int n2, int n3, int n4, int n5, int n6);
static void AddBigMessageWithNumberQ(wchar* key, uint32 time, uint16 pos, int n1, int n2, int n3, int n4, int n5, int n6);
static void AddMessage(wchar* key, uint32 time, uint16 pos);

View file

@ -72,6 +72,22 @@ CPlayerInfo::ArrestPlayer()
CStats::TimesArrested++;
}
bool
CPlayerInfo::IsPlayerInRemoteMode()
{
return m_pRemoteVehicle || m_bInRemoteMode;
}
void
CPlayerInfo::PlayerFailedCriticalMission()
{
if (m_WBState != WBSTATE_PLAYING)
return;
m_WBState = WBSTATE_FAILED_CRITICAL_MISSION;
m_nWBTime = CTimer::GetTimeInMilliseconds();
CDarkel::ResetOnPlayerDeath();
}
STARTPATCHES
InjectHook(0x4A1700, &CPlayerInfo::LoadPlayerSkin, PATCH_JUMP);
InjectHook(0x4A1750, &CPlayerInfo::DeletePlayerSkin, PATCH_JUMP);

View file

@ -75,6 +75,8 @@ public:
void Process(void);
void KillPlayer(void);
void ArrestPlayer(void);
bool IsPlayerInRemoteMode(void);
void PlayerFailedCriticalMission(void);
};
static_assert(sizeof(CPlayerInfo) == 0x13C, "CPlayerInfo: error");

View file

@ -14,6 +14,7 @@ CPager& CUserDisplay::Pager = *(CPager*)0x8F2744;
CCurrentVehicle& CUserDisplay::CurrentVehicle = *(CCurrentVehicle*)0x8F5FE8;
WRAPPER void CPager::AddMessage(wchar*, uint16, uint16, uint16) { EAXJMP(0x52B940); }
WRAPPER void CPager::AddMessageWithNumber(wchar*, int, int, int, int, int, uint16, uint16, uint16) { EAXJMP(0x52BB50); }
void COnscreenTimer::Init() {
m_bDisabled = false;

View file

@ -54,6 +54,7 @@ class CPager
{
public:
void AddMessage(wchar*, uint16, uint16, uint16);
void AddMessageWithNumber(wchar*, int, int, int, int, int, uint16, uint16, uint16);
};
class CUserDisplay

View file

@ -996,6 +996,19 @@ CWorld::RemoveFallenCars(void)
}
}
void
CWorld::StopAllLawEnforcersInTheirTracks(void)
{
int poolSize = CPools::GetVehiclePool()->GetSize();
for (int poolIndex = poolSize - 1; poolIndex >= 0; poolIndex--) {
CVehicle* veh = CPools::GetVehiclePool()->GetSlot(poolIndex);
if (veh) {
if (veh->bIsLawEnforcer)
veh->SetMoveSpeed(0.0f, 0.0f, 0.0f);
}
}
}
void
CWorld::Process(void)
{

View file

@ -120,6 +120,8 @@ public:
static void RemoveFallenPeds();
static void RemoveFallenCars();
static void StopAllLawEnforcersInTheirTracks();
static void Initialise();
static void ShutDown();
static void Process();

View file

@ -27,6 +27,11 @@ float &CWeather::Rainbow = *(float*)0x940598;
bool &CWeather::bScriptsForceRain = *(bool*)0x95CD7D;
bool &CWeather::Stored_StateStored = *(bool*)0x95CDC1;
float &CWeather::Stored_InterpolationValue = *(float*)0x942F54;
int16 &CWeather::Stored_OldWeatherType = *(int16*)0x95CC68;
int16 &CWeather::Stored_NewWeatherType = *(int16*)0x95CCAE;
float &CWeather::Stored_Rain = *(float*)0x885B4C;
WRAPPER void CWeather::RenderRainStreaks(void) { EAXJMP(0x524550); }
void CWeather::ReleaseWeather()
@ -45,3 +50,23 @@ void CWeather::ForceWeatherNow(int16 weather)
NewWeatherType = weather;
ForcedWeatherType = weather;
}
void CWeather::StoreWeatherState()
{
Stored_StateStored = true;
Stored_InterpolationValue = InterpolationValue;
Stored_Rain = Rain;
Stored_NewWeatherType = NewWeatherType;
Stored_OldWeatherType = OldWeatherType;
}
void CWeather::RestoreWeatherState()
{
#ifdef FIX_BUGS // it's not used anyway though
Stored_StateStored = false;
#endif
InterpolationValue = Stored_InterpolationValue;
Rain = Stored_Rain;
NewWeatherType = Stored_NewWeatherType;
OldWeatherType = Stored_OldWeatherType;
}

View file

@ -32,10 +32,16 @@ public:
static bool &bScriptsForceRain;
static bool &Stored_StateStored;
static float &Stored_InterpolationValue;
static int16 &Stored_OldWeatherType;
static int16 &Stored_NewWeatherType;
static float &Stored_Rain;
static void RenderRainStreaks(void);
static void ReleaseWeather();
static void ForceWeather(int16);
static void ForceWeatherNow(int16);
static void StoreWeatherState();
static void RestoreWeatherState();
};