mirror of
https://github.com/YohannDR/mzm.git
synced 2025-02-15 02:59:23 +00:00
More file_select.c code
This commit is contained in:
parent
b40c2ef413
commit
6ee7438067
@ -3,8 +3,7 @@
|
||||
#define FILE_SELECT_OAM_MEDIUM_PANEL 4
|
||||
|
||||
#define FILE_SELECT_OAM_COPY_ARROW 5
|
||||
#define FILE_SELECT_OAM_COPY_CURSOR 6
|
||||
#define FILE_SELECT_OAM_ERASE_CURSOR 6
|
||||
#define FILE_SELECT_OAM_SUB_CURSOR 6
|
||||
#define FILE_SELECT_OAM_CURSOR 7
|
||||
|
||||
#define FILE_SELECT_OAM_FILE_A_MARKER 8
|
||||
|
@ -23,11 +23,11 @@ u32 unk_790cc(u8 param_1, u8 param_2);
|
||||
void FileSelectFileCopyChooseBaseDestinationFile(void);
|
||||
u32 FileSelectCopyFileSubroutine(void);
|
||||
u32 FileSelectEraseFileSubroutine(void);
|
||||
u32 unk_79b50(void);
|
||||
u32 FileSelectCorruptedFileSubroutine(void);
|
||||
void unk_79ecc(void);
|
||||
void OptionsSetupTiletable(void);
|
||||
void FileSelectCopyTimeAttackTime(void);
|
||||
u32 FileSelectOptionTransition(u8 leavingOptions);
|
||||
u8 FileSelectOptionTransition(u8 leavingOptions);
|
||||
|
||||
u8 OptionsSubroutine(void);
|
||||
void FileSelectResetIOTransferInfo(void);
|
||||
|
@ -113,9 +113,9 @@ struct FileSelectData {
|
||||
u8 fileSelectCursorPosition;
|
||||
u8 subroutineStage;
|
||||
u16 subroutineTimer;
|
||||
u8 unk_44;
|
||||
u8 unk_45;
|
||||
u8 unk_46;
|
||||
u8 corruptMessageFileA;
|
||||
u8 corruptMessageFileB;
|
||||
u8 corruptMessageFileC;
|
||||
u8 unk_47;
|
||||
u8 unk_48;
|
||||
|
||||
|
@ -12,6 +12,9 @@
|
||||
#include "structs/time_attack.h"
|
||||
#include "structs/demo.h"
|
||||
|
||||
#define CORRUPTED_FILE_FLAG_CURRENT 1
|
||||
#define CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP 2
|
||||
|
||||
#define SRAM_TEXT_SIZE 16
|
||||
|
||||
#define SRAM_GET_CHECKSUM_SIZE(type, iteration, checksumType) (sizeof(type) / sizeof(checksumType) / iteration - 1)
|
||||
@ -25,7 +28,7 @@ struct StartingInfo {
|
||||
|
||||
struct SaveFileInfo {
|
||||
u8 exists;
|
||||
u8 unk_1;
|
||||
u8 corruptionFlag;
|
||||
u8 currentArea;
|
||||
u16 currentEnergy;
|
||||
u16 maxEnergy;
|
||||
|
@ -127,13 +127,13 @@ void FileSelectResetOAM(void)
|
||||
if (gSaveFilesInfo[2].completedGame)
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_C_LOGO].idChanged = TRUE;
|
||||
|
||||
if (gSaveFilesInfo[0].unk_1)
|
||||
if (gSaveFilesInfo[0].corruptionFlag)
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_A_LOGO].notDrawn = TRUE;
|
||||
|
||||
if (gSaveFilesInfo[1].unk_1)
|
||||
if (gSaveFilesInfo[1].corruptionFlag)
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_B_LOGO].notDrawn = TRUE;
|
||||
|
||||
if (gSaveFilesInfo[2].unk_1)
|
||||
if (gSaveFilesInfo[2].corruptionFlag)
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_C_LOGO].notDrawn = TRUE;
|
||||
|
||||
// Set position of the metroid logos
|
||||
@ -280,10 +280,10 @@ void FileSelectUpdateCopyCursor(u8 cursorPose, u8 fileNumber)
|
||||
|
||||
case CURSOR_COPY_POSE_MOVING:
|
||||
// Update oam id and position
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR], oamId);
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR].xPosition = sFileSelectCursorOamData[fileNumber].xPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR].yPosition = sFileSelectCursorOamData[fileNumber].yPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR].boundBackground = 2;
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR], oamId);
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].xPosition = sFileSelectCursorOamData[fileNumber].xPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].yPosition = sFileSelectCursorOamData[fileNumber].yPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].boundBackground = 2;
|
||||
|
||||
// Update each file marker
|
||||
// If on file and exists or intro played -> red marker, otherwise use idle marker
|
||||
@ -312,8 +312,8 @@ void FileSelectUpdateCopyCursor(u8 cursorPose, u8 fileNumber)
|
||||
|
||||
case CURSOR_COPY_POSE_COPIED:
|
||||
// Kill copy cursor OAM
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR].idChanged = FALSE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].idChanged = FALSE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].oamID = 0;
|
||||
|
||||
// Reset every file marker to non-selected
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_A_MARKER],
|
||||
@ -327,7 +327,7 @@ void FileSelectUpdateCopyCursor(u8 cursorPose, u8 fileNumber)
|
||||
break;
|
||||
|
||||
case CURSOR_COPY_POSE_SELECTING_FILE:
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_COPY_CURSOR], oamId + 2);
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR], oamId + 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -448,10 +448,10 @@ void FileSelectUpdateEraseCursor(u8 cursorPose, u8 fileNumber)
|
||||
|
||||
case CURSOR_ERASE_POSE_MOVING:
|
||||
// Update oam id and position
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR], oamId);
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR].xPosition = sFileSelectCursorOamData[fileNumber].xPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR].yPosition = sFileSelectCursorOamData[fileNumber].yPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR].boundBackground = 2;
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR], oamId);
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].xPosition = sFileSelectCursorOamData[fileNumber].xPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].yPosition = sFileSelectCursorOamData[fileNumber].yPosition;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].boundBackground = 2;
|
||||
|
||||
// Update each file marker
|
||||
// If on file and exists or intro played -> red marker, otherwise use idle marker
|
||||
@ -480,8 +480,8 @@ void FileSelectUpdateEraseCursor(u8 cursorPose, u8 fileNumber)
|
||||
|
||||
case CURSOR_ERASE_POSE_ERASED:
|
||||
// Kill erase cursor OAM
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR].idChanged = FALSE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].idChanged = FALSE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].oamID = 0;
|
||||
|
||||
// Reset every file marker to non-selected
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_A_MARKER],
|
||||
@ -495,7 +495,7 @@ void FileSelectUpdateEraseCursor(u8 cursorPose, u8 fileNumber)
|
||||
break;
|
||||
|
||||
case CURSOR_ERASE_POSE_SELECTING_FILE:
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_ERASE_CURSOR], oamId + 2);
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR], oamId + 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1152,14 +1152,208 @@ u32 FileSelectEraseFileSubroutine(void)
|
||||
return ended;
|
||||
}
|
||||
|
||||
u32 unk_79b50(void)
|
||||
/**
|
||||
* @brief 79b50 | 37c | Corrupted file subroutine
|
||||
*
|
||||
* @return u32 bool, ended
|
||||
*/
|
||||
u32 FileSelectCorruptedFileSubroutine(void)
|
||||
{
|
||||
u8 done;
|
||||
|
||||
FILE_SELECT_DATA.subroutineTimer++;
|
||||
|
||||
switch (FILE_SELECT_DATA.subroutineStage)
|
||||
{
|
||||
case 0:
|
||||
FILE_SELECT_DATA.corruptMessageFileA = FILE_SELECT_DATA.corruptMessageFileB = FILE_SELECT_DATA.corruptMessageFileC = 0;
|
||||
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT)
|
||||
FILE_SELECT_DATA.corruptMessageFileA = 7;
|
||||
else if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP)
|
||||
FILE_SELECT_DATA.corruptMessageFileA = 10;
|
||||
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT)
|
||||
FILE_SELECT_DATA.corruptMessageFileB = 8;
|
||||
else if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP)
|
||||
FILE_SELECT_DATA.corruptMessageFileB = 11;
|
||||
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT)
|
||||
FILE_SELECT_DATA.corruptMessageFileC = 9;
|
||||
else if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP)
|
||||
FILE_SELECT_DATA.corruptMessageFileC = 12;
|
||||
|
||||
if (FILE_SELECT_DATA.corruptMessageFileA)
|
||||
unk_790cc(0, FILE_SELECT_DATA.corruptMessageFileA);
|
||||
|
||||
if (FILE_SELECT_DATA.corruptMessageFileB)
|
||||
unk_790cc(0, FILE_SELECT_DATA.corruptMessageFileB);
|
||||
|
||||
if (FILE_SELECT_DATA.corruptMessageFileC)
|
||||
unk_790cc(0, FILE_SELECT_DATA.corruptMessageFileC);
|
||||
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
done = FALSE;
|
||||
if (FILE_SELECT_DATA.corruptMessageFileA)
|
||||
{
|
||||
if (unk_790cc(1, FILE_SELECT_DATA.corruptMessageFileA))
|
||||
{
|
||||
FILE_SELECT_DATA.unk_47 = 0;
|
||||
done = TRUE;
|
||||
}
|
||||
}
|
||||
else if (FILE_SELECT_DATA.corruptMessageFileB)
|
||||
{
|
||||
if (unk_790cc(1, FILE_SELECT_DATA.corruptMessageFileB))
|
||||
{
|
||||
FILE_SELECT_DATA.unk_47 = 1;
|
||||
done = TRUE;
|
||||
}
|
||||
}
|
||||
else if (FILE_SELECT_DATA.corruptMessageFileC)
|
||||
{
|
||||
if (unk_790cc(1, FILE_SELECT_DATA.corruptMessageFileC))
|
||||
{
|
||||
FILE_SELECT_DATA.unk_47 = 2;
|
||||
done = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FILE_SELECT_DATA.subroutineStage = 10;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!done)
|
||||
break;
|
||||
|
||||
FileSelectUpdateTilemap(0x26);
|
||||
FILE_SELECT_DATA.subroutineStage = 2;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (FileSelectUpdateTilemap(0x27))
|
||||
{
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
FILE_SELECT_DATA.subroutineTimer = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (FILE_SELECT_DATA.subroutineTimer > 30)
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (gChangedInput & KEY_A)
|
||||
{
|
||||
gUnk_3000c20 = 0;
|
||||
|
||||
gMostRecentSaveFile = FILE_SELECT_DATA.unk_47;
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (unk_fbc(0x0))
|
||||
{
|
||||
gUnk_3000c20 = 0;
|
||||
|
||||
if (gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag == CORRUPTED_FILE_FLAG_CURRENT)
|
||||
{
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = 0;
|
||||
FILE_SELECT_DATA.subroutineStage = 7;
|
||||
break;
|
||||
}
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
if (unk_fbc(0x1))
|
||||
{
|
||||
gUnk_3000c20 = 0;
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 7:
|
||||
FileSelectDisplaySaveFileHealth(FILE_SELECT_DATA.unk_47);
|
||||
FileSelectDisplaySaveFileTimer(FILE_SELECT_DATA.unk_47);
|
||||
FileSelectDisplaySaveFileMiscInfo(&gSaveFilesInfo[FILE_SELECT_DATA.unk_47], FILE_SELECT_DATA.unk_47);
|
||||
|
||||
FileScreenSetEnabledMenuFlags();
|
||||
|
||||
if (FILE_SELECT_DATA.unk_47 == 0)
|
||||
FILE_SELECT_DATA.corruptMessageFileA = 0;
|
||||
else if (FILE_SELECT_DATA.unk_47 == 1)
|
||||
FILE_SELECT_DATA.corruptMessageFileB = 0;
|
||||
else
|
||||
FILE_SELECT_DATA.corruptMessageFileC = 0;
|
||||
|
||||
DMATransfer(3, sEwramPointer + 0x800, VRAM_BASE + 0xD800, 0x800, 16);
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_DATA.unk_47 + FILE_SELECT_OAM_FILE_A_LOGO].notDrawn = FALSE;
|
||||
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
FileSelectUpdateTilemap(0x28);
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
if (FileSelectUpdateTilemap(0x29))
|
||||
FILE_SELECT_DATA.subroutineStage = 1;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
unk_790cc(2, UCHAR_MAX);
|
||||
gMostRecentSaveFile = FILE_SELECT_DATA.unk_24;
|
||||
FILE_SELECT_DATA.subroutineStage++;
|
||||
FILE_SELECT_DATA.subroutineTimer = 0;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
if (FILE_SELECT_DATA.subroutineTimer > 16)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_CURSOR].notDrawn = FALSE;
|
||||
FileSelectUpdateCursor(CURSOR_POSE_DEFAULT, FILE_SELECT_DATA.unk_24);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 79ecc | ec | To document
|
||||
*
|
||||
*/
|
||||
void unk_79ecc(void)
|
||||
{
|
||||
DMATransfer(3, sEwramPointer + 0x5100, VRAM_BASE + 0xF000, 0x800, 16);
|
||||
|
||||
FILE_SELECT_DATA.bg2cnt = FILE_SELECT_DATA.unk_20;
|
||||
FILE_SELECT_DATA.dispcnt |= (DCNT_BG2 | DCNT_OBJ);
|
||||
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_A_MARKER].unk_B_4 = 1;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_B_MARKER].unk_B_4 = 1;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_C_MARKER ].unk_B_4 = 1;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_CURSOR].unk_B_4 = 1;
|
||||
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_A_LOGO].notDrawn = TRUE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_B_LOGO].notDrawn = TRUE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_C_LOGO].notDrawn = TRUE;
|
||||
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_A_MARKER].notDrawn = TRUE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_B_MARKER].notDrawn = TRUE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_FILE_C_MARKER ].notDrawn = TRUE;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_CURSOR].notDrawn = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1338,9 +1532,9 @@ void FileSelectCopyTimeAttackTime(void)
|
||||
* @brief 7a2bc | 528 | Handles the transition between the file select screen and the options screen
|
||||
*
|
||||
* @param leavingOptions Leaving options flag
|
||||
* @return u32 bool, ended
|
||||
* @return u8 bool, ended
|
||||
*/
|
||||
u32 FileSelectOptionTransition(u8 leavingOptions)
|
||||
u8 FileSelectOptionTransition(u8 leavingOptions)
|
||||
{
|
||||
u16 bgPos;
|
||||
u32 fadeEnded;
|
||||
@ -3120,7 +3314,7 @@ void FileSelectInit(void)
|
||||
|
||||
gGameModeSub1 = 2;
|
||||
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].unk_1 || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].unk_1 || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].unk_1)
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].corruptionFlag || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].corruptionFlag || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].corruptionFlag)
|
||||
FILE_SELECT_DATA.currentSubMenu = 4;
|
||||
else
|
||||
{
|
||||
@ -3303,7 +3497,7 @@ void FileSelectDisplaySaveFileHealth(u8 file)
|
||||
offset = 3;
|
||||
|
||||
// Check file exists
|
||||
if ((gSaveFilesInfo[file].exists || gSaveFilesInfo[file].introPlayed) && gSaveFilesInfo[file].unk_1 == 0)
|
||||
if ((gSaveFilesInfo[file].exists || gSaveFilesInfo[file].introPlayed) && gSaveFilesInfo[file].corruptionFlag == 0)
|
||||
{
|
||||
// Transfer energy for the hud draw function
|
||||
gEquipment.currentEnergy = gSaveFilesInfo[file].currentEnergy;
|
||||
@ -3343,15 +3537,15 @@ void FileScreenSetEnabledMenuFlags(void)
|
||||
FILE_SELECT_DATA.enabledMenus = 0;
|
||||
|
||||
// Check set file flags
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].unk_1 == 0 &&
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].corruptionFlag == 0 &&
|
||||
(gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].exists || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_A].introPlayed))
|
||||
FILE_SELECT_DATA.enabledMenus |= MENU_FLAG_FILE_A;
|
||||
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].unk_1 == 0 &&
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].corruptionFlag == 0 &&
|
||||
(gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].exists || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_B].introPlayed))
|
||||
FILE_SELECT_DATA.enabledMenus |= MENU_FLAG_FILE_B;
|
||||
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].unk_1 == 0 &&
|
||||
if (gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].corruptionFlag == 0 &&
|
||||
(gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].exists || gSaveFilesInfo[FILE_SELECT_CURSOR_POSITION_FILE_C].introPlayed))
|
||||
FILE_SELECT_DATA.enabledMenus |= MENU_FLAG_FILE_C;
|
||||
|
||||
@ -3380,17 +3574,248 @@ void FileScreenSetEnabledMenuFlags(void)
|
||||
|
||||
u8 unk_7d19c(u8 param_1, u8* pFileNumber)
|
||||
{
|
||||
// https://decomp.me/scratch/vL4yf
|
||||
|
||||
i32 direction;
|
||||
u8 position;
|
||||
u8 flags;
|
||||
|
||||
if (gChangedInput & KEY_UP)
|
||||
direction = -1;
|
||||
else if (gChangedInput & KEY_DOWN)
|
||||
direction = 1;
|
||||
else
|
||||
return 0;
|
||||
|
||||
position = *pFileNumber;
|
||||
flags = FILE_SELECT_DATA.enabledMenus;
|
||||
|
||||
if (param_1 == 0)
|
||||
flags |= (MENU_FLAG_FILE_A | MENU_FLAG_FILE_B | MENU_FLAG_FILE_C);
|
||||
else if (param_1 == 1)
|
||||
flags &= (MENU_FLAG_FILE_A | MENU_FLAG_FILE_B | MENU_FLAG_FILE_C);
|
||||
else if (param_1 == 2)
|
||||
flags = (MENU_FLAG_FILE_A | MENU_FLAG_FILE_B | MENU_FLAG_FILE_C) & ~(1 << FILE_SELECT_DATA.copySourceFile);
|
||||
|
||||
if (direction != 0)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (position + direction > 5)
|
||||
{
|
||||
direction = FALSE;
|
||||
break;
|
||||
}
|
||||
position += direction;
|
||||
}
|
||||
while (!((flags >> position) & 1));
|
||||
|
||||
*pFileNumber = position;
|
||||
direction = TRUE;
|
||||
}
|
||||
|
||||
|
||||
return direction;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 7d230 | 4c | Selects the first non empty file
|
||||
*
|
||||
* @param pFileNumber File number pointer
|
||||
*/
|
||||
void FileSelectFindFirstNonEmptyFile(u8* pFileNumber)
|
||||
{
|
||||
u8 file;
|
||||
u8 flags;
|
||||
|
||||
flags = FILE_SELECT_DATA.enabledMenus;
|
||||
file = *pFileNumber;
|
||||
if ((flags >> file) & 1)
|
||||
return;
|
||||
|
||||
if (flags & MENU_FLAG_FILE_A)
|
||||
file = FILE_SELECT_CURSOR_POSITION_FILE_A;
|
||||
else if (flags & MENU_FLAG_FILE_B)
|
||||
file = FILE_SELECT_CURSOR_POSITION_FILE_B;
|
||||
else if (flags & MENU_FLAG_FILE_C)
|
||||
file = FILE_SELECT_CURSOR_POSITION_FILE_C;
|
||||
|
||||
*pFileNumber = file;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 7d27c | 30c | Updates the current sub menu of the file select screen
|
||||
*
|
||||
* @return u8 bool, leaving
|
||||
*/
|
||||
u8 FileSelectUpdateSubMenu(void)
|
||||
{
|
||||
u8 result;
|
||||
u8 cursorPose;
|
||||
i32 temp;
|
||||
|
||||
switch (FILE_SELECT_DATA.currentSubMenu)
|
||||
{
|
||||
case 0:
|
||||
result = 0;
|
||||
check_for_maintained_input();
|
||||
|
||||
if (gChangedInput)
|
||||
{
|
||||
if (unk_7d19c(0, &FILE_SELECT_DATA.fileSelectCursorPosition))
|
||||
result = 1;
|
||||
else
|
||||
{
|
||||
if (gChangedInput & KEY_B)
|
||||
result = 2;
|
||||
else if (gChangedInput & KEY_A)
|
||||
result = 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (!result)
|
||||
break;
|
||||
|
||||
if (result == 1)
|
||||
{
|
||||
FileSelectUpdateCursor(CURSOR_POSE_MOVING, FILE_SELECT_DATA.fileSelectCursorPosition);
|
||||
if (FILE_SELECT_DATA.fileSelectCursorPosition < FILE_SELECT_CURSOR_POSITION_COPY)
|
||||
FileSelectPlayMenuSound(MENU_SOUND_REQUEST_CURSOR);
|
||||
else
|
||||
FileSelectPlayMenuSound(MENU_SOUND_REQUEST_SUB_MENU_CURSOR);
|
||||
}
|
||||
else if (result == 2)
|
||||
{
|
||||
FadeMusic(0);
|
||||
gGameModeSub2 = 3;
|
||||
return TRUE;
|
||||
}
|
||||
else if (result == 3)
|
||||
{
|
||||
result = FALSE;
|
||||
|
||||
switch (FILE_SELECT_DATA.fileSelectCursorPosition)
|
||||
{
|
||||
case FILE_SELECT_CURSOR_POSITION_FILE_A:
|
||||
case FILE_SELECT_CURSOR_POSITION_FILE_B:
|
||||
case FILE_SELECT_CURSOR_POSITION_FILE_C:
|
||||
FileSelectPlayMenuSound(MENU_SOUND_REQUEST_FILE_SELECT);
|
||||
cursorPose = CURSOR_POSE_SELECTING_FILE;
|
||||
result = TRUE;
|
||||
FILE_SELECT_DATA.currentSubMenu = 1;
|
||||
break;
|
||||
|
||||
case FILE_SELECT_CURSOR_POSITION_COPY:
|
||||
if (FILE_SELECT_DATA.enabledMenus & MENU_FLAG_COPY)
|
||||
{
|
||||
FileSelectPlayMenuSound(MENU_SOUND_REQUEST_ACCEPT_CONFIRM_MENU);
|
||||
cursorPose = CURSOR_POSE_OPENING_OPTIONS;
|
||||
result = TRUE;
|
||||
FILE_SELECT_DATA.currentSubMenu = 2;
|
||||
}
|
||||
break;
|
||||
|
||||
case FILE_SELECT_CURSOR_POSITION_ERASE:
|
||||
if (FILE_SELECT_DATA.enabledMenus & MENU_FLAG_ERASE)
|
||||
{
|
||||
FileSelectPlayMenuSound(MENU_SOUND_REQUEST_ACCEPT_CONFIRM_MENU);
|
||||
cursorPose = CURSOR_POSE_OPENING_OPTIONS;
|
||||
result = TRUE;
|
||||
FILE_SELECT_DATA.currentSubMenu = 3;
|
||||
}
|
||||
break;
|
||||
|
||||
case FILE_SELECT_CURSOR_POSITION_OPTIONS:
|
||||
if (FILE_SELECT_DATA.enabledMenus & MENU_FLAG_OPTIONS)
|
||||
{
|
||||
FileSelectPlayMenuSound(MENU_SOUND_REQUEST_ACCEPT_CONFIRM_MENU);
|
||||
cursorPose = CURSOR_POSE_OPENING_OPTIONS;
|
||||
result = TRUE;
|
||||
FILE_SELECT_DATA.currentSubMenu = 5;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (result)
|
||||
{
|
||||
FileSelectUpdateCursor(cursorPose, FILE_SELECT_DATA.fileSelectCursorPosition);
|
||||
FILE_SELECT_DATA.subroutineStage = 0;
|
||||
FILE_SELECT_DATA.subroutineTimer = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
result = FileSelectProcessFileSelection();
|
||||
if (result == FALSE)
|
||||
break;
|
||||
|
||||
if (result == 2)
|
||||
{
|
||||
temp = FILE_SELECT_DATA.unk_3A;
|
||||
if (temp >= 0)
|
||||
{
|
||||
if (temp >= 2)
|
||||
{
|
||||
if (temp < 5)
|
||||
{
|
||||
gSaveFilesInfo[gMostRecentSaveFile].exists = FALSE;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].difficulty = FILE_SELECT_DATA.fileSelectData.difficulty;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].timeAttack = FILE_SELECT_DATA.fileSelectData.unk_3 == 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gGameModeSub2 = gSaveFilesInfo[gMostRecentSaveFile].exists ? 1 : 2;
|
||||
FadeMusic(20);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
FileSelectUpdateCursor(CURSOR_POSE_DESELECTING_FILE, FILE_SELECT_DATA.fileSelectCursorPosition);
|
||||
FILE_SELECT_DATA.currentSubMenu = 0;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (FileSelectCopyFileSubroutine())
|
||||
{
|
||||
FileSelectUpdateCursor(CURSOR_POSE_DEFAULT, FILE_SELECT_DATA.fileSelectCursorPosition);
|
||||
FILE_SELECT_DATA.currentSubMenu = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (FileSelectEraseFileSubroutine())
|
||||
{
|
||||
FileSelectUpdateCursor(CURSOR_POSE_DEFAULT, FILE_SELECT_DATA.fileSelectCursorPosition);
|
||||
FILE_SELECT_DATA.currentSubMenu = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (FileSelectCorruptedFileSubroutine())
|
||||
{
|
||||
FileSelectUpdateCursor(CURSOR_POSE_DEFAULT, FILE_SELECT_DATA.fileSelectCursorPosition);
|
||||
FILE_SELECT_DATA.currentSubMenu = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (FileSelectOptionTransition(FALSE))
|
||||
{
|
||||
gGameModeSub2 = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
if (FileSelectOptionTransition(TRUE))
|
||||
FILE_SELECT_DATA.currentSubMenu = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
FileScreenProcessText();
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -4155,9 +4580,204 @@ u8 FileSelectProcessFileSelection(void)
|
||||
return leaving;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 7e3fc | 2dc | To document
|
||||
*
|
||||
* @param param_1 To document
|
||||
* @param param_2 To document
|
||||
*/
|
||||
void unk_7e3fc(u8 param_1, u8 param_2)
|
||||
{
|
||||
switch (param_1)
|
||||
{
|
||||
case 0:
|
||||
if (param_2 == 0x80)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR], FILE_SELECT_OAM_ID_CURSOR_SELECTED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x81)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].idChanged = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x0)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].priority = 1;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].boundBackground = 1;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].xPosition = BLOCK_SIZE * 2;
|
||||
FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].yPosition = BLOCK_SIZE * 2 - 8;
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR].oamID != FILE_SELECT_OAM_ID_CURSOR_IDLE)
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[FILE_SELECT_OAM_SUB_CURSOR], FILE_SELECT_OAM_ID_CURSOR_IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (param_2 == 0x80)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_SELECTED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x81)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].idChanged = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x0 || param_2 == 0x1)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].priority = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].boundBackground = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE * 2;
|
||||
|
||||
if (param_2 == 0x0)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 2 + 24;
|
||||
else
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 3 + 24;
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[3].oamID != FILE_SELECT_OAM_ID_CURSOR_IDLE)
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (param_2 == 0x80)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_SELECTED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x81)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].idChanged = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0 || param_2 == 1 || param_2 == 2)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].priority = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].boundBackground = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE * 2;
|
||||
|
||||
if (param_2 == 0)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 2 + 24;
|
||||
else if (param_2 == 1)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 3 + 24;
|
||||
else
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 4 + 24;
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[3].oamID != FILE_SELECT_OAM_ID_CURSOR_IDLE)
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 4:
|
||||
if (param_2 == 0x80)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_SELECTED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x81)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].idChanged = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0 || param_2 == 1)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].priority = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].boundBackground = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 3 + 24;
|
||||
|
||||
if (param_2 == 0)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE * 3 + QUARTER_BLOCK_SIZE;
|
||||
else
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE * 6 - QUARTER_BLOCK_SIZE;
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[3].oamID != FILE_SELECT_OAM_ID_CURSOR_IDLE)
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (param_2 == 0x80)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_SELECTED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x81)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].idChanged = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0 || param_2 == 1 || param_2 == 2)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].priority = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].boundBackground = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE + HALF_BLOCK_SIZE + 12;
|
||||
|
||||
if (param_2 == 0)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE + 24;
|
||||
else if (param_2 == 1)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 2 + 24;
|
||||
else
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 3 + 24;
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[3].oamID != FILE_SELECT_OAM_ID_CURSOR_IDLE)
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
if (param_2 == 0x80)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_SELECTED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0x81)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].oamID = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].idChanged = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (param_2 == 0 || param_2 == 1)
|
||||
{
|
||||
FILE_SELECT_DATA.fileScreenOam[3].priority = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].boundBackground = 0;
|
||||
FILE_SELECT_DATA.fileScreenOam[3].yPosition = BLOCK_SIZE * 4 + HALF_BLOCK_SIZE - 8;
|
||||
|
||||
if (param_2 == 0)
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE * 3 - 8;
|
||||
else
|
||||
FILE_SELECT_DATA.fileScreenOam[3].xPosition = BLOCK_SIZE * 6 - QUARTER_BLOCK_SIZE;
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[3].oamID != FILE_SELECT_OAM_ID_CURSOR_IDLE)
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[3], FILE_SELECT_OAM_ID_CURSOR_IDLE);
|
||||
|
||||
if (FILE_SELECT_DATA.fileScreenOam[0].oamID != FILE_SELECT_OAM_ID_METROID_LOGO)
|
||||
{
|
||||
UpdateMenuOamDataID(&FILE_SELECT_DATA.fileScreenOam[0], FILE_SELECT_OAM_ID_METROID_LOGO);
|
||||
FILE_SELECT_DATA.fileScreenOam[0].xPosition = BLOCK_SIZE * 2 - 8;
|
||||
FILE_SELECT_DATA.fileScreenOam[0].yPosition = BLOCK_SIZE * 3 + QUARTER_BLOCK_SIZE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u32 FileSelectUpdateTilemap(u8 request)
|
||||
|
@ -902,7 +902,7 @@ void SramTestFlash(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 743a4 | 1d0 |
|
||||
* @brief 743a4 | 1d0 | To document
|
||||
*
|
||||
*/
|
||||
void unk_743a4(void)
|
||||
@ -921,7 +921,7 @@ void unk_743a4(void)
|
||||
gMostRecentSaveFile = i;
|
||||
unk_74574();
|
||||
|
||||
flag = gSaveFilesInfo[gMostRecentSaveFile].unk_1;
|
||||
flag = gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag;
|
||||
|
||||
if (flag == 0)
|
||||
{
|
||||
@ -931,14 +931,14 @@ void unk_743a4(void)
|
||||
do_sram_operation(4);
|
||||
gSaveFilesInfo[i].exists = TRUE;
|
||||
}
|
||||
else if (flag == 1)
|
||||
else if (flag == CORRUPTED_FILE_FLAG_CURRENT)
|
||||
{
|
||||
DMATransfer(3, &sSramEwramPointer->filesCopy[gMostRecentSaveFile],
|
||||
&sSramEwramPointer->files[gMostRecentSaveFile], sizeof(struct SaveFile), 16);
|
||||
|
||||
gSaveFilesInfo[i].exists = TRUE;
|
||||
}
|
||||
else if (flag == 2)
|
||||
else if (flag == CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP)
|
||||
{
|
||||
BitFill(3, USHORT_MAX, &sSramEwramPointer->files[gMostRecentSaveFile], sizeof(struct SaveFile), 16);
|
||||
BitFill(3, USHORT_MAX, &sSramEwramPointer->filesCopy[gMostRecentSaveFile], sizeof(struct SaveFile), 16);
|
||||
@ -949,7 +949,7 @@ void unk_743a4(void)
|
||||
do_sram_operation(3);
|
||||
BitFill(3, USHORT_MAX, &sSramEwramPointer->filesCopy[gMostRecentSaveFile], sizeof(struct SaveFile), 16);
|
||||
do_sram_operation(4);
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 0;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -974,23 +974,23 @@ void unk_74574(void)
|
||||
|
||||
if (sanityCheck1 == 0)
|
||||
{
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 0;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (sanityCheck1 == 1)
|
||||
{
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 1;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = CORRUPTED_FILE_FLAG_CURRENT;
|
||||
if (sanityCheck2 != 0)
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 2;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP;
|
||||
return;
|
||||
}
|
||||
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 3;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = 3;
|
||||
if (sanityCheck2 == 0)
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 1;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = CORRUPTED_FILE_FLAG_CURRENT;
|
||||
else if (sanityCheck2 == 1)
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 2;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP;
|
||||
}
|
||||
|
||||
u32 unk_74624(u8 useCopy)
|
||||
@ -1917,13 +1917,13 @@ void unk_757c8(u8 file)
|
||||
previousFile = gMostRecentSaveFile;
|
||||
gMostRecentSaveFile = file;
|
||||
|
||||
switch (gSaveFilesInfo[gMostRecentSaveFile].unk_1)
|
||||
switch (gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag)
|
||||
{
|
||||
case 1:
|
||||
case CORRUPTED_FILE_FLAG_CURRENT:
|
||||
do_sram_operation(3);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case CORRUPTED_FILE_FLAG_CURRENT_AND_BACKUP:
|
||||
do_sram_operation(3);
|
||||
do_sram_operation(4);
|
||||
break;
|
||||
@ -1934,7 +1934,7 @@ void unk_757c8(u8 file)
|
||||
break;
|
||||
}
|
||||
|
||||
gSaveFilesInfo[gMostRecentSaveFile].unk_1 = 0;
|
||||
gSaveFilesInfo[gMostRecentSaveFile].corruptionFlag = 0;
|
||||
gMostRecentSaveFile = previousFile;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user