Projectile physics hotfix from Demolitionist.

This commit is contained in:
Marisa the Magician 2022-11-11 21:07:43 +01:00
commit ec1794c755
14 changed files with 65 additions and 2 deletions

View file

@ -226,6 +226,7 @@ Class ASMDSpark : Actor
+DONTSPLASH;
+CANBOUNCEWATER;
-BOUNCEAUTOOFF;
+NOFRICTION;
BounceType "Hexen";
BounceFactor 1.0;
WallBounceFactor 1.0;
@ -437,6 +438,7 @@ Class ASMDBall : Actor
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+INTERPOLATEANGLES;
+NOFRICTION;
}
States
{

View file

@ -374,6 +374,7 @@ Class DispersionAmmo : Actor
+NODAMAGETHRUST;
+INTERPOLATEANGLES;
+HITTRACER;
+NOFRICTION;
DispersionAmmo.LightClass "DispExLight1";
DispersionAmmo.BurstClass "DispBurst1";
DispersionAmmo.ExploClass "DispExplo1";

View file

@ -64,6 +64,7 @@ Class UFireball : Actor
+NODAMAGETHRUST;
+FORCEXYBILLBOARD;
+DONTSPLASH;
+NOFRICTION;
UFireball.SpreadFactor 0.2;
UFireball.NumSmokes 1;
UFireball.NumSparks 2;

View file

@ -588,6 +588,7 @@ Class ImpalerProjectile : Actor
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+INTERPOLATEANGLES;
+NOFRICTION;
}
override void PostBeginPlay()
{

View file

@ -246,6 +246,8 @@ Class VoiceBoxHitbox : Actor
Class VoiceBoxActive : Actor
{
Mixin UMissileFix;
Actor b;
double desiredangle, anglevel, oldangle;
@ -411,6 +413,8 @@ Class Flare : UnrealInventory
Class FlareThrown : Actor
{
Mixin UMissileFix;
double pitchvel, anglevel, rollvel;
double desiredangle;
bool rotatetodesired;
@ -724,6 +728,8 @@ Class DarkFlare : BetaFlare
Class BetaFlareThrown : Actor
{
Mixin UMissileFix;
double pitchvel, anglevel, rollvel;
double desiredangle;
bool rotatetodesired;
@ -1838,6 +1844,8 @@ Class MinigunSentry : Actor
Class SentryFragment : Actor
{
Mixin UMissileFix;
int deadtimer;
double rollvel, anglevel, pitchvel;
double heat;

View file

@ -376,6 +376,16 @@ Class UNapalm : Actor
yawvel = FRandom[FlameT](10,30)*RandomPick[FlameT](-1,1);
if ( waterlevel <= 0 ) myfire = OnFire.Apply(self,target,int(120*scale.x),true,6);
}
override void FallAndSink( double grav, double oldfloorz )
{
if ( bNOGRAVITY || (waterlevel < 1) )
{
Super.FallAndSink(grav,oldfloorz);
return;
}
vel *= .99;
if ( pos.z > floorz ) vel.z += grav*.01; // floats in water
}
override void Tick()
{
Super.Tick();
@ -387,7 +397,6 @@ Class UNapalm : Actor
pitch += yawvel;
if ( waterlevel > 0 )
{
vel.xy *= 0.98;
rollvel *= 0.98;
pitchvel *= 0.98;
yawvel *= 0.98;

View file

@ -88,6 +88,7 @@ Class PeaceRocket : Actor
+NODAMAGETHRUST;
+INTERPOLATEANGLES;
+HITOWNER;
+NOFRICTION;
ReactionTime 9;
}
override void PostBeginPlay()
@ -207,6 +208,8 @@ Class PeaceFragment : SentryFragment
Class PeaceBarrel : Actor
{
Mixin UMissileFix;
action void A_AlignSelf()
{
// find closest 3d floor for its normal

View file

@ -48,6 +48,7 @@ Class RazorBlade : Actor
+NODAMAGETHRUST;
+DONTBOUNCEONSHOOTABLES;
+ROLLSPRITE;
+NOFRICTION;
}
override void PostBeginPlay()
{

View file

@ -67,6 +67,8 @@ Class StingerBurstLight : PaletteLight
Class StingerChunk : Actor
{
Mixin UMissileFix;
int deadtimer;
double rollvel, anglevel, pitchvel;
@ -417,6 +419,7 @@ Class StingerProjectile : Actor
Height 2;
PROJECTILE;
+SKYEXPLODE;
+NOFRICTION;
}
override void PostBeginPlay()
{

View file

@ -81,6 +81,16 @@ Class UBioGel : Actor
if ( (victim is 'BioHitbox') && ((victim.target == master) || (victim.target.master == master)) ) return 1;
return -1;
}
override void FallAndSink( double grav, double oldfloorz )
{
if ( bNOGRAVITY || (waterlevel < 1) )
{
Super.FallAndSink(grav,oldfloorz);
return;
}
vel *= .99;
if ( pos.z > floorz ) vel.z += grav*.01; // floats in water
}
override void Tick()
{
Super.Tick();
@ -92,7 +102,6 @@ Class UBioGel : Actor
pitch += yawvel;
if ( waterlevel > 0 )
{
vel.xy *= 0.98;
rollvel *= 0.98;
pitchvel *= 0.98;
yawvel *= 0.98;

View file

@ -91,6 +91,8 @@ Class URocketTrail : Actor
Class URocket : Actor
{
Mixin UMissileFix;
Vector3 InitialDir, Acceleration;
int ticcnt;
bool ringex;

View file

@ -97,6 +97,8 @@ Class NaliFruit : Health
Class SeedProj : Actor
{
Mixin UMissileFix;
double pitchvel, anglevel, rollvel;
double desiredangle;
bool rotatetodesired;

View file

@ -1,3 +1,22 @@
// backported from DEMOLITIONIST, needed to fix the broken water physics of some projectiles
Mixin Class UMissileFix
{
Default
{
+NOFRICTION;
}
override void FallAndSink( double grav, double oldfloorz )
{
if ( bNOGRAVITY || (waterlevel < 1) )
{
Super.FallAndSink(grav,oldfloorz);
return;
}
vel *= .99;
if ( pos.z > floorz ) vel.z -= grav*.01;
}
}
Class UPlayer : UTPlayer
{
Default

View file

@ -20,6 +20,8 @@ Class UTranslocatorAmmo : Ammo
Class UTranslocatorModule : Actor
{
Mixin UMissileFix;
Actor b;
bool alreadyhit;
double anglevel;