From c6a9228b2bd94613a787ac5f707bcce3a4d08510 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Thu, 29 Aug 2024 20:22:31 -0700 Subject: [PATCH 1/2] Bot-aware 2.4 mechanics --- src/k_botitem.cpp | 2 +- src/k_kart.c | 6 ++++++ src/k_kart.h | 1 + src/objects/checkpoint.cpp | 3 +-- src/p_spec.c | 3 +-- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/k_botitem.cpp b/src/k_botitem.cpp index 630cfeb17..e3a6cc233 100644 --- a/src/k_botitem.cpp +++ b/src/k_botitem.cpp @@ -1433,7 +1433,7 @@ static void K_BotItemRings(const player_t *player, ticcmd_t *cmd) { ZoneScoped; - INT32 saferingsval = 16 - K_GetKartRingPower(player, false); + INT32 saferingsval = 16 - K_GetKartRingPower(player, false) - (player->amps/2); if (leveltime < starttime) { diff --git a/src/k_kart.c b/src/k_kart.c index 7e67efaca..9139deab6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4140,6 +4140,12 @@ void K_AwardPlayerRings(player_t *player, UINT16 rings, boolean overload) } } +void K_CheckpointCrossAward(player_t *player) +{ + player->exp += K_GetExpAdjustment(player); + K_AwardPlayerRings(player, (player->bot ? 20 : 10), true); +} + boolean K_Overdrive(player_t *player) { if (player->amps == 0) diff --git a/src/k_kart.h b/src/k_kart.h index d9ff1cbf1..bf73ffcf2 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -139,6 +139,7 @@ angle_t K_MomentumAngleReal(const mobj_t *mo); boolean K_PvPAmpReward(UINT32 award, player_t *attacker, player_t *defender); void K_SpawnAmps(player_t *player, UINT8 amps, mobj_t *impact); void K_AwardPlayerAmps(player_t *player, UINT8 amps); +void K_CheckpointCrossAward(player_t *player); void K_AwardPlayerRings(player_t *player, UINT16 rings, boolean overload); boolean K_Overdrive(player_t *player); boolean K_DefensiveOverdrive(player_t *player); diff --git a/src/objects/checkpoint.cpp b/src/objects/checkpoint.cpp index 10e5f3c6a..c534b5bde 100644 --- a/src/objects/checkpoint.cpp +++ b/src/objects/checkpoint.cpp @@ -684,8 +684,7 @@ void __attribute__((optimize("O0"))) Obj_CrossCheckpoints(player_t* player, fixe } } - player->exp += K_GetExpAdjustment(player); - K_AwardPlayerRings(player, 10, true); + K_CheckpointCrossAward(player); player->gradingpointnum++; K_UpdatePowerLevels(player, player->laps, false); diff --git a/src/p_spec.c b/src/p_spec.c index 49a792e42..220954e82 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2118,8 +2118,7 @@ static void K_HandleLapIncrement(player_t *player) } } - player->exp += K_GetExpAdjustment(player); - K_AwardPlayerRings(player, 10, true); + K_CheckpointCrossAward(player); player->gradingpointnum++; if (player->position == 1 && !(gametyperules & GTR_CHECKPOINTS)) From 19d648f1bb43e6334710e8c934fe708551de46e9 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Thu, 29 Aug 2024 20:32:10 -0700 Subject: [PATCH 2/2] Bots: 1st place holds OD --- src/k_botitem.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/k_botitem.cpp b/src/k_botitem.cpp index e3a6cc233..227e55be7 100644 --- a/src/k_botitem.cpp +++ b/src/k_botitem.cpp @@ -1433,7 +1433,11 @@ static void K_BotItemRings(const player_t *player, ticcmd_t *cmd) { ZoneScoped; - INT32 saferingsval = 16 - K_GetKartRingPower(player, false) - (player->amps/2); + INT32 overdrivepreference = player->amps/3; + if (player->position <= 1) + overdrivepreference = 0; + + INT32 saferingsval = 16 - K_GetKartRingPower(player, false) - overdrivepreference; if (leveltime < starttime) {