Projectile physics hotfix from Demolitionist.

This commit is contained in:
Marisa the Magician 2022-11-11 21:07:13 +01:00
commit 9e43bf8b8b
11 changed files with 57 additions and 7 deletions

View file

@ -54,6 +54,7 @@ Class BioSpark : Actor
+DONTSPLASH; +DONTSPLASH;
-BOUNCEAUTOOFF; -BOUNCEAUTOOFF;
+BOUNCEAUTOOFFFLOORONLY; +BOUNCEAUTOOFFFLOORONLY;
+NOFRICTION;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.5; BounceFactor 0.5;
WallBounceFactor 0.5; WallBounceFactor 0.5;
@ -195,6 +196,16 @@ Class BioGel : Actor
if ( (victim is 'BioHitbox') && ((victim.target == master) || (victim.target.master == master)) ) return 1; if ( (victim is 'BioHitbox') && ((victim.target == master) || (victim.target.master == master)) ) return 1;
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() override void Tick()
{ {
Super.Tick(); Super.Tick();
@ -206,7 +217,6 @@ Class BioGel : Actor
pitch += yawvel; pitch += yawvel;
if ( waterlevel > 0 ) if ( waterlevel > 0 )
{ {
vel.xy *= 0.98;
rollvel *= 0.98; rollvel *= 0.98;
pitchvel *= 0.98; pitchvel *= 0.98;
yawvel *= 0.98; yawvel *= 0.98;
@ -580,6 +590,7 @@ Class BioGel : Actor
+NODAMAGETHRUST; +NODAMAGETHRUST;
+HITTRACER; +HITTRACER;
+INTERPOLATEANGLES; +INTERPOLATEANGLES;
+NOFRICTION;
} }
States States
{ {

View file

@ -105,6 +105,8 @@ Class RocketExplLight : PaletteLight
Class UTRocket : Actor Class UTRocket : Actor
{ {
Mixin UTMissileFix;
Vector3 InitialDir, Acceleration; Vector3 InitialDir, Acceleration;
int ticcnt; int ticcnt;
Default Default

View file

@ -116,6 +116,8 @@ Class Splasher : Actor
Class UTCasing : Actor Class UTCasing : Actor
{ {
Mixin UTMissileFix;
int deadtimer, numbounces; int deadtimer, numbounces;
double pitchvel, anglevel; double pitchvel, anglevel;
double heat; double heat;

View file

@ -189,6 +189,8 @@ Class FlakAccumulator : Thinker
Class FlakChunk : Actor Class FlakChunk : Actor
{ {
Mixin UTMissileFix;
ChunkTrail trail; ChunkTrail trail;
double rollvel, pitchvel, yawvel; double rollvel, pitchvel, yawvel;
double lifetime, lifespeed; double lifetime, lifespeed;
@ -236,7 +238,6 @@ Class FlakChunk : Actor
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( waterlevel > 0 ) if ( waterlevel > 0 )
{ {
vel.xy *= 0.98;
rollvel *= 0.98; rollvel *= 0.98;
pitchvel *= 0.98; pitchvel *= 0.98;
yawvel *= 0.98; yawvel *= 0.98;
@ -483,6 +484,8 @@ Class SlugLight : PaletteLight
Class FlakSlug : Actor Class FlakSlug : Actor
{ {
Mixin UTMissileFix;
Default Default
{ {
Obituary "$O_FLAKCANNON"; Obituary "$O_FLAKCANNON";
@ -504,11 +507,6 @@ Class FlakSlug : Actor
Super.PostBeginPlay(); Super.PostBeginPlay();
vel.z += 3; vel.z += 3;
} }
override void Tick()
{
Super.Tick();
if ( waterlevel > 0 ) vel.xy *= 0.98;
}
action void A_FlakExplode() action void A_FlakExplode()
{ {
bForceXYBillboard = true; bForceXYBillboard = true;

View file

@ -56,6 +56,7 @@ Class PulseSpark : Actor
+DONTSPLASH; +DONTSPLASH;
+CANBOUNCEWATER; +CANBOUNCEWATER;
-BOUNCEAUTOOFF; -BOUNCEAUTOOFF;
+NOFRICTION;
BounceType "Doom"; BounceType "Doom";
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;
@ -174,6 +175,7 @@ Class PulseBall : Actor
+EXPLODEONWATER; +EXPLODEONWATER;
+SKYEXPLODE; +SKYEXPLODE;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+NOFRICTION;
Scale 0.19; Scale 0.19;
Speed 22; Speed 22;
Radius 2; Radius 2;

View file

@ -70,6 +70,7 @@ Class Razor2 : Actor
+CANBOUNCEWATER; +CANBOUNCEWATER;
+NODAMAGETHRUST; +NODAMAGETHRUST;
+DONTBOUNCEONSHOOTABLES; +DONTBOUNCEONSHOOTABLES;
+NOFRICTION;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {

View file

@ -219,6 +219,7 @@ Class ShockSpark : Actor
+DONTSPLASH; +DONTSPLASH;
+CANBOUNCEWATER; +CANBOUNCEWATER;
-BOUNCEAUTOOFF; -BOUNCEAUTOOFF;
+NOFRICTION;
BounceType "Doom"; BounceType "Doom";
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;
@ -290,6 +291,7 @@ Class ShockBeam : Actor
+FORCERADIUSDMG; +FORCERADIUSDMG;
+NODAMAGETHRUST; +NODAMAGETHRUST;
+NOTELEPORT; +NOTELEPORT;
+NOFRICTION;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {
@ -451,6 +453,7 @@ Class SuperShockSpark : Actor
+DONTSPLASH; +DONTSPLASH;
+CANBOUNCEWATER; +CANBOUNCEWATER;
-BOUNCEAUTOOFF; -BOUNCEAUTOOFF;
+NOFRICTION;
BounceType "Doom"; BounceType "Doom";
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;
@ -900,6 +903,7 @@ Class ShockBall : Actor
+EXPLODEONWATER; +EXPLODEONWATER;
+FORCERADIUSDMG; +FORCERADIUSDMG;
+NODAMAGETHRUST; +NODAMAGETHRUST;
+NOFRICTION;
} }
States States
{ {
@ -996,6 +1000,7 @@ Class SuperShockBall : Actor
+EXPLODEONWATER; +EXPLODEONWATER;
+FORCERADIUSDMG; +FORCERADIUSDMG;
+NODAMAGETHRUST; +NODAMAGETHRUST;
+NOFRICTION;
} }
States States
{ {

View file

@ -120,6 +120,8 @@ Class TranslocatorGlow : Actor
Class TranslocatorModule : Actor Class TranslocatorModule : Actor
{ {
Mixin UTMissileFix;
Actor b; Actor b;
bool alreadyhit; bool alreadyhit;

View file

@ -15,6 +15,25 @@ const firstbloodmsg_id = -1401;
const spreemsg_id = -1402; const spreemsg_id = -1402;
const multimsg_id = -1403; const multimsg_id = -1403;
// backported from DEMOLITIONIST, needed to fix the broken water physics of some projectiles
Mixin Class UTMissileFix
{
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 UTPlayer : DoomPlayer Class UTPlayer : DoomPlayer
{ {
bool doprintnoammo; bool doprintnoammo;
@ -2149,6 +2168,7 @@ Class UTSpark : Actor
+THRUACTORS; +THRUACTORS;
+NOTELEPORT; +NOTELEPORT;
+DONTSPLASH; +DONTSPLASH;
+NOFRICTION;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.4; BounceFactor 0.4;
Gravity 0.2; Gravity 0.2;
@ -2209,6 +2229,8 @@ Class UTViewSpark : UTSpark
Class UTChip : Actor Class UTChip : Actor
{ {
Mixin UTMissileFix;
int deadtimer; int deadtimer;
double rollvel, anglevel, pitchvel; double rollvel, anglevel, pitchvel;

View file

@ -60,6 +60,8 @@ Class UTBlood : Actor
// single drop of blod // single drop of blod
Class UTBloodDrop : Actor Class UTBloodDrop : Actor
{ {
Mixin UTMissileFix;
Default Default
{ {
Scale 0.24; Scale 0.24;
@ -450,6 +452,8 @@ Class UTPlayerGibber : UTGibber
// Chunks // Chunks
Class UTGib : Actor Class UTGib : Actor
{ {
Mixin UTMissileFix;
double rollvel, anglevel, pitchvel; double rollvel, anglevel, pitchvel;
Default Default

View file

@ -280,6 +280,7 @@ Class WarShell : Actor
+FORCERADIUSDMG; +FORCERADIUSDMG;
+EXPLODEONWATER; +EXPLODEONWATER;
+INTERPOLATEANGLES; +INTERPOLATEANGLES;
+NOFRICTION;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {