tr1/ui: fix loading from empty slots
Some checks are pending
Run code linters / Run code linters (push) Waiting to run
Publish a pre-release / Build TR1 (push) Has been skipped
Publish a pre-release / Build TR2 (push) Has been skipped
Publish a pre-release / Create a prerelease (push) Has been skipped

This commit is contained in:
Marcin Kurczewski 2025-04-19 21:49:00 +02:00
parent 9ee04f9c41
commit f688f5c06c
2 changed files with 17 additions and 20 deletions

View file

@ -98,14 +98,6 @@ static void M_HandleFlipInputs(void);
static void M_InitRequesters(void)
{
if (m_State.select_level.state != nullptr) {
UI_SelectLevelDialog_Free(m_State.select_level.state);
m_State.select_level.state = nullptr;
}
if (m_State.save_slot.state != nullptr) {
UI_SaveSlotDialog_Free(m_State.save_slot.state);
m_State.save_slot.state = nullptr;
}
UI_NewGame_Init(&m_State.new_game.state);
}
@ -286,7 +278,7 @@ static void M_DeterminePages(void)
}
}
static void M_InitSaveRequester(int16_t page_num)
static void M_InitSaveRequester(const int16_t page_num)
{
int32_t save_slot = g_GameInfo.select_save_slot;
if (save_slot == -1) {
@ -365,7 +357,6 @@ static void M_ShowSelectLevel(void)
static void M_LoadGame(void)
{
M_ChangePageTextContent(GS(PASSPORT_LOAD_GAME));
if (m_State.mode == PASSPORT_MODE_BROWSE) {
if (g_InputDB.menu_confirm) {
M_InitSaveRequester(m_State.active_page);
@ -396,7 +387,6 @@ static void M_SelectLevel(void)
static void M_SaveGame(void)
{
M_ChangePageTextContent(GS(PASSPORT_SAVE_GAME));
if (m_State.mode == PASSPORT_MODE_BROWSE) {
if (g_InputDB.menu_confirm) {
M_InitSaveRequester(m_State.active_page);
@ -607,15 +597,20 @@ void Option_Passport_Draw(INVENTORY_ITEM *const item)
UI_NewGame(&m_State.new_game.state);
}
break;
case PASSPORT_MODE_SELECT_LEVEL:
UI_SelectLevelDialog(m_State.select_level.state);
if (m_State.select_level.state != nullptr) {
UI_SelectLevelDialog(m_State.select_level.state);
}
break;
case PASSPORT_MODE_LOAD_GAME:
case PASSPORT_MODE_SAVE_GAME:
if (m_State.is_ready) {
if (m_State.is_ready && m_State.save_slot.state != nullptr) {
UI_SaveSlotDialog(m_State.save_slot.state);
}
break;
default:
break;
}

View file

@ -145,20 +145,22 @@ UI_SAVE_SLOT_DIALOG_CHOICE UI_SaveSlotDialog_Control(
};
}
const int32_t choice = UI_Requester_Control(&s->req);
if (choice == UI_REQUESTER_NO_CHOICE) {
return (UI_SAVE_SLOT_DIALOG_CHOICE) {
.action = UI_SAVE_SLOT_DIALOG_NO_CHOICE
};
} else if (choice == UI_REQUESTER_CANCEL) {
if (choice == UI_REQUESTER_CANCEL) {
return (UI_SAVE_SLOT_DIALOG_CHOICE) {
.action = UI_SAVE_SLOT_DIALOG_CANCEL,
};
} else {
} else if (
choice != UI_REQUESTER_NO_CHOICE
&& (s->type == UI_SAVE_SLOT_DIALOG_SAVE_GAME
|| !Savegame_IsSlotFree(choice))) {
return (UI_SAVE_SLOT_DIALOG_CHOICE) {
.action = UI_SAVE_SLOT_DIALOG_CONFIRM,
.slot_num = sel_row,
};
}
return (UI_SAVE_SLOT_DIALOG_CHOICE) {
.action = UI_SAVE_SLOT_DIALOG_NO_CHOICE,
};
}
void UI_SaveSlotDialog(const UI_SAVE_SLOT_DIALOG_STATE *const s)
@ -166,7 +168,7 @@ void UI_SaveSlotDialog(const UI_SAVE_SLOT_DIALOG_STATE *const s)
UI_BeginModal(0.5f, g_InvMode == INV_TITLE_MODE ? 0.72f : 0.55f);
UI_BeginResize(300.0f, -1.0f);
const char *title = (s->type == UI_SAVE_SLOT_DIALOG_SAVE_GAME)
const char *const title = (s->type == UI_SAVE_SLOT_DIALOG_SAVE_GAME)
? GS(PASSPORT_SAVE_GAME)
: GS(PASSPORT_LOAD_GAME);
UI_BeginRequester(&s->req, title);