diff --git a/language.version b/language.version index 0337bc2e4..50ca70882 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \cwGZ\c- r399 (Wed 24 Jun 14:55:40 CEST 2020)"; +SWWM_MODVER="\chSWWM \cwGZ\c- r400 (Wed 24 Jun 15:51:02 CEST 2020)"; diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index e8d8adc19..2fc1c8e6e 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -3065,6 +3065,12 @@ Class SWWMHandler : EventHandler } } + override void CheckReplacee( ReplacedEvent e ) + { + if ( e.Replacement is 'DSparilHax' ) + e.Replacee = 'Sorcerer2'; + } + override void CheckReplacement( ReplaceEvent e ) { // shell types (sorted by rarity diff --git a/zscript/swwm_deathlydeathcannon.zsc b/zscript/swwm_deathlydeathcannon.zsc index 83806d14a..0aa008041 100644 --- a/zscript/swwm_deathlydeathcannon.zsc +++ b/zscript/swwm_deathlydeathcannon.zsc @@ -53,9 +53,20 @@ Class PlayerGone : PlayerChunk } } +Class DSparilHax : Sorcerer2 +{ + override void PostBeginPlay() + { + Thing_Destroy(0); + A_BossDeath(); + Destroy(); + } +} + Class IDontFeelSoGood : Thinker { Actor goner; + int cnt; static void DeletThis( Actor whomst ) { @@ -75,7 +86,20 @@ Class IDontFeelSoGood : Thinker Destroy(); return; } - if ( (goner.Health > 0) || (goner.tics != -1) ) return; + if ( goner.Health > 0 ) return; + // special handling for some bosses: + // - D'Sparil does not spawn, he's already gone + // - Korax doesn't leave ghosts + if ( (goner.tics != -1) && !(goner is 'Sorcerer1') && !(goner is 'Korax') ) return; + cnt++; + if ( cnt < 15 ) return; + if ( goner is 'Sorcerer1' ) + { + let h = Actor.Spawn("DSparilHax",goner.pos); + h.CopyFriendliness(goner,true); + } + else if ( goner is 'Korax' ) + level.ExecuteSpecial(80,goner,null,0,255); goner.Destroy(); } }