From 6560c012fc5f98fef5fe4ce6168edac487c919ec Mon Sep 17 00:00:00 2001 From: Kiloku Date: Fri, 3 Jan 2025 19:19:10 -0300 Subject: [PATCH] per-level checkpoints --- src/engine/fox_play.c | 13 +++++++++---- src/port/ui/ImguiUI.cpp | 26 ++++++++------------------ src/port/ui/ImguiUI.h | 9 --------- 3 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/engine/fox_play.c b/src/engine/fox_play.c index 74ffdb13..9f72f4e8 100644 --- a/src/engine/fox_play.c +++ b/src/engine/fox_play.c @@ -4678,10 +4678,15 @@ void Player_Setup(Player* playerx) { gDisplayedHitCount = gHitCount; D_hud_80161730 = 0; - if (CVarGetInteger("gCheckpoint.Set", 0) && CVarGetInteger("gCheckpoint.gSavedLevel", -1) == gCurrentLevel) { - gSavedGroundSurface = CVarGetInteger("gCheckpoint.gSavedGroundSurface", gSavedGroundSurface); - gSavedPathProgress = CVarGetFloat("gCheckpoint.gSavedPathProgress", gSavedPathProgress); - gSavedObjectLoadIndex = CVarGetInteger("gCheckpoint.gSavedObjectLoadIndex", gSavedObjectLoadIndex); + char buffer [48] = {"\0"}; + sprintf(buffer, "gCheckpoint.%d.Set", gCurrentLevel); + if (CVarGetInteger(buffer, 0)) { + sprintf(buffer, "gCheckpoint.%d.gSavedGroundSurface", gCurrentLevel); + gSavedGroundSurface = CVarGetInteger(buffer, gSavedGroundSurface); + sprintf(buffer, "gCheckpoint.%d.gSavedPathProgress", gCurrentLevel); + gSavedPathProgress = CVarGetFloat(buffer, gSavedPathProgress); + sprintf(buffer, "gCheckpoint.%d.gSavedObjectLoadIndex", gCurrentLevel); + gSavedObjectLoadIndex = CVarGetInteger(buffer, gSavedObjectLoadIndex); } gMissedZoSearchlight = gSavedZoSearchlightStatus; diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index 0e5024f8..02fa87f7 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -12,6 +12,7 @@ #include #include "port/Engine.h" #include "port/notification/notification.h" +#include "utils/StringHelper.h" extern "C" { #include "sys.h" @@ -599,28 +600,17 @@ void DrawDebugMenu() { .tooltip = "Jump to credits at the main menu" }); - if (CVarGetInteger("gCheckpoint.Set", 0)) { - LevelId savedLevel = CVarGetInteger("gCheckpoint.gSavedLevel", -1); - std::string CheckpointLabel = "Checkpoint is at "; - if (savedLevel == 77){ - CheckpointLabel += "Warp Zone"; - } else if (savedLevel < 0 || savedLevel >= sizeof(GameUI::LevelNameLookup)/sizeof(GameUI::LevelNameLookup[0])) { - CheckpointLabel += "Unknown (out of bounds)"; - } else { - CheckpointLabel += GameUI::LevelNameLookup[CVarGetInteger("gCheckpoint.gSavedLevel", -1)]; - } - ImGui::Text(CheckpointLabel.c_str()); + if (CVarGetInteger(StringHelper::Sprintf("gCheckpoint.%d.Set", gCurrentLevel).c_str(), 0)) { if (UIWidgets::Button("Clear Checkpoint")) { - CVarClear("gCheckpoint.Set"); + CVarClear(StringHelper::Sprintf("gCheckpoint.%d.Set", gCurrentLevel).c_str()); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } - } else if (gPlayer != NULL) { + } else if (gPlayer != NULL && gGameState == GSTATE_PLAY) { if (UIWidgets::Button("Set Checkpoint")) { - CVarSetInteger("gCheckpoint.Set", 1); - CVarSetInteger("gCheckpoint.gSavedLevel", gCurrentLevel); - CVarSetInteger("gCheckpoint.gSavedPathProgress", gGroundSurface); - CVarSetFloat("gCheckpoint.gSavedPathProgress", (-gPlayer->pos.z) - 250.0f); - CVarSetInteger("gCheckpoint.gSavedObjectLoadIndex", gObjectLoadIndex); + CVarSetInteger(StringHelper::Sprintf("gCheckpoint.%d.Set", gCurrentLevel).c_str(), 1); + CVarSetInteger(StringHelper::Sprintf("gCheckpoint.%d.gSavedPathProgress", gCurrentLevel).c_str(), gGroundSurface); + CVarSetFloat(StringHelper::Sprintf("gCheckpoint.%d.gSavedPathProgress", gCurrentLevel).c_str(), (-gPlayer->pos.z) - 250.0f); + CVarSetInteger(StringHelper::Sprintf("gCheckpoint.%d.gSavedObjectLoadIndex", gCurrentLevel).c_str(), gObjectLoadIndex); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } } diff --git a/src/port/ui/ImguiUI.h b/src/port/ui/ImguiUI.h index 675cfd80..e3fa9a66 100644 --- a/src/port/ui/ImguiUI.h +++ b/src/port/ui/ImguiUI.h @@ -2,15 +2,6 @@ #include namespace GameUI { - const std::string LevelNameLookup[] = - { - "Corneria", "Meteo", "Sector X", "Area 6", - "Unknown", "Sector Y", "Venom 1", "Solar", - "Zoness", "Andross", "Training", "Macbeth", - "Titania", "Aquas", "Fortuna", "Unknown", - "Katina", "Bolse", "Sector Z", "Venom 2", - "Versus" - }; void SetupGuiElements(); void Destroy(); }