No lives in Relaxed

This commit is contained in:
Antonio Martinez 2025-07-15 16:40:27 -04:00
parent 23b4b83c7c
commit 78fb3c0cdd
5 changed files with 71 additions and 38 deletions

View file

@ -3257,7 +3257,7 @@ void G_BeginLevelExit(void)
g_exit.losing = true;
g_exit.retry = false;
if (!G_GametypeAllowsRetrying() || skipstats != 0)
if (!G_GametypeAllowsRetrying() || skipstats != 0 || (grandprixinfo.gp && grandprixinfo.gamespeed == KARTSPEED_EASY))
{
g_exit.losing = false; // never force a retry
}
@ -3618,7 +3618,7 @@ boolean G_GametypeUsesLives(void)
if (modeattacking) // NOT in Record Attack
return false;
if (grandprixinfo.gp == true) // In Grand Prix
if (grandprixinfo.gp == true && grandprixinfo.gamespeed != KARTSPEED_EASY) // In Grand Prix
return true;
return false;
@ -4738,7 +4738,7 @@ static void G_DoCompleted(void)
}
}
if (grandprixinfo.gp == true && grandprixinfo.wonround == true && player->exiting && !retrying)
if (grandprixinfo.gp == true && grandprixinfo.wonround == true && player->exiting && (!retrying || grandprixinfo.gamespeed == KARTSPEED_EASY))
{
if (player->bot == true)
{

View file

@ -389,8 +389,9 @@ void K_UpdateGrandPrixBots(void)
if (players[i].botvars.diffincrease)
{
// CONS_Printf("in %d inc %d", players[i].botvars.difficulty, players[i].botvars.diffincrease);
if (players[i].botvars.diffincrease < 0)
players[i].botvars.difficulty = std::max(1, players[i].botvars.difficulty - players[i].botvars.diffincrease);
players[i].botvars.difficulty = std::max(1, players[i].botvars.difficulty + players[i].botvars.diffincrease);
else
players[i].botvars.difficulty += players[i].botvars.diffincrease;
@ -400,6 +401,7 @@ void K_UpdateGrandPrixBots(void)
}
players[i].botvars.diffincrease = 0;
// CONS_Printf("out %d\n", players[i].botvars.difficulty);
}
if (players[i].botvars.rival)
@ -630,13 +632,37 @@ void K_IncreaseBotDifficulty(player_t *bot)
rankNudge = 0;
break;
case GRADE_A:
if (grandprixinfo.gp && grandprixinfo.gamespeed == KARTSPEED_EASY)
rankNudge = 0;
else
rankNudge = 1;
rankNudge = 1;
break;
}
// RELAXED MODE:
// Continues don't drop bot difficulty, because we always advance.
// Bots will still level up from standard advancement; we need a
// much steeper rank nudge to keep difficulty at the right level.
if (grandprixinfo.gamespeed == KARTSPEED_EASY)
{
switch(averageRank)
{
case GRADE_E:
rankNudge = -4;
break;
case GRADE_D:
rankNudge = -3;
break;
case GRADE_C:
rankNudge = -2;
break;
case GRADE_B:
rankNudge = -1;
break;
case GRADE_A:
rankNudge = 0;
break;
}
}
increase += rankNudge;
if (increase <= 0)

View file

@ -646,6 +646,9 @@ fixed_t K_CalculateGPPercent(gpRank_t *rankData)
rankData->scoreRings +
rankData->scoreContinues;
if (rankData->scoreTotal < 0)
rankData->scoreTotal = 0;
const fixed_t percent = FixedDiv(rankData->scoreTotal, total);
return percent;

View file

@ -618,7 +618,8 @@ boolean level_tally_t::IncrementLine(void)
value = &displayStat[i];
lives_check = (
stats[i] == TALLY_STAT_TOTALRINGS // Rings also shows the Lives.
grandprixinfo.gamespeed != KARTSPEED_EASY
&& stats[i] == TALLY_STAT_TOTALRINGS // Rings also shows the Lives.
&& livesAdded < owner->xtralife // Don't check if we've maxxed out!
);
@ -1294,41 +1295,44 @@ void level_tally_t::Draw(void)
case TALLY_STAT_TOTALRINGS:
{
drawer_text
.x(184.0 * frac)
.x((G_GametypeUsesLives() ? 184.0 : 200.0) * frac)
.align(srb2::Draw::Align::kCenter)
.text(va("%d", displayStat[i]));
srb2::Draw lives_drawer = drawer_text
.xy(221.0 * frac, -1.0 * frac);
const skincolornum_t color = static_cast<skincolornum_t>(owner->skincolor);
lives_drawer
.x(r_splitscreen ? -7.0 : -2.0)
.colormap(owner->skin, color)
.patch(faceprefix[owner->skin][r_splitscreen ? FACE_MINIMAP : FACE_RANK]);
UINT8 lives_num = std::min(owner->lives + livesAdded, 10);
if (xtraBlink > 0 && (xtraBlink & 1) == 0 && livesAdded > 0)
if (G_GametypeUsesLives())
{
lives_num = 0;
}
srb2::Draw lives_drawer = drawer_text
.xy(221.0 * frac, -1.0 * frac);
if (lives_num > 0)
{
if (r_splitscreen)
const skincolornum_t color = static_cast<skincolornum_t>(owner->skincolor);
lives_drawer
.x(r_splitscreen ? -7.0 : -2.0)
.colormap(owner->skin, color)
.patch(faceprefix[owner->skin][r_splitscreen ? FACE_MINIMAP : FACE_RANK]);
UINT8 lives_num = std::min(owner->lives + livesAdded, 10);
if (xtraBlink > 0 && (xtraBlink & 1) == 0 && livesAdded > 0)
{
lives_drawer = lives_drawer
.xy(6.0, 2.0)
.align(srb2::Draw::Align::kLeft);
}
else
{
lives_drawer = lives_drawer
.xy(17.0, 1.0)
.font(srb2::Draw::Font::kThinTimer);
lives_num = 0;
}
lives_drawer.text("{}", lives_num);
if (lives_num > 0)
{
if (r_splitscreen)
{
lives_drawer = lives_drawer
.xy(6.0, 2.0)
.align(srb2::Draw::Align::kLeft);
}
else
{
lives_drawer = lives_drawer
.xy(17.0, 1.0)
.font(srb2::Draw::Font::kThinTimer);
}
lives_drawer.text("{}", lives_num);
}
}
break;

View file

@ -188,10 +188,10 @@ void Dummygpdifficulty_OnChange(void)
switch (cv_dummygpdifficulty.value)
{
case KARTSPEED_EASY:
tooltip = "Low-stakes racing at \x83Gear 1""\x80"". Take a drive and \x83""enjoy the sights!";
tooltip = "Low-stakes racing at \x83Gear 1""\x80"". \x83No placement requirements\x80.";
break;
case KARTSPEED_NORMAL:
tooltip = "Aim for the prize at\x82 Gear 2\x80. Can you \x82surpass your limits?";
tooltip = "Aim for the prize at\x82 Gear 2\x80. Place \x82""4th or better\x80 to advance!";
break;
case KARTSPEED_HARD:
tooltip = "Challenge fierce competition at\x87 Gear 3\x80. For\x87 thrill-seekers!";