mirror of
https://github.com/GTAmodding/re3.git
synced 2024-12-27 11:55:40 +00:00
some more CAutomobile
This commit is contained in:
parent
218772c296
commit
00dc86917e
5 changed files with 139 additions and 103 deletions
|
@ -321,6 +321,12 @@ void RenderWaterLayersCheat(void)
|
||||||
CWaterLevel::m_nRenderWaterLayers = 0;
|
CWaterLevel::m_nRenderWaterLayers = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BackToTheFuture(void)
|
||||||
|
{
|
||||||
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
|
CVehicle::bHoverCheat = !CVehicle::bHoverCheat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -1080,7 +1086,11 @@ void CPad::AddToPCCheatString(char c)
|
||||||
if (!_CHEATCMP("TAEHCSREYALRETAW"))
|
if (!_CHEATCMP("TAEHCSREYALRETAW"))
|
||||||
RenderWaterLayersCheat();
|
RenderWaterLayersCheat();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// SEAWAYS
|
||||||
|
if (!_CHEATCMP("SYAWAES"))
|
||||||
|
BackToTheFuture();
|
||||||
|
|
||||||
#undef _CHEATCMP
|
#undef _CHEATCMP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -269,10 +269,8 @@ CRenderer::RenderBoats(void)
|
||||||
for(node = gSortedVehiclesAndPeds.tail.prev;
|
for(node = gSortedVehiclesAndPeds.tail.prev;
|
||||||
node != &gSortedVehiclesAndPeds.head;
|
node != &gSortedVehiclesAndPeds.head;
|
||||||
node = node->prev){
|
node = node->prev){
|
||||||
// only boats in this list
|
|
||||||
CVehicle *v = (CVehicle*)node->item.ent;
|
CVehicle *v = (CVehicle*)node->item.ent;
|
||||||
if(v->IsBoat())
|
RenderOneNonRoad(v);
|
||||||
RenderOneNonRoad(v);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ CAutomobile::CAutomobile(int32 id, uint8 CreatedBy)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--MIAMI: done
|
||||||
void
|
void
|
||||||
CAutomobile::SetModelIndex(uint32 id)
|
CAutomobile::SetModelIndex(uint32 id)
|
||||||
{
|
{
|
||||||
|
@ -1188,6 +1188,7 @@ CAutomobile::ProcessControl(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--MIAMI: done
|
||||||
void
|
void
|
||||||
CAutomobile::Teleport(CVector pos)
|
CAutomobile::Teleport(CVector pos)
|
||||||
{
|
{
|
||||||
|
@ -2797,18 +2798,45 @@ CAutomobile::ProcessBuoyancy(void)
|
||||||
CVector impulse, point;
|
CVector impulse, point;
|
||||||
|
|
||||||
if(mod_Buoyancy.ProcessBuoyancy(this, m_fBuoyancy, &point, &impulse)){
|
if(mod_Buoyancy.ProcessBuoyancy(this, m_fBuoyancy, &point, &impulse)){
|
||||||
bTouchingWater = true;
|
|
||||||
ApplyMoveForce(impulse);
|
|
||||||
ApplyTurnForce(impulse, point);
|
|
||||||
|
|
||||||
CVector initialSpeed = m_vecMoveSpeed;
|
|
||||||
float timeStep = Max(CTimer::GetTimeStep(), 0.01f);
|
float timeStep = Max(CTimer::GetTimeStep(), 0.01f);
|
||||||
float impulseRatio = impulse.z / (GRAVITY * m_fMass * timeStep);
|
float impulseRatio = impulse.z / (GRAVITY * m_fMass * timeStep);
|
||||||
float waterResistance = Pow(1.0f - 0.05f*impulseRatio, CTimer::GetTimeStep());
|
float waterResistance = Pow(1.0f - 0.05f*impulseRatio, CTimer::GetTimeStep());
|
||||||
m_vecMoveSpeed *= waterResistance;
|
m_vecMoveSpeed *= waterResistance;
|
||||||
m_vecTurnSpeed *= waterResistance;
|
m_vecTurnSpeed *= waterResistance;
|
||||||
|
|
||||||
if(impulseRatio > 0.5f){
|
bool heliHitWaterHard = false;
|
||||||
|
if(IsRealHeli() && m_aWheelSpeed[1] > 0.15f){
|
||||||
|
if(GetModelIndex() == MI_SEASPAR){
|
||||||
|
if(impulseRatio > 3.0f){
|
||||||
|
m_aWheelSpeed[1] = 0.0f;
|
||||||
|
heliHitWaterHard = true;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
float strength = 1.0f/Max(8.0f*impulseRatio, 1.0f);
|
||||||
|
ApplyMoveForce(-2.0f*impulse/strength);
|
||||||
|
ApplyTurnForce(-impulse/strength, point);
|
||||||
|
if(impulseRatio > 0.9f){
|
||||||
|
m_aWheelSpeed[1] = 0.0f;
|
||||||
|
heliHitWaterHard = true;
|
||||||
|
}else
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bTouchingWater = true;
|
||||||
|
ApplyMoveForce(impulse);
|
||||||
|
ApplyTurnForce(impulse, point);
|
||||||
|
CVector initialSpeed = m_vecMoveSpeed;
|
||||||
|
|
||||||
|
if(m_modelIndex == MI_SEASPAR && impulseRatio < 3.0f && (GetUp().z > -0.5f || impulseRatio < 0.6f) ||
|
||||||
|
CVehicle::bHoverCheat && GetStatus() == STATUS_PLAYER && GetUp().z > 0.1f){
|
||||||
|
bIsInWater = false;
|
||||||
|
bIsDrowning = false;
|
||||||
|
}else if(heliHitWaterHard || impulseRatio > 1.0f ||
|
||||||
|
impulseRatio > 0.6f && (m_aSuspensionSpringRatio[0] == 1.0f ||
|
||||||
|
m_aSuspensionSpringRatio[1] == 1.0f ||
|
||||||
|
m_aSuspensionSpringRatio[2] == 1.0f ||
|
||||||
|
m_aSuspensionSpringRatio[3] == 1.0f)){
|
||||||
bIsInWater = true;
|
bIsInWater = true;
|
||||||
bIsDrowning = true;
|
bIsDrowning = true;
|
||||||
if(m_vecMoveSpeed.z < -0.1f)
|
if(m_vecMoveSpeed.z < -0.1f)
|
||||||
|
@ -2825,8 +2853,7 @@ CAutomobile::ProcessBuoyancy(void)
|
||||||
if(pPassengers[i]->IsPlayer() || !bWaterTight)
|
if(pPassengers[i]->IsPlayer() || !bWaterTight)
|
||||||
pPassengers[i]->InflictDamage(nil, WEAPONTYPE_DROWNING, CTimer::GetTimeStep(), PEDPIECE_TORSO, 0);
|
pPassengers[i]->InflictDamage(nil, WEAPONTYPE_DROWNING, CTimer::GetTimeStep(), PEDPIECE_TORSO, 0);
|
||||||
}
|
}
|
||||||
}
|
}else{
|
||||||
else {
|
|
||||||
bIsInWater = false;
|
bIsInWater = false;
|
||||||
bIsDrowning = false;
|
bIsDrowning = false;
|
||||||
}
|
}
|
||||||
|
@ -2834,49 +2861,33 @@ CAutomobile::ProcessBuoyancy(void)
|
||||||
static uint32 nGenerateRaindrops = 0;
|
static uint32 nGenerateRaindrops = 0;
|
||||||
static uint32 nGenerateWaterCircles = 0;
|
static uint32 nGenerateWaterCircles = 0;
|
||||||
|
|
||||||
if(initialSpeed.z < -0.3f && impulse.z > 0.3f){
|
if(initialSpeed.z < -0.1f && impulse.z > 0.3f || heliHitWaterHard){
|
||||||
#if defined(PC_PARTICLE) || defined (PS2_ALTERNATIVE_CARSPLASH)
|
|
||||||
RwRGBA color;
|
RwRGBA color;
|
||||||
color.red = (0.5f * CTimeCycle::GetDirectionalRed() + CTimeCycle::GetAmbientRed())*0.45f*255;
|
color.red = (0.5f * CTimeCycle::GetDirectionalRed() + CTimeCycle::GetAmbientRed_Obj())*0.45f*255;
|
||||||
color.green = (0.5f * CTimeCycle::GetDirectionalGreen() + CTimeCycle::GetAmbientGreen())*0.45f*255;
|
color.green = (0.5f * CTimeCycle::GetDirectionalGreen() + CTimeCycle::GetAmbientGreen_Obj())*0.45f*255;
|
||||||
color.blue = (0.5f * CTimeCycle::GetDirectionalBlue() + CTimeCycle::GetAmbientBlue())*0.45f*255;
|
color.blue = (0.5f * CTimeCycle::GetDirectionalBlue() + CTimeCycle::GetAmbientBlue_Obj())*0.45f*255;
|
||||||
color.alpha = CGeneral::GetRandomNumberInRange(0, 32) + 128;
|
color.alpha = CGeneral::GetRandomNumberInRange(0, 32) + 128;
|
||||||
|
CVector target = CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.15f, 0.45f));
|
||||||
CParticleObject::AddObject(POBJECT_CAR_WATER_SPLASH, GetPosition(),
|
CParticleObject::AddObject(POBJECT_CAR_WATER_SPLASH, GetPosition(),
|
||||||
CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.15f, 0.3f)),
|
target, 0.0f, 75, color, true);
|
||||||
0.0f, 75, color, true);
|
|
||||||
#else
|
|
||||||
CVector pos = (initialSpeed * 2.0f) + (GetPosition() + point);
|
|
||||||
|
|
||||||
for ( int32 i = 0; i < 360; i += 4 )
|
|
||||||
{
|
|
||||||
float fSin = Sin(float(i));
|
|
||||||
float fCos = Cos(float(i));
|
|
||||||
|
|
||||||
CVector dir(fSin*0.01f, fCos*0.01f, CGeneral::GetRandomNumberInRange(0.25f, 0.45f));
|
|
||||||
|
|
||||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH,
|
|
||||||
pos + CVector(fSin*4.5f, fCos*4.5f, 0.0f),
|
|
||||||
dir, NULL, 0.0f, CRGBA(225, 225, 255, 180));
|
|
||||||
|
|
||||||
for ( int32 j = 0; j < 3; j++ )
|
|
||||||
{
|
|
||||||
float fMul = 1.5f * float(j + 1);
|
|
||||||
|
|
||||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH,
|
|
||||||
pos + CVector(fSin * fMul, fCos * fMul, 0.0f),
|
|
||||||
dir, NULL, 0.0f, CRGBA(225, 225, 255, 180));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
nGenerateRaindrops = CTimer::GetTimeInMilliseconds() + 300;
|
nGenerateRaindrops = CTimer::GetTimeInMilliseconds() + 300;
|
||||||
nGenerateWaterCircles = CTimer::GetTimeInMilliseconds() + 60;
|
nGenerateWaterCircles = CTimer::GetTimeInMilliseconds() + 60;
|
||||||
|
|
||||||
|
if(heliHitWaterHard){
|
||||||
|
CVector right = CrossProduct(GetForward(), CVector(0.0f, 0.0f, 1.0f));
|
||||||
|
CParticleObject::AddObject(POBJECT_CAR_WATER_SPLASH, GetPosition() + right,
|
||||||
|
target, 0.0f, 75, color, true);
|
||||||
|
CParticleObject::AddObject(POBJECT_CAR_WATER_SPLASH, GetPosition() - right,
|
||||||
|
target, 0.0f, 75, color, true);
|
||||||
|
}
|
||||||
|
|
||||||
if(m_vecMoveSpeed.z < -0.2f)
|
if(m_vecMoveSpeed.z < -0.2f)
|
||||||
m_vecMoveSpeed.z = -0.2f;
|
m_vecMoveSpeed.z = -0.2f;
|
||||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WATER_FALL, 0.0f);
|
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WATER_FALL, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nGenerateWaterCircles > 0 && nGenerateWaterCircles < CTimer::GetTimeInMilliseconds()){
|
if(nGenerateWaterCircles > 0 && nGenerateWaterCircles <= CTimer::GetTimeInMilliseconds()){
|
||||||
CVector pos = GetPosition();
|
CVector pos = GetPosition();
|
||||||
float waterLevel = 0.0f;
|
float waterLevel = 0.0f;
|
||||||
if(CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &waterLevel, false))
|
if(CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &waterLevel, false))
|
||||||
|
@ -2896,7 +2907,7 @@ CAutomobile::ProcessBuoyancy(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nGenerateRaindrops > 0 && nGenerateRaindrops < CTimer::GetTimeInMilliseconds()){
|
if(nGenerateRaindrops > 0 && nGenerateRaindrops <= CTimer::GetTimeInMilliseconds()){
|
||||||
CVector pos = GetPosition();
|
CVector pos = GetPosition();
|
||||||
float waterLevel = 0.0f;
|
float waterLevel = 0.0f;
|
||||||
if(CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &waterLevel, false))
|
if(CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &waterLevel, false))
|
||||||
|
@ -2922,13 +2933,7 @@ CAutomobile::ProcessBuoyancy(void)
|
||||||
CVector pos = m_aWheelColPoints[i].point + 0.3f*GetUp() - GetPosition();
|
CVector pos = m_aWheelColPoints[i].point + 0.3f*GetUp() - GetPosition();
|
||||||
CVector vSpeed = GetSpeed(pos);
|
CVector vSpeed = GetSpeed(pos);
|
||||||
vSpeed.z = 0.0f;
|
vSpeed.z = 0.0f;
|
||||||
#ifdef GTA_PS2_STUFF
|
|
||||||
// ps2 puddle physics
|
|
||||||
CVector moveForce = CTimer::GetTimeStep() * (m_fMass * (vSpeed * -0.003f));
|
|
||||||
ApplyMoveForce(moveForce.x, moveForce.y, moveForce.z);
|
|
||||||
#endif
|
|
||||||
float fSpeed = vSpeed.MagnitudeSqr();
|
float fSpeed = vSpeed.MagnitudeSqr();
|
||||||
#ifdef PC_PARTICLE
|
|
||||||
if(fSpeed > sq(0.05f)){
|
if(fSpeed > sq(0.05f)){
|
||||||
fSpeed = Sqrt(fSpeed);
|
fSpeed = Sqrt(fSpeed);
|
||||||
|
|
||||||
|
@ -2948,40 +2953,12 @@ CAutomobile::ProcessBuoyancy(void)
|
||||||
if((CTimer::GetFrameCounter() & 0xF) == 0)
|
if((CTimer::GetFrameCounter() & 0xF) == 0)
|
||||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_SPLASH, 2000.0f*fSpeed);
|
DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_SPLASH, 2000.0f*fSpeed);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if ( ( (CTimer::GetFrameCounter() + i) & 3 ) == 0 )
|
|
||||||
{
|
|
||||||
if(fSpeed > sq(0.05f))
|
|
||||||
{
|
|
||||||
fSpeed = Sqrt(fSpeed);
|
|
||||||
CRGBA color(155, 185, 155, 255);
|
|
||||||
float boxY = GetColModel()->boundingBox.max.y;
|
|
||||||
CVector right = 0.5f * GetRight();
|
|
||||||
|
|
||||||
if ( i == 2 )
|
|
||||||
{
|
|
||||||
CParticle::AddParticle(PARTICLE_PED_SPLASH,
|
|
||||||
GetPosition() + (boxY * GetForward()) + right,
|
|
||||||
0.75f*m_vecMoveSpeed, NULL, 0.0f, color);
|
|
||||||
|
|
||||||
}
|
|
||||||
else if ( i == 0 )
|
|
||||||
{
|
|
||||||
CParticle::AddParticle(PARTICLE_PED_SPLASH,
|
|
||||||
GetPosition() + (boxY * GetForward()) - right,
|
|
||||||
0.75f*m_vecMoveSpeed, NULL, 0.0f, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
if((CTimer::GetFrameCounter() & 0xF) == 0)
|
|
||||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_SPLASH, 2000.0f*fSpeed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--MIAMI: done
|
||||||
void
|
void
|
||||||
CAutomobile::DoDriveByShootings(void)
|
CAutomobile::DoDriveByShootings(void)
|
||||||
{
|
{
|
||||||
|
@ -2998,7 +2975,8 @@ CAutomobile::DoDriveByShootings(void)
|
||||||
|
|
||||||
bool lookingLeft = false;
|
bool lookingLeft = false;
|
||||||
bool lookingRight = false;
|
bool lookingRight = false;
|
||||||
if(TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN){
|
if(TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN ||
|
||||||
|
TheCamera.m_bObbeCinematicCarCamOn){
|
||||||
if(CPad::GetPad(0)->GetLookLeft())
|
if(CPad::GetPad(0)->GetLookLeft())
|
||||||
lookingLeft = true;
|
lookingLeft = true;
|
||||||
if(CPad::GetPad(0)->GetLookRight())
|
if(CPad::GetPad(0)->GetLookRight())
|
||||||
|
@ -3489,18 +3467,20 @@ CAutomobile::dmgDrawCarCollidingParticles(const CVector &pos, float amount)
|
||||||
CGeneral::GetRandomNumberInRange(0.0f, 4.0f));
|
CGeneral::GetRandomNumberInRange(0.0f, 4.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--MIAMI: done
|
||||||
void
|
void
|
||||||
CAutomobile::AddDamagedVehicleParticles(void)
|
CAutomobile::AddDamagedVehicleParticles(void)
|
||||||
{
|
{
|
||||||
|
int i, n;
|
||||||
|
|
||||||
if(this == FindPlayerVehicle() && TheCamera.GetLookingForwardFirstPerson())
|
if(this == FindPlayerVehicle() && TheCamera.GetLookingForwardFirstPerson())
|
||||||
return;
|
return;
|
||||||
|
if(this != FindPlayerVehicle() && (CTimer::GetFrameCounter() + m_randomSeed) & 1)
|
||||||
uint8 engineStatus = Damage.GetEngineStatus();
|
return;
|
||||||
if(engineStatus < ENGINE_STATUS_STEAM1)
|
if(m_fHealth >= 650.0f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float fwdSpeed = DotProduct(m_vecMoveSpeed, GetForward()) * 180.0f;
|
CVector direction = 0.85f*m_vecMoveSpeed;
|
||||||
CVector direction = 0.5f*m_vecMoveSpeed;
|
|
||||||
CVector damagePos = ((CVehicleModelInfo*)CModelInfo::GetModelInfo(GetModelIndex()))->m_positions[CAR_POS_HEADLIGHTS];
|
CVector damagePos = ((CVehicleModelInfo*)CModelInfo::GetModelInfo(GetModelIndex()))->m_positions[CAR_POS_HEADLIGHTS];
|
||||||
|
|
||||||
switch(Damage.GetDoorStatus(DOOR_BONNET)){
|
switch(Damage.GetDoorStatus(DOOR_BONNET)){
|
||||||
|
@ -3518,26 +3498,72 @@ CAutomobile::AddDamagedVehicleParticles(void)
|
||||||
|
|
||||||
if(GetModelIndex() == MI_BFINJECT)
|
if(GetModelIndex() == MI_BFINJECT)
|
||||||
damagePos = CVector(0.3f, -1.5f, -0.1f);
|
damagePos = CVector(0.3f, -1.5f, -0.1f);
|
||||||
|
else if(GetModelIndex() == MI_CADDY)
|
||||||
|
damagePos = CVector(0.6f, -1.0f, -0.25f);
|
||||||
|
else if(IsRealHeli()){
|
||||||
|
damagePos.x = 0.4f*GetColModel()->boundingBox.max.x;
|
||||||
|
damagePos.y = 0.2f*GetColModel()->boundingBox.min.y;
|
||||||
|
damagePos.z = 0.3f*GetColModel()->boundingBox.max.z;
|
||||||
|
}else
|
||||||
|
damagePos.z += 0.4f*(GetColModel()->boundingBox.max.z-damagePos.z) * DotProduct(GetForward(), m_vecMoveSpeed);
|
||||||
damagePos = GetMatrix()*damagePos;
|
damagePos = GetMatrix()*damagePos;
|
||||||
damagePos.z += 0.15f;
|
damagePos.z += 0.15f;
|
||||||
|
|
||||||
if(engineStatus < ENGINE_STATUS_STEAM2){
|
bool electric = pHandling->Transmission.nEngineType == 'E';
|
||||||
if(fwdSpeed < 90.0f){
|
|
||||||
direction.z += 0.05f;
|
if(electric && m_fHealth < 320.0f && m_fHealth > 1.0f){
|
||||||
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, direction, nil, 0.1f);
|
direction = 0.85f*m_vecMoveSpeed;
|
||||||
|
direction += GetRight() * CGeneral::GetRandomNumberInRange(0.0f, 0.04f) * (1.0f - 2.0f*m_vecMoveSpeed.Magnitude());
|
||||||
|
direction.z += 0.001f;
|
||||||
|
n = (CGeneral::GetRandomNumber() & 7) + 2;
|
||||||
|
for(i = 0; i < n; i++)
|
||||||
|
CParticle::AddParticle(PARTICLE_SPARK_SMALL, damagePos, direction);
|
||||||
|
if(((CTimer::GetFrameCounter() + m_randomSeed) & 7) == 0)
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE2, damagePos, 0.8f*m_vecMoveSpeed, nil, 0.1f, 0, 0, 0, 1000);
|
||||||
|
}else if(electric && m_fHealth < 460.0f){
|
||||||
|
direction = 0.85f*m_vecMoveSpeed;
|
||||||
|
direction += GetRight() * CGeneral::GetRandomNumberInRange(0.0f, 0.04f) * (1.0f - 2.0f*m_vecMoveSpeed.Magnitude());
|
||||||
|
direction.z += 0.001f;
|
||||||
|
n = (CGeneral::GetRandomNumber() & 3) + 2;
|
||||||
|
for(i = 0; i < n; i++)
|
||||||
|
CParticle::AddParticle(PARTICLE_SPARK_SMALL, damagePos, direction);
|
||||||
|
if(((CTimer::GetFrameCounter() + m_randomSeed) & 0xF) == 0)
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE, damagePos, 0.8f*m_vecMoveSpeed, nil, 0.1f, 0, 0, 0, 1000);
|
||||||
|
}else if(m_fHealth < 250.0f){
|
||||||
|
// nothing
|
||||||
|
}else if(m_fHealth < 320.0f){
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE2, damagePos, 0.8f*direction);
|
||||||
|
}else if(m_fHealth < 390.0f){
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, 0.75f*direction);
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE, damagePos, 0.85f*direction);
|
||||||
|
}else if(m_fHealth < 460.0f){
|
||||||
|
int rnd = CTimer::GetFrameCounter() + m_randomSeed;
|
||||||
|
if(rnd < 10 ||
|
||||||
|
rnd < 70 && rnd > 25 ||
|
||||||
|
rnd < 160 && rnd > 100 ||
|
||||||
|
rnd < 200 && rnd > 175 ||
|
||||||
|
rnd > 235)
|
||||||
|
return;
|
||||||
|
direction.z += 0.05f*Max(1.0f - 1.6f*m_vecMoveSpeed.Magnitude(), 0.0f);
|
||||||
|
if(electric){
|
||||||
|
// BUG. we had that case already
|
||||||
|
direction = 0.85f*m_vecMoveSpeed;
|
||||||
|
direction += GetRight() * CGeneral::GetRandomNumberInRange(0.0f, 0.04f) * (1.0f - 2.0f*m_vecMoveSpeed.Magnitude());
|
||||||
|
direction.z += 0.001f;
|
||||||
|
n = (CGeneral::GetRandomNumber() & 2) + 2;
|
||||||
|
for(i = 0; i < n; i++)
|
||||||
|
CParticle::AddParticle(PARTICLE_SPARK_SMALL, damagePos, direction);
|
||||||
|
if(((CTimer::GetFrameCounter() + m_randomSeed) & 0xF) == 0)
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE, damagePos, 0.8f*m_vecMoveSpeed, nil, 0.1f, 0, 0, 0, 1000);
|
||||||
|
}else{
|
||||||
|
if(TheCamera.GetLookDirection() != LOOKING_FORWARD)
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, 0.75f*direction);
|
||||||
|
else if(((CTimer::GetFrameCounter() + m_randomSeed) & 1) == 0)
|
||||||
|
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, 0.85f*m_vecMoveSpeed);
|
||||||
}
|
}
|
||||||
}else if(engineStatus < ENGINE_STATUS_SMOKE){
|
}else if(((CTimer::GetFrameCounter() + m_randomSeed) & 3) == 0 ||
|
||||||
if(fwdSpeed < 90.0f)
|
((CTimer::GetFrameCounter() + m_randomSeed) & 3) == 2){
|
||||||
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, direction, nil, 0.0f);
|
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, 0.9f*direction);
|
||||||
}else if(engineStatus < ENGINE_STATUS_ON_FIRE){
|
|
||||||
if(fwdSpeed < 90.0f){
|
|
||||||
CParticle::AddParticle(PARTICLE_ENGINE_STEAM, damagePos, direction, nil, 0.0f);
|
|
||||||
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE, damagePos, 0.3f*direction, nil, 0.0f);
|
|
||||||
}
|
|
||||||
}else if(m_fHealth > 250.0f){
|
|
||||||
if(fwdSpeed < 90.0f)
|
|
||||||
CParticle::AddParticle(PARTICLE_ENGINE_SMOKE2, damagePos, 0.2f*direction, nil, 0.0f);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ bool CVehicle::bCheat5;
|
||||||
#ifdef ALT_DODO_CHEAT
|
#ifdef ALT_DODO_CHEAT
|
||||||
bool CVehicle::bAltDodoCheat;
|
bool CVehicle::bAltDodoCheat;
|
||||||
#endif
|
#endif
|
||||||
|
bool CVehicle::bHoverCheat;
|
||||||
bool CVehicle::m_bDisableMouseSteering = true;
|
bool CVehicle::m_bDisableMouseSteering = true;
|
||||||
bool CVehicle::bDisableRemoteDetonation;
|
bool CVehicle::bDisableRemoteDetonation;
|
||||||
bool CVehicle::bDisableRemoteDetonationOnContact;
|
bool CVehicle::bDisableRemoteDetonationOnContact;
|
||||||
|
|
|
@ -362,6 +362,7 @@ public:
|
||||||
#ifdef ALT_DODO_CHEAT
|
#ifdef ALT_DODO_CHEAT
|
||||||
static bool bAltDodoCheat;
|
static bool bAltDodoCheat;
|
||||||
#endif
|
#endif
|
||||||
|
static bool bHoverCheat;
|
||||||
static bool m_bDisableMouseSteering;
|
static bool m_bDisableMouseSteering;
|
||||||
static bool bDisableRemoteDetonation;
|
static bool bDisableRemoteDetonation;
|
||||||
static bool bDisableRemoteDetonationOnContact;
|
static bool bDisableRemoteDetonationOnContact;
|
||||||
|
|
Loading…
Reference in a new issue