summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKiloku <mateus.sateles@protonmail.com>2025-01-03 19:19:10 -0300
committerLywx <kiritodev01@gmail.com>2025-01-03 16:59:24 -0600
commit6560c012fc5f98fef5fe4ce6168edac487c919ec (patch)
treebcb311212c6e1766690ae0ffa69384bd87111e2f /src
parenteb44ba0f044586e010daeaa573c65dadd0784e0a (diff)
per-level checkpoints
Diffstat (limited to 'src')
-rw-r--r--src/engine/fox_play.c13
-rw-r--r--src/port/ui/ImguiUI.cpp26
-rw-r--r--src/port/ui/ImguiUI.h9
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 <Fast3D/gfx_pc.h>
#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 <libultraship/libultraship.h>
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();
}