From 3d39ab52251893e4c2b3a9db10624d256e24c9fd Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 24 May 2025 21:19:33 -0400 Subject: [PATCH] more Duel --- src/cvars.cpp | 2 ++ src/d_netcmd.h | 1 + src/k_bot.cpp | 5 +++++ src/k_hud.cpp | 7 ++++--- src/k_kart.c | 3 +-- src/k_kart.h | 4 ++-- src/menus/options-gameplay-1.c | 11 +++++++++++ 7 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/cvars.cpp b/src/cvars.cpp index 2ea673fdc..0dccdcdb6 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -783,6 +783,8 @@ consvar_t cv_timelimit = UnsavedNetVar("timelimit", "Default").min_max(1, 30*60, consvar_t cv_votetime = UnsavedNetVar("votetime", "20").min_max(10, 3600); +consvar_t cv_dueltimelimit = UnsavedNetVar("dueltimelimit", "180").min_max(0, 3600); +consvar_t cv_duelscorelimit = UnsavedNetVar("duelscorelimit", "3").min_max(1, 9); // // Online cheats - synced in netgames. diff --git a/src/d_netcmd.h b/src/d_netcmd.h index bff6fe264..50b5339d7 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -52,6 +52,7 @@ extern consvar_t cv_joyscale[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_pointlimit; extern consvar_t cv_timelimit; +extern consvar_t cv_dueltimelimit, cv_duelscorelimit; extern consvar_t cv_numlaps; extern UINT32 timelimitintics, extratimeintics, secretextratime; extern UINT32 g_pointlimit; diff --git a/src/k_bot.cpp b/src/k_bot.cpp index 041a0be38..d1874eae1 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -2067,6 +2067,11 @@ void K_UpdateBotGameplayVars(player_t *player) if (cv_levelskull.value) player->botvars.difficulty = MAXBOTDIFFICULTY; + if (K_InRaceDuel()) + player->botvars.rival = true; + else if (grandprixinfo.gp != true) + player->botvars.rival = false; + player->botvars.rubberband = K_UpdateRubberband(player); player->botvars.turnconfirm += player->cmd.bot.turnconfirm; diff --git a/src/k_hud.cpp b/src/k_hud.cpp index c2aa68999..e9821e8f6 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -3310,10 +3310,11 @@ static void K_drawKartDuelScores(void) if (leveltime != duel_lastleveltime) { + INT32 slide = std::max(1, abs(targetyouheight - youheight)/3); if (targetyouheight > youheight) - youheight++; + youheight += slide; else if (targetyouheight < youheight) - youheight--; + youheight -= slide; } duel_lastleveltime = leveltime; @@ -5028,7 +5029,7 @@ playertagtype_t K_WhichPlayerTag(player_t *p) } else if (p->bot) { - if (p->botvars.rival == true || cv_levelskull.value) + if ((p->botvars.rival == true || cv_levelskull.value) && (!K_InRaceDuel())) { return PLAYERTAG_RIVAL; } diff --git a/src/k_kart.c b/src/k_kart.c index afde50887..9177d36c4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4284,7 +4284,7 @@ void K_CheckpointCrossAward(player_t *player) { player->duelscore += 1; - if (leveltime > DUELOVERTIME) + if (leveltime > (tic_t)(TICRATE*DUELOVERTIME)) { overtimecheckpoints++; if (overtimecheckpoints > 1) @@ -4298,7 +4298,6 @@ void K_CheckpointCrossAward(player_t *player) if (player->duelscore - opp->duelscore == DUELWINNINGSCORE) { - player_t *opp = K_DuelOpponent(player); opp->position = 2; player->position = 1; diff --git a/src/k_kart.h b/src/k_kart.h index 1b817eb53..2b9ed82a9 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -80,8 +80,8 @@ Make sure this matches the actual number of states #define RINGVOLUMEREGEN 1 #define RINGTRANSPARENCYREGEN 3 -#define DUELOVERTIME (3*60*TICRATE) -#define DUELWINNINGSCORE (3) +#define DUELOVERTIME (cv_dueltimelimit.value) +#define DUELWINNINGSCORE (cv_duelscorelimit.value) #define MIN_WAVEDASH_CHARGE ((11*TICRATE/16)*9) diff --git a/src/menus/options-gameplay-1.c b/src/menus/options-gameplay-1.c index 11398a6f4..7cf67ee3f 100644 --- a/src/menus/options-gameplay-1.c +++ b/src/menus/options-gameplay-1.c @@ -52,6 +52,17 @@ menuitem_t OPTIONS_Gameplay[] = NULL, {.cvar = &cv_kartbumpers}, 0, 0}, + + {IT_HEADER, "Duel...", NULL, + NULL, {NULL}, 0, 0}, + + {IT_STRING | IT_CVAR, "Duel Time Limit", "How long it takes for Margin Boost to kick in (seconds).", + NULL, {.cvar = &cv_dueltimelimit}, 0, 0}, + + {IT_STRING | IT_CVAR, "Duel Score Limit", "How many points a player must be ahead to win a Duel.", + NULL, {.cvar = &cv_duelscorelimit}, 0, 0}, + + {IT_SPACE | IT_DYBIGSPACE, NULL, NULL, NULL, {NULL}, 0, 0},