From 6837df09b2f2e64b0ea57a422d5d62db2135c4db Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Sun, 3 Jul 2022 23:46:31 +0200 Subject: [PATCH] Fix broken player damage vfx handling. --- language.version | 4 ++-- zscript/handler/swwm_handler_shaders.zsc | 8 ++++---- zscript/swwm_player.zsc | 17 +++++++++++------ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/language.version b/language.version index 461385fa0..3235de2ff 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r151 \cu(Sun 3 Jul 23:46:16 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r151 \cu(2022-07-03 23:46:17)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r152 \cu(Sun 3 Jul 23:46:31 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r152 \cu(2022-07-03 23:46:31)\c-"; diff --git a/zscript/handler/swwm_handler_shaders.zsc b/zscript/handler/swwm_handler_shaders.zsc index bad30a932..f937930fb 100644 --- a/zscript/handler/swwm_handler_shaders.zsc +++ b/zscript/handler/swwm_handler_shaders.zsc @@ -110,8 +110,8 @@ extend Class SWWMHandler } else PPShader.SetEnabled("SlimeWarp",false); int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80); - int lastdmgtic = (demo.Health>0)?demo.lastdamagetic:(gametic+Random[Flicker](30,20)); - double noiz = min(lastdmg*.09*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.5); + int lastdmgtimer = (demo.Health>0)?demo.lastdamagetimer:(gametic+Random[Flicker](30,20)); + double noiz = min(lastdmg*.09*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),.5); PPShader.SetEnabled("Glitch",noiz>0); PPShader.SetEnabled("Grain",noiz>0); if ( noiz > 0 ) @@ -119,9 +119,9 @@ extend Class SWWMHandler PPShader.SetUniform1f("Glitch","Timer",(gametic+e.FracTic)/GameTicRate); PPShader.SetUniform1f("Grain","Timer",(gametic+e.FracTic)/GameTicRate); PPShader.SetUniform1f("Grain","ni",noiz); - noiz = min(lastdmg*.08*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.8); + noiz = min(lastdmg*.08*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),.8); PPShader.SetUniform1f("Glitch","str1",noiz); - noiz = min(lastdmg*.03*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),3.5); + noiz = min(lastdmg*.03*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),3.5); PPShader.SetUniform1f("Glitch","str2",noiz); } if ( !demo.InStateSequence(demo.CurState,demo.FindState("Dash")) ) diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index df3ed1307..e49405cd2 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -13,8 +13,8 @@ Class Demolitionist : PlayerPawn bool bInDefaultInventory; bool oldsinglefirst; - int lastdamage; - transient int lastdamagetic; + transient int lastdamage; + transient int lastdamagetic, lastdamagetimer; bool lastground; int lastgroundtic, lastairtic; double lastvelz, prevvelz, landvelz; @@ -1724,8 +1724,14 @@ Class Demolitionist : PlayerPawn int realdmg = Super.DamageMobj(inflictor,source,damage,mod,flags,angle); // hotfix damagecount overflow until proper fix is in stable gzdoom if ( player && (player.damagecount < 0) ) player.damagecount = 100; - lastdamage = max(lastdamage,realdmg); - lastdamagetic = max(lastdamagetic,gametic+clamp(lastdamage/2,10,40)); + if ( lastdamagetic != gametic ) + { + lastdamage = 0; + lastdamagetimer = 0; + } + lastdamage += realdmg; + lastdamagetic = gametic; + lastdamagetimer = max(lastdamagetimer,lastdamagetic+clamp(lastdamage/2,10,40)); if ( (lastdamage > 0) && (PainChance == 0) && (level.maptime>lastmpain) ) { lastmpain = level.maptime; @@ -2683,7 +2689,7 @@ Class Demolitionist : PlayerPawn A_StartSound("demolitionist/jetstop",CHAN_JETPACK); if ( !myvoice ) myvoice = CVar.GetCVar('swwm_voicetype',player); int loudlv = swwm_voiceamp; - if ( lastdamage > 90 ) + if ( lastdamage > 70 ) { if ( swwm_extraalert ) A_AlertMonsters(swwm_uncapalert?0:1200); A_QuakeEx(3,3,3,9,0,8,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D); @@ -2725,7 +2731,6 @@ Class Demolitionist : PlayerPawn if ( loudlv > 3 ) A_StartSound(String.Format("voice/%s/lopain",myvoice.GetString()),CHAN_DEMOVOICEAUX3,CHANF_OVERLAP); } } - lastdamage = 0; } void A_DemoScream() {