From 2fbc8346e5940b02704777d48acfdb8592256666 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 30 Aug 2025 03:40:19 -0400 Subject: [PATCH 1/5] Spindash helper warning --- src/k_hud_track.cpp | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index a1fe5c43a..48d53b6ad 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -415,7 +415,7 @@ std::optional object_tooltip(const mobj_t* mobj) auto conditional = [](bool val, auto&& f) { return val ? std::optional {f()} : std::nullopt; }; - Draw::Font splitfont = (r_splitscreen > 1) ? Draw::Font::kThin : Draw::Font::kMenu; + Draw::Font splitfont = (r_splitscreen > 1) ? Draw::Font::kThin : Draw::Font::kMedium; switch (mobj->type) { @@ -457,7 +457,7 @@ std::optional object_tooltip(const mobj_t* mobj) case MT_GARDENTOP: return conditional( mobj->tracer == stplyr->mo && Obj_GardenTopPlayerNeedsHelp(mobj), - [&] { return TextElement().parse("Try !").font(splitfont); } + [&] { return TextElement().parse("TRY ").font(splitfont); } ); case MT_PLAYER: @@ -482,11 +482,31 @@ std::optional object_tooltip(const mobj_t* mobj) .offset3d(0, 0, 32 * mobj->scale * P_MobjFlip(mobj)); } + if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad == FRACUNIT && !stplyr->spindash + && stplyr->boostpower < FRACUNIT && stplyr->speed < 2*K_GetKartSpeed(stplyr, false, false)/3) + { + if (stplyr->itemamount && + (stplyr->itemtype == KITEM_SNEAKER || stplyr->itemtype == KITEM_INVINCIBILITY || stplyr->itemtype == KITEM_ROCKETSNEAKER + || stplyr->itemtype == KITEM_FLAMESHIELD || stplyr->itemtype == KITEM_GROW) + ) + return Tooltip( + TextElement( + TextElement().parse("BOOST ").font(splitfont)) + ) + .offset3d(0, 0, 64 * mobj->scale * P_MobjFlip(mobj)); + + return Tooltip( + TextElement( + TextElement().parse("HOLD ").font(splitfont)) + ) + .offset3d(0, 0, 64 * mobj->scale * P_MobjFlip(mobj)); + } + return conditional( mobj->player == stplyr && stplyr->icecube.frozen, [&] { return Tooltip(TextElement( - (leveltime/(TICRATE/2)%2) ? - TextElement().parse("").font(splitfont) : + (leveltime/(TICRATE/2)%2) ? + TextElement().parse("").font(splitfont) : TextElement().parse("").font(splitfont) )).offset3d(0, 0, 64 * mobj->scale * P_MobjFlip(mobj)); } // I will be trying to figure out why the return value didn't accept a straightforward call to parse() for the rest of my life (apprx. 15 seconds) @@ -924,7 +944,7 @@ void K_drawTargetHUD(const vector3_t* origin, player_t* player) else { pos.z += itemOffset; - } + } } K_ObjectTracking(&tr.result, &pos, false); From 0e7e76b6613decb06535e6988660fade0491406a Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 30 Aug 2025 15:46:20 -0400 Subject: [PATCH 2/5] Spindash warning offroad check knows about strong offroad --- src/k_hud_track.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index 48d53b6ad..8ff2a70b0 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -482,7 +482,7 @@ std::optional object_tooltip(const mobj_t* mobj) .offset3d(0, 0, 32 * mobj->scale * P_MobjFlip(mobj)); } - if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad == FRACUNIT && !stplyr->spindash + if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad >= FRACUNIT && !stplyr->spindash && stplyr->boostpower < FRACUNIT && stplyr->speed < 2*K_GetKartSpeed(stplyr, false, false)/3) { if (stplyr->itemamount && From 337bb6d7bf5204efaf8dc1545eab33deb48f4b0f Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 30 Aug 2025 16:18:34 -0400 Subject: [PATCH 3/5] No spindash warnings on top --- src/k_hud_track.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index 8ff2a70b0..b1048c328 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -482,7 +482,7 @@ std::optional object_tooltip(const mobj_t* mobj) .offset3d(0, 0, 32 * mobj->scale * P_MobjFlip(mobj)); } - if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad >= FRACUNIT && !stplyr->spindash + if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad >= FRACUNIT && !stplyr->spindash && stplyr->curshield != KSHIELD_TOP && stplyr->boostpower < FRACUNIT && stplyr->speed < 2*K_GetKartSpeed(stplyr, false, false)/3) { if (stplyr->itemamount && From e2601f8574de45c0348a2e71cc7fa57c69dcf353 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 30 Aug 2025 16:28:24 -0400 Subject: [PATCH 4/5] Spindash warning: check rocketsneakertimer as a boost condition --- src/k_hud_track.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index b1048c328..a898ec2a6 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -485,10 +485,10 @@ std::optional object_tooltip(const mobj_t* mobj) if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad >= FRACUNIT && !stplyr->spindash && stplyr->curshield != KSHIELD_TOP && stplyr->boostpower < FRACUNIT && stplyr->speed < 2*K_GetKartSpeed(stplyr, false, false)/3) { - if (stplyr->itemamount && + if ((stplyr->itemamount && (stplyr->itemtype == KITEM_SNEAKER || stplyr->itemtype == KITEM_INVINCIBILITY || stplyr->itemtype == KITEM_ROCKETSNEAKER || stplyr->itemtype == KITEM_FLAMESHIELD || stplyr->itemtype == KITEM_GROW) - ) + ) || stplyr->rocketsneakertimer) return Tooltip( TextElement( TextElement().parse("BOOST ").font(splitfont)) From b966e8b9426dfab90dfc2cf1938887b7edcf2176 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 30 Aug 2025 18:51:01 -0400 Subject: [PATCH 5/5] Spindash warning when hit and out of rings --- src/k_hud_track.cpp | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index a898ec2a6..d056b7313 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -482,18 +482,32 @@ std::optional object_tooltip(const mobj_t* mobj) .offset3d(0, 0, 32 * mobj->scale * P_MobjFlip(mobj)); } - if (mobj->player == stplyr && K_ApplyOffroad(stplyr) && stplyr->offroad >= FRACUNIT && !stplyr->spindash && stplyr->curshield != KSHIELD_TOP - && stplyr->boostpower < FRACUNIT && stplyr->speed < 2*K_GetKartSpeed(stplyr, false, false)/3) + boolean offroadwarning = K_ApplyOffroad(stplyr) && stplyr->offroad >= FRACUNIT && !stplyr->spindash && stplyr->curshield != KSHIELD_TOP + && stplyr->boostpower < FRACUNIT && stplyr->speed < 2*K_GetKartSpeed(stplyr, false, false)/3; + + boolean hitwarning = stplyr->flashing && stplyr->rings <= 0 && stplyr->speed < K_GetKartSpeed(stplyr, false, false)/2 + && P_IsObjectOnGround(mobj) && !P_PlayerInPain(stplyr); + + boolean hasboost = (stplyr->itemamount && + ( + stplyr->itemtype == KITEM_SNEAKER || stplyr->itemtype == KITEM_INVINCIBILITY || stplyr->itemtype == KITEM_ROCKETSNEAKER + || stplyr->itemtype == KITEM_FLAMESHIELD || stplyr->itemtype == KITEM_GROW + ) + ) || stplyr->rocketsneakertimer; + + if (mobj->player == stplyr && (offroadwarning || hitwarning)) { - if ((stplyr->itemamount && - (stplyr->itemtype == KITEM_SNEAKER || stplyr->itemtype == KITEM_INVINCIBILITY || stplyr->itemtype == KITEM_ROCKETSNEAKER - || stplyr->itemtype == KITEM_FLAMESHIELD || stplyr->itemtype == KITEM_GROW) - ) || stplyr->rocketsneakertimer) - return Tooltip( - TextElement( - TextElement().parse("BOOST ").font(splitfont)) - ) - .offset3d(0, 0, 64 * mobj->scale * P_MobjFlip(mobj)); + if (offroadwarning) + { + if (hasboost) + { + return Tooltip( + TextElement( + TextElement().parse("BOOST ").font(splitfont)) + ) + .offset3d(0, 0, 64 * mobj->scale * P_MobjFlip(mobj)); + } + } return Tooltip( TextElement(