diff --git a/language.version b/language.version index 972808c9e..7f5cfaceb 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\cxSWWM GZ\c- r358 (Thu 18 Jun 21:16:25 CEST 2020)"; +SWWM_MODVER="\cxSWWM GZ\c- r359 (Fri 19 Jun 13:29:36 CEST 2020)"; diff --git a/zmapinfo.txt b/zmapinfo.txt index 75542455d..f60cd602d 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -1,6 +1,6 @@ GameInfo { - AddEventHandlers = "SWWMCrashHandler", "SWWMBrutalHandler", "SWWMHDoomHandler", "SWWMVanillaBossHandler", "SWWMHandler", "SWWMGoreHandler", "CBTHandler", "SWWMPreloader" + AddEventHandlers = "SWWMCrashHandler", "SWWMBrutalHandler", "SWWMHDoomHandler", "SWWMVanillaBossHandler", "SWWMHandler", "SWWMGoreHandler", "CBTHandler", "SWWMPreloader", "SWWMExcuseMeWhatTheFuckHandler" PlayerClasses = "Demolitionist" StatusBarClass = "SWWMStatusBar" BackpackType = "HammerspaceEmbiggener" diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index a5af6dd1f..06427cc76 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -445,6 +445,41 @@ Class SWWMLore bool read; } +// so apparently on restart after dying, static thinkers don't get reloaded until AFTER the player has spawned +// and the player calls GiveDefaultInventory even though it's all later discarded and they're given the saved inventory +// all I can ask is: WHY +Class SWWMExcuseMeWhatTheFuckHandler : StaticEventHandler +{ + bool reborn_hackfix; + int clear_hackfix; + + override void WorldTick() + { + if ( gamestate != GS_LEVEL ) return; + if ( clear_hackfix > 0 ) + { + clear_hackfix--; + if ( clear_hackfix <= 0 ) + reborn_hackfix = false; + } + } + + static bool WhyTheFuckIsThisAThing() + { + let hnd = SWWMExcuseMeWhatTheFuckHandler(StaticEventHandler.Find("SWWMExcuseMeWhatTheFuckHandler")); + if ( !hnd ) return false; + return hnd.reborn_hackfix; + } + + static void ThisIsSomeSeriousBullshit() + { + let hnd = SWWMExcuseMeWhatTheFuckHandler(StaticEventHandler.Find("SWWMExcuseMeWhatTheFuckHandler")); + if ( !hnd ) return; + hnd.reborn_hackfix = true; + hnd.clear_hackfix = 2; + } +} + Class SWWMLoreLibrary : Thinker { PlayerInfo myplayer; @@ -584,6 +619,8 @@ Class SWWMLoreLibrary : Thinker static void Add( PlayerInfo p, String ref ) { + // ignore this call on player rebirth, otherwise a new thinker will be created when the player calls GiveDefaultInventory + if ( SWWMExcuseMeWhatTheFuckHandler.WhyTheFuckIsThisAThing() ) return; SWWMLoreLibrary ll = Find(p); if ( !ll ) { diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index e9419b12c..f40ac86d8 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -1021,6 +1021,8 @@ Class Demolitionist : PlayerPawn } else if ( (player.cmd.buttons&BT_USE) && (deadtimer > 120) ) { + // gross hackfix for library "vanishing" + SWWMExcuseMeWhatTheFuckHandler.ThisIsSomeSeriousBullshit(); // reload save player.cls = null; player.playerstate = PST_ENTER;