The SAVE_DEVICE_FOUND/SAVE_LOAD_ALL_SLOTS block had been moved to the end of the file (after QUIT/QUIT_GAME) without moving the LOADED marker with it. MARKER items always auto-advance to whatever follows them in the array, so reaching LOADED after a successful save-load fell straight through into the QUIT block's confirm dialog instead of completing the cutscene. LOADED now sits after SAVE_LOAD_ALL_SLOTS as the true last item, so it falls off the end and fires uiMainMenuOpenSelectSave again as intended. Co-Authored-By: Claude Sonnet 5 <[email protected]>
141 lines
3.2 KiB
JSON
141 lines
3.2 KiB
JSON
{
|
|
"items": [
|
|
{
|
|
"type": "MARKER",
|
|
"name": "MAIN_MENU_IDLE"
|
|
},
|
|
{
|
|
"type": "UI_SHOW",
|
|
"name": "main_menu"
|
|
},
|
|
|
|
// Options button goes here - no options screen yet, so this is just
|
|
// an alias landing right back on the idle loop below.
|
|
{
|
|
"type": "MARKER",
|
|
"name": "OPTIONS"
|
|
},
|
|
{
|
|
"type": "IDLE"
|
|
},
|
|
|
|
// New Game button goes here.
|
|
{
|
|
"type": "MARKER",
|
|
"name": "NEW_GAME"
|
|
},
|
|
{
|
|
"type": "MODAL",
|
|
"title": "main_menu.checking_save.title",
|
|
"message": "main_menu.checking_save.message"
|
|
},
|
|
{
|
|
"type": "WAIT",
|
|
"seconds": 0.2
|
|
},
|
|
{
|
|
"type": "SAVE_DEVICE_CHECK",
|
|
"successMarker": "SAVE_DEVICE_FOUND",
|
|
"failureMarker": "SAVE_DEVICE_NOT_FOUND"
|
|
},
|
|
|
|
// Save device not found
|
|
{
|
|
"type": "MARKER",
|
|
"name": "SAVE_DEVICE_NOT_FOUND"
|
|
},
|
|
{
|
|
"type": "MODAL_CLOSE"
|
|
},
|
|
{
|
|
"type": "MODAL_OPTIONS_MARKERS",
|
|
"title": "main_menu.no_device.title",
|
|
"message": "main_menu.no_device.message",
|
|
"options": [
|
|
{
|
|
"text": "main_menu.no_device.retry",
|
|
"marker": "NEW_GAME"
|
|
},
|
|
{
|
|
"text": "main_menu.no_device.continue",
|
|
"marker": "SAVE_DEVICE_FOUND"
|
|
}
|
|
]
|
|
},
|
|
|
|
// Save data failed to load (e.g. corrupt/unreadable) - only option is
|
|
// to retry, no "continue without saving" here since we already know a
|
|
// device is present.
|
|
{
|
|
"type": "MARKER",
|
|
"name": "LOAD_ERROR"
|
|
},
|
|
{
|
|
"type": "MODAL_OPTIONS_MARKERS",
|
|
"title": "main_menu.save_load_error.title",
|
|
"message": "main_menu.save_load_error.message",
|
|
"options": [
|
|
{
|
|
"text": "main_menu.save_load_error.retry",
|
|
"marker": "NEW_GAME"
|
|
}
|
|
]
|
|
},
|
|
|
|
// Quit Game button goes here. Cancelling jumps back to
|
|
// MAIN_MENU_IDLE; confirming falls through to QUIT_GAME, which
|
|
// ends the process directly.
|
|
{
|
|
"type": "MARKER",
|
|
"name": "QUIT"
|
|
},
|
|
{
|
|
"type": "MODAL_OPTIONS_MARKERS",
|
|
"title": "main_menu.quit_confirm",
|
|
"options": [
|
|
{
|
|
"text": "ui.confirm.confirm",
|
|
"marker": "QUIT_CONFIRMED"
|
|
},
|
|
{
|
|
"text": "ui.confirm.cancel",
|
|
"marker": "MAIN_MENU_IDLE"
|
|
}
|
|
]
|
|
},
|
|
|
|
{
|
|
"type": "MARKER",
|
|
"name": "QUIT_CONFIRMED"
|
|
},
|
|
{
|
|
"type": "QUIT_GAME"
|
|
},
|
|
|
|
// main menu just listens for cutscene ending to show the select save modal
|
|
// so we have that here.
|
|
{
|
|
"type": "MARKER",
|
|
"name": "SAVE_DEVICE_FOUND"
|
|
},
|
|
{
|
|
"type": "MODAL_CLOSE"
|
|
},
|
|
{
|
|
"type": "SAVE_LOAD_ALL_SLOTS",
|
|
"successMarker": "LOADED",
|
|
"failureMarker": "LOAD_ERROR"
|
|
},
|
|
|
|
// Must be the very last item - falling off the end here is what
|
|
// completes the cutscene and fires uiMainMenuOpenSelectSave (see
|
|
// cutsceneSystemSetOnComplete in ui/screen/mainmenu/uimainmenu.c).
|
|
// Placing this anywhere earlier would fall through into whatever
|
|
// comes next instead (e.g. the QUIT block, if placed just before it).
|
|
{
|
|
"type": "MARKER",
|
|
"name": "LOADED"
|
|
}
|
|
]
|
|
}
|