From 31ea4f73b10623b3dbc56e9ea31e2be83fd081f8 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Fri, 11 Nov 2022 01:46:39 +0100 Subject: [PATCH] Fix wacky-ass water physics for projectiles. --- language.version | 4 ++-- zscript/dlc1/swwm_mister_fx.zsc | 2 ++ zscript/dlc1/swwm_notashotgun_fx.zsc | 2 ++ zscript/items/swwm_funstuff.zsc | 2 ++ zscript/items/swwm_powerups.zsc | 2 ++ zscript/swwm_blod.zsc | 5 +++-- zscript/swwm_common.zsc | 15 +++++++++++++++ zscript/swwm_common_fx.zsc | 3 ++- zscript/swwm_gesture_fx.zsc | 1 + zscript/swwm_monsters.zsc | 1 + zscript/swwm_player_fx.zsc | 1 + zscript/weapons/swwm_baseweapon_fx.zsc | 7 ++++++- zscript/weapons/swwm_blazeit_fx.zsc | 3 +++ zscript/weapons/swwm_danmaku_fx.zsc | 4 ++++ zscript/weapons/swwm_deathlydeathcannon_fx.zsc | 2 ++ zscript/weapons/swwm_deepdarkimpact_fx.zsc | 1 + zscript/weapons/swwm_sparkyboi_fx.zsc | 4 ++++ zscript/weapons/swwm_splode_fx.zsc | 3 +++ zscript/weapons/swwm_tastytreat_fx.zsc | 5 +++++ 19 files changed, 61 insertions(+), 6 deletions(-) diff --git a/language.version b/language.version index 238ebd633..5c67cd452 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r606 \cu(Fri 11 Nov 00:08:54 CET 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r606 \cu(2022-11-11 00:08:54)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r607 \cu(Fri 11 Nov 01:46:39 CET 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r607 \cu(2022-11-11 01:46:39)\c-"; diff --git a/zscript/dlc1/swwm_mister_fx.zsc b/zscript/dlc1/swwm_mister_fx.zsc index f50726e61..63a4f6f56 100644 --- a/zscript/dlc1/swwm_mister_fx.zsc +++ b/zscript/dlc1/swwm_mister_fx.zsc @@ -960,6 +960,8 @@ Class TargetTracer : LineTracer Class MisterGrenade : Actor { + Mixin SWWMMissileFix; + Vector3 oldvel; Default diff --git a/zscript/dlc1/swwm_notashotgun_fx.zsc b/zscript/dlc1/swwm_notashotgun_fx.zsc index 0fcf30436..bade41e73 100644 --- a/zscript/dlc1/swwm_notashotgun_fx.zsc +++ b/zscript/dlc1/swwm_notashotgun_fx.zsc @@ -330,6 +330,7 @@ Class QuadProj : Actor +FORCERADIUSDMG; +NODAMAGETHRUST; +HITMASTER; + +NOFRICTION; RenderStyle "Add"; } @@ -358,6 +359,7 @@ Class QuadExplArm : Actor +NODAMAGETHRUST; +FORCERADIUSDMG; -NOGRAVITY; + +NOFRICTION; Gravity .35; BounceFactor 1.; Radius 2; diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index 1cb9cc91e..10a6d4dc4 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -1394,6 +1394,7 @@ Class ChanceboxTop : Actor Species "Chancebox"; PROJECTILE; +THRUSPECIES; + +NOFRICTION; } override void PostBeginPlay() { @@ -1430,6 +1431,7 @@ Class ChanceboxSide : Actor Species "Chancebox"; PROJECTILE; +THRUSPECIES; + +NOFRICTION; } override void PostBeginPlay() { diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index df6a852c8..57dc07191 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -3645,6 +3645,8 @@ Class BallImpact : SWWMNonInteractiveActor Class TheBall : Actor { + Mixin SWWMMissileFix; + double heat; int deadtimer; Vector3 oldvel; diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index fa69257e3..c27defe82 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -450,6 +450,8 @@ Class mkBloodSmoke2 : mkBloodSmoke // inspired by Lud's Universal Gibs Class mkFlyingGib : Actor { + Mixin SWWMMissileFix; + bool killme; int lastbleed; color shadecol; @@ -503,8 +505,7 @@ Class mkFlyingGib : Actor roll += rollvel; if ( waterlevel > 0 ) { - rollvel *= .98; - vel.xy *= .98; + rollvel *= .99; return; } if ( !bleeding ) return; diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index 9c24810e3..59904403e 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -118,6 +118,21 @@ Class SWWMNothing : SWWMNonInteractiveActor } } +// mixins for gravity-affected missiles that need correct water behavior +Mixin Class SWWMMissileFix +{ + Default + { + +NOFRICTION; + } + override void FallAndSink( double grav, double oldfloorz ) + { + if ( bNOGRAVITY || (waterlevel < 1) ) return; + vel *= .99; + if ( pos.z > floorz ) vel.z -= grav*.01; + } +} + Class SWWMDamageAccumulator : Inventory { Actor inflictor, source; diff --git a/zscript/swwm_common_fx.zsc b/zscript/swwm_common_fx.zsc index 707dc6ed0..7537f38cb 100644 --- a/zscript/swwm_common_fx.zsc +++ b/zscript/swwm_common_fx.zsc @@ -705,7 +705,8 @@ Class SWWMChip : SWWMNonInteractiveActor if ( killme ) A_FadeOut(.01); if ( waterlevel > 0 ) { - vel *= .98; + vel *= .99; + if ( pos.z > floorz ) vel.z -= gravity*.01; anglevel *= .98; pitchvel *= .98; rollvel *= .98; diff --git a/zscript/swwm_gesture_fx.zsc b/zscript/swwm_gesture_fx.zsc index 4c0afe50f..d23592504 100644 --- a/zscript/swwm_gesture_fx.zsc +++ b/zscript/swwm_gesture_fx.zsc @@ -98,6 +98,7 @@ Class LoveHeart : Actor +FOILINVUL; +PAINLESS; +NODAMAGETHRUST; + +NOFRICTION; } override int DoSpecialDamage( Actor target, int damage, Name damagetype ) diff --git a/zscript/swwm_monsters.zsc b/zscript/swwm_monsters.zsc index 6858737c4..cd481c7e7 100644 --- a/zscript/swwm_monsters.zsc +++ b/zscript/swwm_monsters.zsc @@ -162,6 +162,7 @@ Class SWWMBossBrainExplArm : Actor +BOUNCEONFLOORS; +BOUNCEONCEILINGS; -NOGRAVITY; + +NOFRICTION; Gravity 0.35; BounceFactor 1.0; Radius 4; diff --git a/zscript/swwm_player_fx.zsc b/zscript/swwm_player_fx.zsc index 3b80be0ff..647abd08e 100644 --- a/zscript/swwm_player_fx.zsc +++ b/zscript/swwm_player_fx.zsc @@ -162,6 +162,7 @@ Class DemolitionistRadiusShockwave : Actor +RIPPER; +BLOODLESSIMPACT; -NOGRAVITY; + +NOFRICTION; } override int DoSpecialDamage( Actor target, int damage, Name damagetype ) { diff --git a/zscript/weapons/swwm_baseweapon_fx.zsc b/zscript/weapons/swwm_baseweapon_fx.zsc index d9b56683c..9016d3bff 100644 --- a/zscript/weapons/swwm_baseweapon_fx.zsc +++ b/zscript/weapons/swwm_baseweapon_fx.zsc @@ -2,6 +2,8 @@ Class SWWMCasing : Actor abstract { + Mixin SWWMMissileFix; + SWWMCasing prevcasing, nextcasing; bool killme; int numbounces; @@ -23,6 +25,7 @@ Class SWWMCasing : Actor abstract +ROLLSPRITE; +ROLLCENTER; +SYNCHRONIZED; + +CANBOUNCEWATER; Mass 1; Gravity 0.35; BounceType "Hexen"; @@ -51,7 +54,6 @@ Class SWWMCasing : Actor abstract if ( killme ) A_FadeOut(.01); if ( waterlevel > 0 ) { - vel.xy *= .98; anglevel *= .98; pitchvel *= .98; } @@ -89,6 +91,9 @@ Class SWWMCasing : Actor abstract bINTERPOLATEANGLES = false; pitch = roll = 0; angle = FRandom[Junk](0,360); + // disappear if we fell into a terrain with floor clip + if ( GetFloorTerrain().footclip > 0 ) + Destroy(); } Stop; } diff --git a/zscript/weapons/swwm_blazeit_fx.zsc b/zscript/weapons/swwm_blazeit_fx.zsc index b72106e74..8b3dadc2e 100644 --- a/zscript/weapons/swwm_blazeit_fx.zsc +++ b/zscript/weapons/swwm_blazeit_fx.zsc @@ -82,6 +82,7 @@ Class HellblazerArm : Actor +NODAMAGETHRUST; +FORCERADIUSDMG; -NOGRAVITY; + +NOFRICTION; Gravity 0.35; BounceFactor 1.0; Radius 4; @@ -179,6 +180,8 @@ Class HellblazerFlare : SWWMNonInteractiveActor // rockets Class HellblazerMissile : Actor { + Mixin SWWMMissileFix; + int deto; Actor seektarget; Vector3 InitialDir, Acceleration; diff --git a/zscript/weapons/swwm_danmaku_fx.zsc b/zscript/weapons/swwm_danmaku_fx.zsc index 4a36dc92e..879fd8a84 100644 --- a/zscript/weapons/swwm_danmaku_fx.zsc +++ b/zscript/weapons/swwm_danmaku_fx.zsc @@ -121,6 +121,8 @@ Class EvisceratorChunkTrail : SWWMNonInteractiveActor Class EvisceratorChunk : Actor { + Mixin SWWMMissileFix; + Actor lasthit; double anglevel, pitchvel, rollvel; double lifetime, lifespeed; @@ -424,6 +426,8 @@ Class EvisceratorProjLight : PaletteLight Class EvisceratorProj : Actor { + Mixin SWWMMissileFix; + double heat; Vector3 startpos; Default diff --git a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc index ebb71aa80..2c516a1d1 100644 --- a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc @@ -220,6 +220,7 @@ Class YnykronImpactArm : Actor +NODAMAGETHRUST; +FORCERADIUSDMG; -NOGRAVITY; + +NOFRICTION; Gravity 0.35; BounceFactor 1.0; Radius 2; @@ -1927,6 +1928,7 @@ Class YnykronSingularityExplosionArm : Actor +NODAMAGETHRUST; +FORCERADIUSDMG; -NOGRAVITY; + +NOFRICTION; Gravity 0.35; BounceFactor 1.0; Radius 2; diff --git a/zscript/weapons/swwm_deepdarkimpact_fx.zsc b/zscript/weapons/swwm_deepdarkimpact_fx.zsc index 1086397c2..cc3f167ca 100644 --- a/zscript/weapons/swwm_deepdarkimpact_fx.zsc +++ b/zscript/weapons/swwm_deepdarkimpact_fx.zsc @@ -17,6 +17,7 @@ Class AirBullet : FastProjectile +FORCERADIUSDMG; +NODAMAGETHRUST; +RIPPER; + +NOFRICTION; } override void PostBeginPlay() { diff --git a/zscript/weapons/swwm_sparkyboi_fx.zsc b/zscript/weapons/swwm_sparkyboi_fx.zsc index 38077a8ae..a50d41472 100644 --- a/zscript/weapons/swwm_sparkyboi_fx.zsc +++ b/zscript/weapons/swwm_sparkyboi_fx.zsc @@ -372,6 +372,7 @@ Class BigBiospark : Actor +BOUNCEONFLOORS; +BOUNCEONCEILINGS; +CANBOUNCEWATER; + +NOFRICTION; } States { @@ -408,6 +409,7 @@ Class BiosparkBall : Actor +NODAMAGETHRUST; +EXPLODEONWATER; +FORCEXYBILLBOARD; + +NOFRICTION; } override void PostBeginPlay() { @@ -1574,6 +1576,8 @@ Class BiosparkSpark : SWWMNonInteractiveActor Class BiosparkCore : Actor { + Mixin SWWMMissileFix; + Vector3 oldvel; double anglevel, pitchvel, rollvel; diff --git a/zscript/weapons/swwm_splode_fx.zsc b/zscript/weapons/swwm_splode_fx.zsc index 54bdf4b9b..507df866a 100644 --- a/zscript/weapons/swwm_splode_fx.zsc +++ b/zscript/weapons/swwm_splode_fx.zsc @@ -45,6 +45,7 @@ Class ExplodiumMagArm : Actor +NODAMAGETHRUST; +FORCERADIUSDMG; -NOGRAVITY; + +NOFRICTION; Gravity 0.35; BounceFactor 1.0; Radius 2; @@ -102,6 +103,8 @@ Class ExplodiumMagTrail : SWWMNonInteractiveActor Class ExplodiumMagProj : Actor { + Mixin SWWMMissileFix; + double pitchvel, anglevel; Vector3 cvel; diff --git a/zscript/weapons/swwm_tastytreat_fx.zsc b/zscript/weapons/swwm_tastytreat_fx.zsc index 08c3fdf5d..8c219150a 100644 --- a/zscript/weapons/swwm_tastytreat_fx.zsc +++ b/zscript/weapons/swwm_tastytreat_fx.zsc @@ -325,6 +325,7 @@ Class CandyMagArm : Actor +FORCERADIUSDMG; -NOGRAVITY; +FOILINVUL; + +NOFRICTION; Gravity 0.35; BounceFactor 1.0; Radius 2; @@ -463,6 +464,8 @@ Class CandyMagArmBig : CandyMagArm Class CandyGunProj : Actor { + Mixin SWWMMissileFix; + double pitchvel, anglevel; Vector3 cvel; @@ -600,6 +603,8 @@ Class CandyGunProj : Actor Class CandyMagProj : Actor { + Mixin SWWMMissileFix; + double pitchvel, anglevel; Vector3 cvel;