From ba27c87ff0cf278ef59ca42f9102b6b34d00fd78 Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 11 Jan 2023 21:46:21 -0800 Subject: [PATCH] Add capsuletest cvar - capsuletest off - default behavior. - capsuletest multiplayer - always spawn non time attack capsules, even in FREE PLAY. - capsuletest timeattack - always spawn time attack capsules, even in multiplayer. --- src/d_netcmd.c | 14 ++++++++++++++ src/d_netcmd.h | 7 +++++++ src/k_kart.c | 16 ++++++++++++++++ src/k_kart.h | 1 + src/p_inter.c | 2 +- src/p_mobj.c | 2 +- 6 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 1ebda16d5..56f827c46 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -448,6 +448,20 @@ consvar_t cv_kartdebugdirector = CVAR_INIT ("debugdirector", "Off", CV_CHEAT, CV consvar_t cv_spbtest = CVAR_INIT ("spbtest", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); consvar_t cv_gptest = CVAR_INIT ("gptest", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); +static CV_PossibleValue_t capsuletest_cons_t[] = { + {CV_CAPSULETEST_OFF, "Off"}, + {CV_CAPSULETEST_MULTIPLAYER, "Multiplayer"}, + {CV_CAPSULETEST_TIMEATTACK, "TimeAttack"}, + {0, NULL}}; + +static void CapsuleTest_OnChange(void) +{ + if (gamestate == GS_LEVEL) + CONS_Printf("Level must be restarted for capsuletest to have effect.\n"); +} + +consvar_t cv_capsuletest = CVAR_INIT ("capsuletest", "Off", CV_CHEAT|CV_NETVAR|CV_CALL, capsuletest_cons_t, CapsuleTest_OnChange); + consvar_t cv_reducevfx = CVAR_INIT ("reducevfx", "No", CV_SAVE, CV_YesNo, NULL); static CV_PossibleValue_t votetime_cons_t[] = {{10, "MIN"}, {3600, "MAX"}, {0, NULL}}; diff --git a/src/d_netcmd.h b/src/d_netcmd.h index f0fbf59d8..9bc858ac7 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -96,6 +96,13 @@ extern consvar_t cv_kartdebugnodes, cv_kartdebugcolorize, cv_kartdebugdirector; extern consvar_t cv_spbtest, cv_gptest, cv_reducevfx; extern consvar_t cv_kartdebugwaypoints, cv_kartdebugbotpredict; +typedef enum { + CV_CAPSULETEST_OFF, + CV_CAPSULETEST_MULTIPLAYER, + CV_CAPSULETEST_TIMEATTACK, +} capsuletest_val_t; +extern consvar_t cv_capsuletest; + extern consvar_t cv_alttitle, cv_itemfinder; extern consvar_t cv_inttime, cv_advancemap; diff --git a/src/k_kart.c b/src/k_kart.c index 6debceecf..b6e525df4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -361,6 +361,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartdebugdirector); CV_RegisterVar(&cv_spbtest); CV_RegisterVar(&cv_gptest); + CV_RegisterVar(&cv_capsuletest); CV_RegisterVar(&cv_reducevfx); } @@ -591,6 +592,21 @@ boolean K_TimeAttackRules(void) return (playing <= 1); } +boolean K_CapsuleTimeAttackRules(void) +{ + switch (cv_capsuletest.value) + { + case CV_CAPSULETEST_MULTIPLAYER: + return false; + + case CV_CAPSULETEST_TIMEATTACK: + return true; + + default: + return K_TimeAttackRules(); + } +} + //} //{ SRB2kart p_user.c Stuff diff --git a/src/k_kart.h b/src/k_kart.h index 76043919b..209301301 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -62,6 +62,7 @@ void K_SetItemCooldown(SINT8 itemResult, tic_t time); void K_RunItemCooldowns(void); boolean K_TimeAttackRules(void); +boolean K_CapsuleTimeAttackRules(void); fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against); boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2); diff --git a/src/p_inter.c b/src/p_inter.c index 399d74918..4d131fbfb 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1411,7 +1411,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget INT16 spacing = (target->radius >> 1) / target->scale; // set respawn fuse - if (K_TimeAttackRules() == true) // no respawns + if (K_CapsuleTimeAttackRules() == true) // no respawns ; else if (target->threshold == KITEM_SUPERRING) target->fuse = 20*TICRATE; diff --git a/src/p_mobj.c b/src/p_mobj.c index b5bb16c45..ecb4ee60e 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -12134,7 +12134,7 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i) // in record attack, only spawn ring capsules // (behavior can be inverted with the Extra flag, i.e. item capsule spawns and ring capsule does not) - if (K_TimeAttackRules() == true + if (K_CapsuleTimeAttackRules() == true && (!(mthing->args[2] & TMICF_INVERTTIMEATTACK) == !isRingCapsule)) return false; }