diff --git a/language.version b/language.version index 4c42d950a..dfb49db98 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r742 \cu(Sat 9 Jan 22:40:42 CET 2021)"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r744 \cu(Tue 12 Jan 09:57:56 CET 2021)"; diff --git a/models/Demolitionist.blend b/models/Demolitionist.blend index f1425bb47..63d80e4ee 100644 Binary files a/models/Demolitionist.blend and b/models/Demolitionist.blend differ diff --git a/models/DemolitionistPlayer.blend b/models/DemolitionistPlayer.blend index d1d988e89..20f58588d 100644 Binary files a/models/DemolitionistPlayer.blend and b/models/DemolitionistPlayer.blend differ diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 651112408..8115f739a 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -586,6 +586,7 @@ Class Demolitionist : PlayerPawn oldlagpitch = lagpitch; lagangle = lagangle*.8+angle*.2; lagpitch = lagpitch*.8+pitch*.2; + if ( !player || (player.mo != self) ) return; if ( (player.playerstate != PST_DEAD) && (player.jumptics != 0) ) { // faster falloff @@ -605,14 +606,20 @@ Class Demolitionist : PlayerPawn PoisonDurationReceived = 0; PoisonPeriodReceived = 0; PoisonDamageReceived = 0; - if ( !player ) return; + if ( !selflight ) + { + selflight = Spawn("DemolitionistSelfLight",pos); + selflight.target = self; + selflight.Tick(); + } + if ( !player || (player.mo != self) ) return; // double-check that we have these if ( !FindInventory("AlmasteelPlating") ) { let ap = Inventory(Spawn("AlmasteelPlating")); ap.AttachToOwner(self); // AddInventory attaches to the front, but we need to be all the way back in the chain (but before the collar) - if ( ap.inv ) + if ( (inv == ap) && ap.inv ) { inv = ap.inv; for ( Inventory i=inv; i; i=i.inv ) @@ -635,7 +642,7 @@ Class Demolitionist : PlayerPawn let sc = Inventory(Spawn("SayaCollar")); sc.AttachToOwner(self); // AddInventory attaches to the front, but we need to be all the way back in the chain - if ( sc.inv ) + if ( (inv == sc) && sc.inv ) { inv = sc.inv; for ( Inventory i=inv; i; i=i.inv ) @@ -647,12 +654,6 @@ Class Demolitionist : PlayerPawn } } } - if ( !selflight ) - { - selflight = Spawn("DemolitionistSelfLight",pos); - selflight.target = self; - selflight.Tick(); - } // strife thing if ( mystats.oldlogtext == "" ) mystats.oldlogtext = player.logtext; @@ -1158,7 +1159,7 @@ Class Demolitionist : PlayerPawn int oldpchance = PainChance; if ( damage < 5 ) PainChance = 0; lastdamage = Super.DamageMobj(inflictor,source,damage,mod,flags,angle); - // hotfix damagecount overflow until it's handled engine-side (yes this shit happens) + // hotfix damagecount overflow until proper fix is in stable gzdoom if ( player && (player.damagecount < 0) ) player.damagecount = 100; lastdamagetic = max(lastdamagetic,gametic+clamp(lastdamage/2,10,40)); if ( (lastdamage > 0) && (PainChance == 0) && (level.maptime>lastmpain) ) @@ -2882,6 +2883,8 @@ Class DemolitionistSelfLight : Actor return false; if ( target.InStateSequence(target.CurState,target.FindState("CrouchDeath")) && ((target.frame == 7) || (target.frame == 10) || (target.frame == 11)) ) return false; + if ( target.InStateSequence(target.CurState,target.FindState("VoodooDeath")) && ((target.frame == 9) || (target.frame == 11) || (target.frame == 12) || (target.frame == 14) || (target.frame == 16) || (target.frame == 18)) ) + return false; return true; } override void Tick()