diff --git a/zscript/asmd.zsc b/zscript/asmd.zsc index db607a7..ca08a88 100644 --- a/zscript/asmd.zsc +++ b/zscript/asmd.zsc @@ -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 { diff --git a/zscript/dispersionpistol.zsc b/zscript/dispersionpistol.zsc index d628edf..ca6e619 100644 --- a/zscript/dispersionpistol.zsc +++ b/zscript/dispersionpistol.zsc @@ -374,6 +374,7 @@ Class DispersionAmmo : Actor +NODAMAGETHRUST; +INTERPOLATEANGLES; +HITTRACER; + +NOFRICTION; DispersionAmmo.LightClass "DispExLight1"; DispersionAmmo.BurstClass "DispBurst1"; DispersionAmmo.ExploClass "DispExplo1"; diff --git a/zscript/flamegun.zsc b/zscript/flamegun.zsc index de6576f..1f8f863 100644 --- a/zscript/flamegun.zsc +++ b/zscript/flamegun.zsc @@ -64,6 +64,7 @@ Class UFireball : Actor +NODAMAGETHRUST; +FORCEXYBILLBOARD; +DONTSPLASH; + +NOFRICTION; UFireball.SpreadFactor 0.2; UFireball.NumSmokes 1; UFireball.NumSparks 2; diff --git a/zscript/impaler.zsc b/zscript/impaler.zsc index b66f2b3..b893fe0 100644 --- a/zscript/impaler.zsc +++ b/zscript/impaler.zsc @@ -588,6 +588,7 @@ Class ImpalerProjectile : Actor +FORCERADIUSDMG; +NODAMAGETHRUST; +INTERPOLATEANGLES; + +NOFRICTION; } override void PostBeginPlay() { diff --git a/zscript/miscitems.zsc b/zscript/miscitems.zsc index c78f71e..fa4e903 100644 --- a/zscript/miscitems.zsc +++ b/zscript/miscitems.zsc @@ -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; diff --git a/zscript/napalm.zsc b/zscript/napalm.zsc index f3ccd33..c568f37 100644 --- a/zscript/napalm.zsc +++ b/zscript/napalm.zsc @@ -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; diff --git a/zscript/peacemaker.zsc b/zscript/peacemaker.zsc index d5a3a0a..b45ba0d 100644 --- a/zscript/peacemaker.zsc +++ b/zscript/peacemaker.zsc @@ -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 diff --git a/zscript/razorjack.zsc b/zscript/razorjack.zsc index 2c2a225..e3bf905 100644 --- a/zscript/razorjack.zsc +++ b/zscript/razorjack.zsc @@ -48,6 +48,7 @@ Class RazorBlade : Actor +NODAMAGETHRUST; +DONTBOUNCEONSHOOTABLES; +ROLLSPRITE; + +NOFRICTION; } override void PostBeginPlay() { diff --git a/zscript/stinger.zsc b/zscript/stinger.zsc index f41cebd..3da90b0 100644 --- a/zscript/stinger.zsc +++ b/zscript/stinger.zsc @@ -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() { diff --git a/zscript/ubiorifle.zsc b/zscript/ubiorifle.zsc index 46574aa..7be80a5 100644 --- a/zscript/ubiorifle.zsc +++ b/zscript/ubiorifle.zsc @@ -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; diff --git a/zscript/ueightball.zsc b/zscript/ueightball.zsc index 27635f7..195c4b6 100644 --- a/zscript/ueightball.zsc +++ b/zscript/ueightball.zsc @@ -91,6 +91,8 @@ Class URocketTrail : Actor Class URocket : Actor { + Mixin UMissileFix; + Vector3 InitialDir, Acceleration; int ticcnt; bool ringex; diff --git a/zscript/uhealitems.zsc b/zscript/uhealitems.zsc index db53f4f..e809da4 100644 --- a/zscript/uhealitems.zsc +++ b/zscript/uhealitems.zsc @@ -97,6 +97,8 @@ Class NaliFruit : Health Class SeedProj : Actor { + Mixin UMissileFix; + double pitchvel, anglevel, rollvel; double desiredangle; bool rotatetodesired; diff --git a/zscript/unrealcommon.zsc b/zscript/unrealcommon.zsc index 54eeb94..b7b1b28 100644 --- a/zscript/unrealcommon.zsc +++ b/zscript/unrealcommon.zsc @@ -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 diff --git a/zscript/utranslocator.zsc b/zscript/utranslocator.zsc index f9facc6..8cd6432 100644 --- a/zscript/utranslocator.zsc +++ b/zscript/utranslocator.zsc @@ -20,6 +20,8 @@ Class UTranslocatorAmmo : Ammo Class UTranslocatorModule : Actor { + Mixin UMissileFix; + Actor b; bool alreadyhit; double anglevel;