mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-15 11:18:59 +00:00
Implement MI_BEACHBALL behaviours
This commit is contained in:
parent
afe70003f4
commit
a1ab82b188
2 changed files with 54 additions and 4 deletions
|
@ -159,6 +159,11 @@ public:
|
||||||
|
|
||||||
static int32 GetRandomNumberInRange(int32 low, int32 high)
|
static int32 GetRandomNumberInRange(int32 low, int32 high)
|
||||||
{ return low + (high - low)*(GetRandomNumber()/float(MYRAND_MAX + 1)); }
|
{ return low + (high - low)*(GetRandomNumber()/float(MYRAND_MAX + 1)); }
|
||||||
|
|
||||||
|
// Returns inclusive value in the specified range
|
||||||
|
static int32 GetRandomNumberInRangeInc(int32 low, int32 high)
|
||||||
|
{ return GetRandomNumberInRange(low - 1, high + 1); }
|
||||||
|
|
||||||
static void SetRandomSeed(int32 seed)
|
static void SetRandomSeed(int32 seed)
|
||||||
{ mysrand(seed); }
|
{ mysrand(seed); }
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include "soundlist.h"
|
#include "soundlist.h"
|
||||||
#include "WaterLevel.h"
|
#include "WaterLevel.h"
|
||||||
#include "Timecycle.h"
|
#include "Timecycle.h"
|
||||||
|
#include "Stats.h"
|
||||||
|
#include "SpecialFX.h"
|
||||||
|
|
||||||
int16 CObject::nNoTempObjects;
|
int16 CObject::nNoTempObjects;
|
||||||
//int16 CObject::nBodyCastHealth = 1000;
|
//int16 CObject::nBodyCastHealth = 1000;
|
||||||
|
@ -123,6 +125,49 @@ CObject::ProcessControl(void)
|
||||||
float fScalarTimed = Pow(fScalar, CTimer::GetTimeStep());
|
float fScalarTimed = Pow(fScalar, CTimer::GetTimeStep());
|
||||||
m_vecMoveSpeed *= fScalarTimed;
|
m_vecMoveSpeed *= fScalarTimed;
|
||||||
}
|
}
|
||||||
|
if (mi == MI_BEACHBALL) {
|
||||||
|
constexpr uint8 BEACHBALL_MAX_SCORE = 250;
|
||||||
|
constexpr float BEACHBALL_DEACCELERATION = 2.5f;
|
||||||
|
float fMoveSpeedMag = m_vecMoveSpeed.Magnitude2D();
|
||||||
|
float fTimeScale = powf(0.95, CTimer::GetTimeStep());
|
||||||
|
m_vecMoveSpeed.x *= fTimeScale;
|
||||||
|
m_vecMoveSpeed.y *= fTimeScale;
|
||||||
|
m_vecMoveSpeed.z += fMoveSpeedMag - m_vecMoveSpeed.Magnitude2D();
|
||||||
|
if (!FindPlayerVehicle()) {
|
||||||
|
CVector distance = FindPlayerCoors() - GetPosition();
|
||||||
|
float distanceMagnitude = distance.Magnitude2D();
|
||||||
|
if (distance.z > 0.0 && distance.z < 1.5f && distanceMagnitude < 1.0) {
|
||||||
|
CVector playerSpeed = FindPlayerSpeed();
|
||||||
|
if (fMoveSpeedMag < 0.05 && playerSpeed.Magnitude() > 0.1) {
|
||||||
|
playerSpeed.z = 0.0f;
|
||||||
|
playerSpeed.Normalise();
|
||||||
|
playerSpeed.z = 0.3;
|
||||||
|
m_vecMoveSpeed = CVector(playerSpeed.x / BEACHBALL_DEACCELERATION, playerSpeed.y / BEACHBALL_DEACCELERATION, 1.0f / BEACHBALL_DEACCELERATION * 0.3);
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition());
|
||||||
|
if (m_nBeachballBounces > 0) {
|
||||||
|
m_nBeachballBounces++;
|
||||||
|
sprintf(gString, "%d", m_nBeachballBounces);
|
||||||
|
CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f);
|
||||||
|
CStats::RegisterHighestScore(3, m_nBeachballBounces);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (distance.z > -1.05 && distance.z < -0.6 && distanceMagnitude < 0.9 && m_vecMoveSpeed.z < 0.0f) {
|
||||||
|
m_vecMoveSpeed.x += CGeneral::GetRandomNumberInRangeInc(-3, 4) / 100.0;
|
||||||
|
m_vecMoveSpeed.y += CGeneral::GetRandomNumberInRangeInc(-3, 4) / 100.0;
|
||||||
|
m_vecMoveSpeed.z = Max(m_vecMoveSpeed.z + 0.3f, 0.2f);
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition());
|
||||||
|
m_vecTurnSpeed.x += CGeneral::GetRandomNumberInRangeInc(-7, 8) / 10.0f;
|
||||||
|
m_vecTurnSpeed.y += CGeneral::GetRandomNumberInRangeInc(-7, 8) / 10.0f;
|
||||||
|
if (++m_nBeachballBounces >= BEACHBALL_MAX_SCORE) {
|
||||||
|
m_nBeachballBounces = BEACHBALL_MAX_SCORE;
|
||||||
|
}
|
||||||
|
sprintf(gString, "%d", m_nBeachballBounces);
|
||||||
|
CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f);
|
||||||
|
CStats::RegisterHighestScore(3, m_nBeachballBounces);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue