From f60309983a49a62002395c60614b476665e0b9f9 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 5 Mar 2024 03:11:05 -0800 Subject: [PATCH] Add debugprisoncd cheat (DEVELOP only) - Always drops a CD from Prison Eggs --- src/cvars.cpp | 4 ++++ src/m_cond.c | 26 ++++++++++++++++++++++++++ src/p_inter.c | 10 +++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/cvars.cpp b/src/cvars.cpp index 4a2fa9948..b9199f8bd 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -873,6 +873,10 @@ consvar_t cv_1pswap = PlayerCheat("1pswap", "1").min_max(1, MAXSPLITSCREENPLAYER consvar_t cv_debugfinishline = PlayerCheat("debugfinishline", "Off").on_off().description("Highlight finish lines, respawn lines, death pits and instakill planes with high contrast colors"); consvar_t cv_debughudtracker = PlayerCheat("debughudtracker", "Off").on_off().description("Highlight overlapping HUD tracker blocks"); +#ifdef DEVELOP + consvar_t cv_debugprisoncd = PlayerCheat("debugprisoncd", "Off").on_off().description("Always drop a CD from breaking Prisons"); +#endif + consvar_t cv_debugrank = PlayerCheat("debugrank", "Off").description("Show GP rank state on the HUD; optionally force a rank grade").values({ {0, "Off"}, {1, "On"}, diff --git a/src/m_cond.c b/src/m_cond.c index af30e415b..079da8238 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -1019,6 +1019,32 @@ cacheprisoneggpickup: } //CONS_Printf("thisprisoneggpickup = %u (MAXCONDITIONSETS is %u)\n", gamedata->thisprisoneggpickup, MAXCONDITIONSETS); + +#ifdef DEVELOP + extern consvar_t cv_debugprisoncd; + // If all drops are collected, just force the first valid one. + if (cv_debugprisoncd.value && gamedata->thisprisoneggpickup_cached == NULL) + { + for (i = 0; gamedata->thisprisoneggpickup_cached == NULL && + i < gamedata->numprisoneggpickups; i++) + { + c = &conditionSets[gamedata->prisoneggpickups[i]]; + if (c->numconditions) + { + for (j = 0; j < c->numconditions; ++j) + { + cn = &c->condition[j]; + if (cn->type != UC_PRISONEGGCD) + continue; + + gamedata->thisprisoneggpickup = gamedata->prisoneggpickups[i]; + gamedata->thisprisoneggpickup_cached = cn; + break; + } + } + } + } +#endif } static void M_PrecacheLevelLocks(void) diff --git a/src/p_inter.c b/src/p_inter.c index 86a2a2094..270f8529c 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1198,13 +1198,21 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source) secretextratime = TICRATE/2; } - if ( + +#ifdef DEVELOP + extern consvar_t cv_debugprisoncd; +#endif + if (( grandprixinfo.gp == true // Bonus Round && demo.playback == false // Not playback && netgame == false // game design + makes it easier to implement && gamedata->thisprisoneggpickup_cached != NULL && gamedata->prisoneggstothispickup == 0 && gamedata->thisprisoneggpickupgrabbed == false + ) +#ifdef DEVELOP + || (cv_debugprisoncd.value && gamedata->thisprisoneggpickup_cached != NULL) +#endif ) { // Will be 0 for the next level