From 514c1a8a1fdfad90c8c071b38d74be048bb14e1b Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Sun, 21 Aug 2022 22:40:27 +0200 Subject: [PATCH] Adjust Quadravol splash damage. --- language.version | 4 ++-- zscript/dlc1/swwm_notashotgun_fx.zsc | 20 ++++++++++---------- zscript/utility/swwm_utility.zsc | 15 ++++++++++----- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/language.version b/language.version index 2fdeafae2..faee26a6a 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r356 \cu(Sun 21 Aug 16:38:54 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r356 \cu(2022-08-21 16:38:54)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r357 \cu(Sun 21 Aug 22:40:27 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r357 \cu(2022-08-21 22:40:27)\c-"; diff --git a/zscript/dlc1/swwm_notashotgun_fx.zsc b/zscript/dlc1/swwm_notashotgun_fx.zsc index 299b30d9c..e64655e48 100644 --- a/zscript/dlc1/swwm_notashotgun_fx.zsc +++ b/zscript/dlc1/swwm_notashotgun_fx.zsc @@ -313,9 +313,9 @@ Class QuadProj : Actor } if ( tracer ) SWWMUtility.DoKnockback(tracer,-x+(0,0,.1),bAMBUSH?150000:500000); A_QuakeEx(3,3,3,20,0,500,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:200,rollintensity:.6); - SWWMUtility.DoExplosion(self,0,80000+special2,240,80,DE_BLAST|DE_EXTRAZTHRUST); - SWWMUtility.DoExplosion(self,100+special1,0,240,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer); - SWWMUtility.DoExplosion(self,150+special1,0,200,80,DE_HOWL|DE_NOSPLASH,ignoreme:tracer); + SWWMUtility.DoExplosion(self,0,80000+special2,150,40,DE_BLAST|DE_EXTRAZTHRUST); + SWWMUtility.DoExplosion(self,100+special1,0,150,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer); + SWWMUtility.DoExplosion(self,150+special1,0,120,40,DE_HOWL|DE_NOSPLASH,ignoreme:tracer); A_StartSound("quadshot/hit",CHAN_WEAPON,attenuation:.6); A_StartSound("quadshot/hit",CHAN_VOICE,attenuation:.4); A_AlertMonsters(swwm_uncapalert?0:1500); @@ -578,9 +578,9 @@ Class QuadProj2 : QuadProj } if ( tracer ) SWWMUtility.DoKnockback(tracer,-x+(0,0,.1),bAMBUSH?160000:600000); A_QuakeEx(5,5,5,25,0,900,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:400,rollintensity:.8); - SWWMUtility.DoExplosion(self,0,100000+special2,480,120,DE_BLAST|DE_EXTRAZTHRUST); - SWWMUtility.DoExplosion(self,200+special1,0,480,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer); - SWWMUtility.DoExplosion(self,300+special1,0,400,120,DE_HOWL|DE_NOSPLASH,ignoreme:tracer); + SWWMUtility.DoExplosion(self,0,100000+special2,240,80,DE_BLAST|DE_EXTRAZTHRUST); + SWWMUtility.DoExplosion(self,200+special1,0,240,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer); + SWWMUtility.DoExplosion(self,300+special1,0,200,80,DE_HOWL|DE_NOSPLASH,ignoreme:tracer); A_StartSound("quadshot/twohit",CHAN_WEAPON,attenuation:.5); A_StartSound("quadshot/twohit",CHAN_VOICE,attenuation:.25); A_AlertMonsters(swwm_uncapalert?0:2500); @@ -854,9 +854,9 @@ Class QuadProj3 : QuadProj } if ( tracer ) SWWMUtility.DoKnockback(tracer,-x+(0,0,.1),bAMBUSH?180000:800000); A_QuakeEx(7,7,7,35,0,1200,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:600,rollintensity:1.2); - SWWMUtility.DoExplosion(self,0,150000+special2,700,150,DE_BLAST|DE_EXTRAZTHRUST); - SWWMUtility.DoExplosion(self,400+special1,0,700,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer); - SWWMUtility.DoExplosion(self,500+special1,0,600,150,DE_HOWL|DE_NOSPLASH,ignoreme:tracer); + SWWMUtility.DoExplosion(self,0,150000+special2,300,120,DE_BLAST|DE_EXTRAZTHRUST); + SWWMUtility.DoExplosion(self,400+special1,0,300,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer); + SWWMUtility.DoExplosion(self,500+special1,0,240,120,DE_HOWL|DE_NOSPLASH,ignoreme:tracer); A_StartSound("quadshot/twohit",CHAN_WEAPON,attenuation:.4,pitch:.9); A_StartSound("quadshot/twohit",CHAN_VOICE,attenuation:.3,pitch:.8); A_StartSound("quadshot/extrahit",CHAN_ITEM,attenuation:.2,pitch:1.1); @@ -1048,7 +1048,7 @@ Class OnFire : Thinker let q = instigator.FindInventory("Quadravol"); if ( q ) inflictor = q; } - SWWMUtility.DoExplosion(victim,clamp(int(amount*.15),1,50),0,victim.radius+40+amount/5,0,DE_NOBLEED|DE_NOSPLASH|DE_HOWL,'Fire',instigator,DMG_THRUSTLESS,instigator,inflictor); + SWWMUtility.DoExplosion(victim,clamp(int(amount*.15),1,50),0,victim.radius+40+amount/5,0,DE_NOBLEED|DE_NOSPLASH|DE_HOWL|DE_CENTERHEIGHT,'Fire',instigator,DMG_THRUSTLESS,instigator,inflictor); } static OnFire Apply( Actor victim, Actor instigator, int amount ) diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index 2ca010a7f..dc79c2378 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -13,7 +13,8 @@ enum EDoExplosionFlags DE_COUNTSTEALTH = 256, // only count hits for inactive monsters DE_COUNTFHKILLS = 512, // only count kills for enemies that were at full health DE_NOHURTFRIEND = 1024, // splash damage will not affect allies - DE_QUADRAVOL = 2048 // splash burn from a Quadravol projectile, so it'll ignite enemies instead of dealing damage + DE_CENTERHEIGHT = 2048, // origin of explosion is at the center height of the source actor, rather than its base + DE_QUADRAVOL = 4096 // splash burn from a Quadravol projectile, so it'll ignite enemies instead of dealing damage }; enum EExitType @@ -1191,12 +1192,12 @@ Class SWWMUtility // debug, display radius sphere if ( swwm_debugblast ) { - let s = Actor.Spawn("RadiusDebugSphere",Source.pos); + let s = Actor.Spawn("RadiusDebugSphere",(flags&DE_CENTERHEIGHT)?Source.Vec3Offset(0,0,Source.height/2):Source.pos); s.Scale *= ExplosionRadius; s.SetShade((Damage>0)?"Green":"Blue"); if ( FullDamageRadius > 0. ) { - let s = Actor.Spawn("RadiusDebugSphere",Source.pos); + let s = Actor.Spawn("RadiusDebugSphere",(flags&DE_CENTERHEIGHT)?Source.Vec3Offset(0,0,Source.height/2):Source.pos); s.Scale *= FullDamageRadius; s.SetShade("Red"); } @@ -1235,7 +1236,9 @@ Class SWWMUtility if ( !SWWMUtility.SphereIntersect(a,Source.pos,ExplosionRadius) ) continue; // calculate factor - Vector3 dir = level.Vec3Diff(Source.pos,a.Vec3Offset(0,0,a.Height/2)); + Vector3 dir; + if ( flags&DE_CENTERHEIGHT ) dir = level.Vec3Diff(Source.Vec3Offset(0,0,Source.Height/2),a.Vec3Offset(0,0,a.Height/2)); + else dir = level.Vec3Diff(Source.pos,a.Vec3Offset(0,0,a.Height/2)); double dist = dir.length(); // intersecting, randomize direction if ( dir.length() <= double.epsilon ) @@ -1325,7 +1328,9 @@ Class SWWMUtility if ( !SWWMUtility.SphereIntersect(a,Source.pos,ExplosionRadius) ) continue; // calculate factor - Vector3 dir = level.Vec3Diff(Source.pos,a.Vec3Offset(0,0,a.Height/2)); + Vector3 dir; + if ( flags&DE_CENTERHEIGHT ) dir = level.Vec3Diff(Source.Vec3Offset(0,0,Source.Height/2),a.Vec3Offset(0,0,a.Height/2)); + else dir = level.Vec3Diff(Source.pos,a.Vec3Offset(0,0,a.Height/2)); double dist = dir.length(); // intersecting, randomize direction if ( dir.length() <= double.epsilon )