From 60457f779eea9162e54fcff65e54af15ea23183e Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sun, 17 Apr 2022 13:27:37 +0200 Subject: [PATCH] Asserts for some hard-to-detect bugs. --- language.version | 4 ++-- zscript/menu/swwm_inter.zsc | 2 +- zscript/swwm_player.zsc | 3 +++ zscript/swwm_statichandler.zsc | 15 ++++++++++++++- zscript/swwm_thinkers.zsc | 2 +- zscript/swwm_thinkers_player.zsc | 17 ++++++++++++----- 6 files changed, 33 insertions(+), 10 deletions(-) diff --git a/language.version b/language.version index a83f7a83f..117ad3390 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r34 \cu(Sun 17 Apr 02:23:29 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r34 \cu(2022-04-17 02:23:29)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r35 \cu(Sun 17 Apr 13:27:37 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r35 \cu(2022-04-17 13:27:37)\c-"; diff --git a/zscript/menu/swwm_inter.zsc b/zscript/menu/swwm_inter.zsc index b6d3bbafd..4f852ff56 100644 --- a/zscript/menu/swwm_inter.zsc +++ b/zscript/menu/swwm_inter.zsc @@ -1,5 +1,5 @@ // Custom intermission screens -Class SWWMStatScreenData : Thinker +Class SWWMStatScreenData : SWWMStaticThinker { // to prevent repetition Array lasttip, lastart; diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 32fbd377f..aec1a5144 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -407,6 +407,9 @@ Class Demolitionist : PlayerPawn } oldsinglefirst = swwm_singlefirst; // super already sets up the slots, so save the cvar value now mystats = SWWMStats.Find(player); + // sanity checks + if ( !EventHandler.Find("SWWMHandler") || !StaticEventHandler.Find("SWWMStaticHandler") ) + ThrowAbortException("Panic! SWWM event handlers not detected!"); } void A_Dash() { diff --git a/zscript/swwm_statichandler.zsc b/zscript/swwm_statichandler.zsc index cb2fa68fd..11f7fcc0b 100644 --- a/zscript/swwm_statichandler.zsc +++ b/zscript/swwm_statichandler.zsc @@ -1,7 +1,7 @@ // Static handler responsible for some special stuff // save version holder -Class SWWMSaveVerData : Thinker +Class SWWMSaveVerData : SWWMStaticThinker { String ver; } @@ -22,6 +22,8 @@ Class SWWMStaticHandler : StaticEventHandler bool titlefirst; // warnings bool mpwarned; + // checks + ThinkerIterator sti; override void NewGame() { @@ -47,6 +49,17 @@ Class SWWMStaticHandler : StaticEventHandler Console.Printf("\cgWARNING:\c- Multiplayer is no longer officially supported, desyncs and other issues may potentially happen. You are on your own."); S_StartSound("compat/warn",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); } + // sanity check + Array stinkers; + if ( !sti ) sti = ThinkerIterator.Create("SWWMStaticThinker"); + else sti.Reinit(); + Thinker t; + while ( t = sti.Next() ) stinkers.Push(t); + if ( stinkers.Size() > 0 ) + { + for ( int i=0; i ent; diff --git a/zscript/swwm_thinkers_player.zsc b/zscript/swwm_thinkers_player.zsc index a61876155..ce99ce174 100644 --- a/zscript/swwm_thinkers_player.zsc +++ b/zscript/swwm_thinkers_player.zsc @@ -1,8 +1,15 @@ // player-specific thinkers +Class SWWMStaticThinker : Thinker abstract +{ + // shell class to iterate easier on sanity checks + // all subclasses should be guaranteed to have a statnum of STAT_STATIC + // if they don't, something is very wrong +} + // "Full History" contains all messages since session start, nothing is flushed // this can be accessed from a section of the knowledge base -Class SWWMFullHistory : Thinker +Class SWWMFullHistory : SWWMStaticThinker { String lastmap; Array msg; @@ -40,7 +47,7 @@ Class SWWMFullHistory : Thinker } // Dedicated mission log (for custom maps) -Class SWWMMissionLog : Thinker +Class SWWMMissionLog : SWWMStaticThinker { Array entries; bool clockset; @@ -107,7 +114,7 @@ Class LevelStat int time, par, suck; } -Class SWWMStats : Thinker +Class SWWMStats : SWWMStaticThinker { PlayerInfo myplayer; int lastspawn, dashcount, boostcount, stompcount, airtime, kills, @@ -290,7 +297,7 @@ Class SWWMStats : Thinker } // Scoring -Class SWWMCredits : Thinker +Class SWWMCredits : SWWMStaticThinker { PlayerInfo myplayer; int credits; @@ -368,7 +375,7 @@ Class SWWMLore bool read; } -Class SWWMLoreLibrary : Thinker +Class SWWMLoreLibrary : SWWMStaticThinker { PlayerInfo myplayer; Array ent;