mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
b4eebbbcd6
* v1 * Cleanup * Cleanup * cleanup * Organization * Fixes * Fix typos * fixup merge * use gLanguages * Restore n64dd * Fix bad merge * Set ddflag
1067 lines
37 KiB
C
1067 lines
37 KiB
C
#include "file_choose.h"
|
|
|
|
// when choosing a file to copy or erase, the 6 main menu buttons are placed at these offsets
|
|
static s16 sChooseFileYOffsets[] = { -48, -48, -48, -24, -24, 0 };
|
|
|
|
static s16 D_8081248C[3][3] = {
|
|
{ 0, -48, -48 },
|
|
{ -64, 16, -48 },
|
|
{ -64, -64, 32 },
|
|
};
|
|
|
|
static s16 sEraseDelayTimer = 15;
|
|
|
|
/**
|
|
* Move buttons into place for the select source screen and fade in the proper labels.
|
|
* Update function for `CM_SETUP_COPY_SOURCE`
|
|
*/
|
|
void FileChoose_SetupCopySource(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 yStep;
|
|
s16 i;
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
yStep = (ABS(this->buttonYOffsets[i] - sChooseFileYOffsets[i])) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 25;
|
|
this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 25;
|
|
this->optionButtonAlpha -= 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 25;
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->actionTimer = 8;
|
|
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
|
|
this->optionButtonAlpha = 0;
|
|
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->buttonIndex = FS_BTN_COPY_QUIT;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow the player to select a file to copy or exit back to the main menu.
|
|
* Update function for `CM_SELECT_COPY_SOURCE`
|
|
*/
|
|
void FileChoose_SelectCopySource(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
bool dpad = CVar_GetS32("gDpadPauseName", 0);
|
|
|
|
if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
|
|
CHECK_BTN_ALL(input->press.button, BTN_B)) {
|
|
this->actionTimer = 8;
|
|
this->buttonIndex = FS_BTN_MAIN_COPY;
|
|
this->nextTitleLabel = FS_TITLE_SELECT_FILE;
|
|
this->configMode = CM_COPY_RETURN_MAIN;
|
|
this->warningLabel = FS_WARNING_NONE;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CLOSE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
|
|
if (Save_GetSaveMetaInfo(this->buttonIndex)->valid) {
|
|
this->actionTimer = 8;
|
|
this->selectedFileIndex = this->buttonIndex;
|
|
this->configMode = CM_SETUP_COPY_DEST_1;
|
|
this->nextTitleLabel = FS_TITLE_COPY_TO;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
} else {
|
|
if ((ABS(this->stickRelY) >= 30) || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DDOWN | BTN_DUP))) {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CURSOR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
|
|
if ((this->stickRelY >= 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DUP))) {
|
|
this->buttonIndex--;
|
|
|
|
if (this->buttonIndex < FS_BTN_COPY_FILE_1) {
|
|
this->buttonIndex = FS_BTN_COPY_QUIT;
|
|
}
|
|
} else {
|
|
this->buttonIndex++;
|
|
|
|
if (this->buttonIndex > FS_BTN_COPY_QUIT) {
|
|
this->buttonIndex = FS_BTN_COPY_FILE_1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this->buttonIndex != FS_BTN_COPY_QUIT) {
|
|
if (!Save_GetSaveMetaInfo(this->buttonIndex)->valid) {
|
|
this->warningLabel = FS_WARNING_FILE_EMPTY;
|
|
this->warningButtonIndex = this->buttonIndex;
|
|
this->emptyFileTextAlpha = 255;
|
|
} else {
|
|
this->warningLabel = FS_WARNING_NONE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Move the menu buttons into place for the copy destination selection and switch titles.
|
|
* Update function for `CM_SETUP_COPY_DEST_1`
|
|
*/
|
|
void FileChoose_SetupCopyDest1(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 yStep;
|
|
s16 i;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i] - D_8081248C[this->buttonIndex][i]) / this->actionTimer;
|
|
|
|
if (D_8081248C[this->buttonIndex][i] >= this->buttonYOffsets[i]) {
|
|
this->buttonYOffsets[i] += yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
}
|
|
}
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->nameBoxAlpha[this->buttonIndex] -= 25;
|
|
|
|
this->actionTimer--;
|
|
if (this->actionTimer == 0) {
|
|
this->buttonYOffsets[this->buttonIndex] = D_8081248C[this->buttonIndex][this->buttonIndex];
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->actionTimer = 8;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show the file info of the file selected to copy from.
|
|
* Update function for `CM_SETUP_COPY_DEST_2`
|
|
*/
|
|
void FileChoose_SetupCopyDest2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->nameBoxAlpha[this->buttonIndex] -= 25;
|
|
this->fileInfoAlpha[this->buttonIndex] += 25;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->nameBoxAlpha[this->buttonIndex] = 0;
|
|
this->fileInfoAlpha[this->buttonIndex] = 200;
|
|
this->buttonIndex = FS_BTN_COPY_QUIT;
|
|
this->actionTimer = 8;
|
|
this->configMode = CM_SELECT_COPY_DEST;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow the player to select a slot to copy to or exit to the copy select screen.
|
|
* Update function for `CM_SELECT_COPY_DEST`
|
|
*/
|
|
void FileChoose_SelectCopyDest(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
bool dpad = CVar_GetS32("gDpadPauseName", 0);
|
|
|
|
if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
|
|
CHECK_BTN_ALL(input->press.button, BTN_B)) {
|
|
this->buttonIndex = this->selectedFileIndex;
|
|
this->nextTitleLabel = FS_TITLE_COPY_FROM;
|
|
this->actionTimer = 8;
|
|
this->configMode = CM_EXIT_TO_COPY_SOURCE_1;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CLOSE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
|
|
if (!Save_GetSaveMetaInfo(this->buttonIndex)->valid) {
|
|
this->copyDestFileIndex = this->buttonIndex;
|
|
this->nextTitleLabel = FS_TITLE_COPY_CONFIRM;
|
|
this->actionTimer = 8;
|
|
this->configMode = CM_SETUP_COPY_CONFIRM_1;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
} else {
|
|
|
|
if ((ABS(this->stickRelY) >= 30) || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DDOWN | BTN_DUP))) {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CURSOR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
|
|
if ((this->stickRelY >= 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DUP))) {
|
|
this->buttonIndex--;
|
|
|
|
if ((this->buttonIndex == this->selectedFileIndex)) {
|
|
this->buttonIndex--;
|
|
|
|
if (this->buttonIndex < FS_BTN_COPY_FILE_1) {
|
|
this->buttonIndex = FS_BTN_COPY_QUIT;
|
|
}
|
|
} else {
|
|
if (this->buttonIndex < FS_BTN_COPY_FILE_1) {
|
|
this->buttonIndex = FS_BTN_COPY_QUIT;
|
|
}
|
|
}
|
|
} else {
|
|
this->buttonIndex++;
|
|
|
|
if (this->buttonIndex > FS_BTN_COPY_QUIT) {
|
|
this->buttonIndex = FS_BTN_COPY_FILE_1;
|
|
}
|
|
|
|
if (this->buttonIndex == this->selectedFileIndex) {
|
|
this->buttonIndex++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this->buttonIndex != FS_BTN_COPY_QUIT) {
|
|
if (Save_GetSaveMetaInfo(this->buttonIndex)->valid) {
|
|
this->warningLabel = FS_WARNING_FILE_IN_USE;
|
|
this->warningButtonIndex = this->buttonIndex;
|
|
this->emptyFileTextAlpha = 255;
|
|
} else {
|
|
this->warningLabel = FS_WARNING_NONE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fade out file info, bring back the name box, and get ready to return to copy source screen.
|
|
* Update function for `CM_EXIT_TO_COPY_SOURCE_1`
|
|
*/
|
|
void FileChoose_ExitToCopySource1(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->fileInfoAlpha[this->buttonIndex] -= 25;
|
|
this->nameBoxAlpha[this->buttonIndex] += 25;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->nextTitleLabel = FS_TITLE_COPY_FROM;
|
|
this->nameBoxAlpha[this->buttonIndex] = 200;
|
|
this->fileInfoAlpha[this->buttonIndex] = 0;
|
|
this->actionTimer = 8;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Move the buttons back into place and return to copy source select.
|
|
* Update function for `CM_EXIT_TO_COPY_SOURCE_2`
|
|
*/
|
|
void FileChoose_ExitToCopySource2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->buttonIndex = 3;
|
|
this->configMode = CM_SELECT_COPY_SOURCE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rearrange buttons on the screen to prepare for copy confirmation.
|
|
* Update function for `CM_SETUP_COPY_CONFIRM_1`
|
|
*/
|
|
void FileChoose_SetupCopyConfirm1(GameState* thisx) {
|
|
static s16 D_808124A4[] = { -56, -40, -24, 0 };
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) {
|
|
this->fileButtonAlpha[i] -= 25;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->connectorAlpha[i] -= 31;
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
}
|
|
} else {
|
|
if (this->copyDestFileIndex == i) {
|
|
yStep = ABS(this->buttonYOffsets[i] - D_808124A4[i]) / this->actionTimer;
|
|
this->buttonYOffsets[i] += yStep;
|
|
|
|
if (this->buttonYOffsets[i] >= D_808124A4[i]) {
|
|
this->buttonYOffsets[i] = D_808124A4[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->actionTimer = 8;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fade in the 'Yes' button before allowing the player to decide.
|
|
* Update function for `CM_SETUP_COPY_CONFIRM_2`
|
|
*/
|
|
void FileChoose_SetupCopyConfirm2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 25;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->configMode = CM_COPY_CONFIRM;
|
|
this->buttonIndex = FS_BTN_CONFIRM_QUIT;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow the player to confirm the copy, or quit back to the destination select.
|
|
* If yes is selected, the actual copy occurs in this function before moving on to the animation.
|
|
* Update function for `CM_COPY_CONFIRM`
|
|
*/
|
|
void FileChoose_CopyConfirm(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
u16 dayTime;
|
|
bool dpad = CVar_GetS32("gDpadPauseName", 0);
|
|
|
|
if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
|
|
CHECK_BTN_ALL(input->press.button, BTN_B)) {
|
|
this->actionTimer = 8;
|
|
this->nextTitleLabel = FS_TITLE_COPY_TO;
|
|
this->configMode = CM_RETURN_TO_COPY_DEST;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CLOSE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
|
|
dayTime = gSaveContext.dayTime;
|
|
Save_CopyFile(this->selectedFileIndex, this->copyDestFileIndex);
|
|
gSaveContext.dayTime = dayTime;
|
|
this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex] = 0;
|
|
this->nextTitleLabel = FS_TITLE_COPY_COMPLETE;
|
|
this->actionTimer = 8;
|
|
this->configMode = CM_COPY_ANIM_1;
|
|
func_800AA000(300.0f, 0xB4, 0x14, 0x64);
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else if ((ABS(this->stickRelY) >= 30) || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DDOWN | BTN_DUP))) {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CURSOR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
this->buttonIndex ^= 1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Move buttons back in place and return to copy destination select.
|
|
* Update function for `CM_RETURN_TO_COPY_DEST`
|
|
*/
|
|
void FileChoose_ReturnToCopyDest(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 25;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) {
|
|
this->fileButtonAlpha[i] += 25;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
this->connectorAlpha[i] += 31;
|
|
}
|
|
}
|
|
|
|
yStep = ABS(this->buttonYOffsets[i] - D_8081248C[this->selectedFileIndex][i]) / this->actionTimer;
|
|
|
|
if (D_8081248C[this->selectedFileIndex][i] >= this->buttonYOffsets[i]) {
|
|
this->buttonYOffsets[i] += yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
}
|
|
}
|
|
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->actionTimer = 8;
|
|
this->buttonIndex = FS_BTN_COPY_QUIT;
|
|
this->configMode = CM_SELECT_COPY_DEST;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Hide title
|
|
* Update function for `CM_COPY_ANIM_1`
|
|
*/
|
|
void FileChoose_CopyAnim1(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 25;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->titleAlpha[0] = 0;
|
|
this->actionTimer = 8;
|
|
this->configMode++;
|
|
osSyncPrintf("connect_alpha=%d decision_alpha[%d]=%d\n", this->connectorAlpha[this->copyDestFileIndex],
|
|
this->copyDestFileIndex, this->fileInfoAlpha[this->copyDestFileIndex]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Move a copy of the file window down and fade in the file info.
|
|
* Update function for `CM_COPY_ANIM_2`
|
|
*/
|
|
void FileChoose_CopyAnim2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 yStep;
|
|
|
|
this->fileInfoAlpha[this->copyDestFileIndex] += 25;
|
|
this->nameAlpha[this->copyDestFileIndex] += 25;
|
|
this->titleAlpha[1] += 31;
|
|
yStep = ABS(this->fileNamesY[this->copyDestFileIndex] + 56) / this->actionTimer;
|
|
this->fileNamesY[this->copyDestFileIndex] -= yStep;
|
|
|
|
if (this->fileNamesY[this->copyDestFileIndex] <= -56) {
|
|
this->fileNamesY[this->copyDestFileIndex] = -56;
|
|
}
|
|
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->actionTimer = 90;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Play sound to indicate that the copy has completed. Wait for a timer or for
|
|
* the player to press a button before moving on.
|
|
* Update function for `CM_COPY_ANIM_3`
|
|
*/
|
|
void FileChoose_CopyAnim3(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
|
|
if (this->actionTimer == 75) {
|
|
this->connectorAlpha[this->copyDestFileIndex] = 255;
|
|
Audio_PlaySoundGeneral(NA_SE_EV_DIAMOND_SWITCH, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer < 74) {
|
|
if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (this->actionTimer == 0)) {
|
|
this->actionTimer = 8;
|
|
this->nextTitleLabel = FS_TITLE_SELECT_FILE;
|
|
this->configMode++;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fade out the info boxes for both files and bring in their name boxes. Fade out title.
|
|
* Update function for `CM_COPY_ANIM_4`
|
|
*/
|
|
void FileChoose_CopyAnim4(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->fileInfoAlpha[this->selectedFileIndex] -= 25;
|
|
this->fileInfoAlpha[this->copyDestFileIndex] -= 25;
|
|
this->nameBoxAlpha[this->selectedFileIndex] += 25;
|
|
this->nameBoxAlpha[this->copyDestFileIndex] += 25;
|
|
this->titleAlpha[0] -= 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->fileNamesY[this->copyDestFileIndex] = this->buttonYOffsets[3] = 0;
|
|
this->actionTimer = 8;
|
|
this->titleAlpha[0] = 0;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Restore all buttons and labels back to their original place and go back to the main menu.
|
|
* Update function for `CM_COPY_ANIM_5`
|
|
*/
|
|
void FileChoose_CopyAnim5(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= 0) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
if (i != this->buttonIndex) {
|
|
this->fileButtonAlpha[i] += 25;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
this->connectorAlpha[i] += 31;
|
|
}
|
|
}
|
|
}
|
|
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 25;
|
|
this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 25;
|
|
this->optionButtonAlpha += 25;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
for (i = 0; i < 3; i++) {
|
|
this->connectorAlpha[i] = 0;
|
|
this->fileButtonAlpha[i] = 200;
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->connectorAlpha[i];
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->connectorAlpha[i] = 255;
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
}
|
|
}
|
|
|
|
this->fileNamesY[this->selectedFileIndex] = 0;
|
|
this->highlightColor[3] = 70;
|
|
this->highlightPulseDir = 1;
|
|
XREG(35) = XREG(36);
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->configMode = CM_MAIN_MENU;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Exit from the copy source screen to the main menu. Return all buttons and labels to their original place.
|
|
* Update function for `CM_COPY_RETURN_MAIN`
|
|
*/
|
|
void FileChoose_ExitCopyToMain(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= 0) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 25;
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->configMode = CM_MAIN_MENU;
|
|
}
|
|
|
|
this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY];
|
|
}
|
|
|
|
/**
|
|
* Move buttons into place for the erase select screen and fade in the proper labels.
|
|
* Update function for `CM_SETUP_ERASE_SELECT`
|
|
*/
|
|
void FileChoose_SetupEraseSelect(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 50;
|
|
this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 50;
|
|
this->optionButtonAlpha -= 50;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 25;
|
|
|
|
if (this->actionButtonAlpha[FS_BTN_ACTION_COPY] <= 0) {
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
|
|
this->optionButtonAlpha = 0;
|
|
}
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->highlightColor[3] = 70;
|
|
this->highlightPulseDir = 1;
|
|
XREG(35) = XREG(36);
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
|
|
this->optionButtonAlpha = 0;
|
|
this->confirmButtonAlpha[1] = 200;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->buttonIndex = FS_BTN_ERASE_QUIT;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow the player to select a file to erase or exit back to the main menu.
|
|
* Update function for `CM_ERASE_SELECT`
|
|
*/
|
|
void FileChoose_EraseSelect(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
bool dpad = CVar_GetS32("gDpadPauseName", 0);
|
|
|
|
if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
|
|
CHECK_BTN_ALL(input->press.button, BTN_B)) {
|
|
this->buttonIndex = FS_BTN_MAIN_ERASE;
|
|
this->actionTimer = 8;
|
|
this->nextTitleLabel = FS_TITLE_SELECT_FILE;
|
|
this->configMode = CM_EXIT_ERASE_TO_MAIN;
|
|
this->warningLabel = FS_WARNING_NONE;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CLOSE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
|
|
if (Save_GetSaveMetaInfo(this->buttonIndex)->valid) {
|
|
this->actionTimer = 8;
|
|
this->selectedFileIndex = this->buttonIndex;
|
|
this->configMode = CM_SETUP_ERASE_CONFIRM_1;
|
|
this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
} else {
|
|
if ((ABS(this->stickRelY) >= 30) || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DDOWN | BTN_DUP))) {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CURSOR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
|
|
if ((this->stickRelY >= 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DUP))) {
|
|
this->buttonIndex--;
|
|
if (this->buttonIndex < FS_BTN_ERASE_FILE_1) {
|
|
this->buttonIndex = FS_BTN_ERASE_QUIT;
|
|
}
|
|
} else {
|
|
this->buttonIndex++;
|
|
if (this->buttonIndex > FS_BTN_ERASE_QUIT) {
|
|
this->buttonIndex = FS_BTN_ERASE_FILE_1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this->buttonIndex != FS_BTN_ERASE_QUIT) {
|
|
if (!Save_GetSaveMetaInfo(this->buttonIndex)->valid) {
|
|
this->warningLabel = FS_WARNING_FILE_EMPTY;
|
|
this->warningButtonIndex = this->buttonIndex;
|
|
this->emptyFileTextAlpha = 255;
|
|
} else {
|
|
this->warningLabel = FS_WARNING_NONE;
|
|
}
|
|
} else {
|
|
this->warningLabel = FS_WARNING_NONE;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ...
|
|
* Update function for `CM_SETUP_ERASE_CONFIRM_1`
|
|
*/
|
|
void FileChoose_SetupEraseConfirm1(GameState* thisx) {
|
|
static s16 D_808124AC[] = { 0, 16, 32 };
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
if (i != this->buttonIndex) {
|
|
this->fileButtonAlpha[i] -= 25;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->connectorAlpha[i] -= 31;
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
}
|
|
} else {
|
|
this->nameBoxAlpha[i] -= 25;
|
|
}
|
|
}
|
|
this->titleAlpha[0] -= 15;
|
|
this->titleAlpha[1] += 15;
|
|
|
|
yStep = ABS(this->buttonYOffsets[this->buttonIndex] - D_808124AC[this->buttonIndex]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[this->buttonIndex] >= D_808124AC[this->buttonIndex]) {
|
|
this->buttonYOffsets[this->buttonIndex] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[this->buttonIndex] += yStep;
|
|
}
|
|
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
for (i = 0; i < 3; i++) {
|
|
if (i != this->buttonIndex) {
|
|
this->fileButtonAlpha[i] = 0;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->connectorAlpha[i] = 0;
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0;
|
|
}
|
|
} else {
|
|
this->nameBoxAlpha[i] = 0;
|
|
}
|
|
}
|
|
|
|
this->buttonYOffsets[this->buttonIndex] = D_808124AC[this->buttonIndex];
|
|
this->actionTimer = 8;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show the file info of the file selected to erase.
|
|
* Update function for `CM_SETUP_ERASE_CONFIRM_2`
|
|
*/
|
|
void FileChoose_SetupEraseConfirm2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 25;
|
|
this->titleAlpha[0] -= 15;
|
|
this->titleAlpha[1] += 15;
|
|
this->fileInfoAlpha[this->buttonIndex] += 25;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->actionTimer = 8;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->fileInfoAlpha[this->buttonIndex] = this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = 200;
|
|
this->buttonIndex = FS_BTN_ERASE_FILE_2;
|
|
this->configMode = CM_ERASE_CONFIRM;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow the player to confirm their chioce to erase or return back to erase select.
|
|
* Update function for `CM_ERASE_CONFIRM`
|
|
*/
|
|
void FileChoose_EraseConfirm(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
bool dpad = CVar_GetS32("gDpadPauseName", 0);
|
|
|
|
if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
|
|
CHECK_BTN_ALL(input->press.button, BTN_B)) {
|
|
this->buttonIndex = this->selectedFileIndex;
|
|
this->nextTitleLabel = FS_TITLE_ERASE_FILE;
|
|
this->configMode = CM_EXIT_TO_ERASE_SELECT_1;
|
|
this->actionTimer = 8;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CLOSE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
} else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
|
|
Save_GetSaveMetaInfo(this->selectedFileIndex)->n64ddFlag = this->connectorAlpha[this->selectedFileIndex] = 0;
|
|
Audio_PlaySoundGeneral(NA_SE_EV_DIAMOND_SWITCH, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
this->actionTimer = 8;
|
|
this->configMode = CM_ERASE_ANIM_1;
|
|
this->nextTitleLabel = FS_TITLE_ERASE_COMPLETE;
|
|
func_800AA000(200.0f, 0xFF, 0x14, 0x96);
|
|
sEraseDelayTimer = 15;
|
|
} else if ((ABS(this->stickRelY) >= 30) || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DDOWN | BTN_DUP))) {
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CURSOR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
this->buttonIndex ^= 1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fade out file info, bring back the name box, and get ready to return to erase select screen.
|
|
* Update function for `CM_EXIT_TO_ERASE_SELECT_1`
|
|
*/
|
|
void FileChoose_ExitToEraseSelect1(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
this->fileInfoAlpha[this->buttonIndex] -= 25;
|
|
this->nameBoxAlpha[this->buttonIndex] += 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 25;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->actionTimer = 8;
|
|
this->fileInfoAlpha[this->buttonIndex] = 0;
|
|
this->configMode++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Move the buttons back into place and return to erase select.
|
|
* Update function for `CM_EXIT_TO_ERASE_SELECT_2`
|
|
*/
|
|
void FileChoose_ExitToEraseSelect2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
yStep = ABS(this->buttonYOffsets[this->buttonIndex] - sChooseFileYOffsets[this->buttonIndex]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[this->buttonIndex] >= sChooseFileYOffsets[this->buttonIndex]) {
|
|
this->buttonYOffsets[this->buttonIndex] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[this->buttonIndex] += yStep;
|
|
}
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
if (i != this->buttonIndex) {
|
|
this->fileButtonAlpha[i] += 25;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
this->connectorAlpha[i] += 31;
|
|
}
|
|
}
|
|
}
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->buttonYOffsets[this->buttonIndex] = sChooseFileYOffsets[this->buttonIndex];
|
|
this->actionTimer = 8;
|
|
this->buttonIndex = FS_BTN_ERASE_QUIT;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->configMode = CM_ERASE_SELECT;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Wait for an initial delay, then start fading out the selected file.
|
|
* The actual file deletion occurs in this function
|
|
* Update function for `CM_ERASE_ANIM_1`
|
|
*/
|
|
void FileChoose_EraseAnim1(GameState* thisx) {
|
|
static s16 D_80813800;
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
|
|
if (sEraseDelayTimer == 0) {
|
|
if (this->actionTimer == 8) {
|
|
D_80813800 = 1;
|
|
}
|
|
|
|
if (this->actionTimer != 0) {
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->fileInfoAlpha[this->selectedFileIndex] -= 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 25;
|
|
}
|
|
|
|
this->fileNamesY[this->selectedFileIndex] -= D_80813800;
|
|
this->actionTimer--;
|
|
D_80813800 += 2;
|
|
|
|
if (this->actionTimer == 0) {
|
|
Save_DeleteFile(this->selectedFileIndex);
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = this->connectorAlpha[this->selectedFileIndex] = 0;
|
|
|
|
// probably a fake match, there should be a better chained assignment
|
|
this->confirmButtonAlpha[0] = this->confirmButtonAlpha[1] = 0;
|
|
if (1) {}
|
|
this->fileInfoAlpha[this->selectedFileIndex] = this->nameBoxAlpha[this->selectedFileIndex] =
|
|
this->confirmButtonAlpha[1];
|
|
|
|
this->configMode++;
|
|
this->actionTimer = 90;
|
|
}
|
|
} else {
|
|
sEraseDelayTimer--;
|
|
|
|
if (sEraseDelayTimer == 0) {
|
|
Audio_PlaySoundGeneral(NA_SE_OC_ABYSS, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Wait for a delay timer or for the palyer to press a button before returning to the main menu.
|
|
* Update function for `CM_ERASE_ANIM_2`
|
|
*/
|
|
void FileChoose_EraseAnim2(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
Input* input = &this->state.input[0];
|
|
|
|
if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (--this->actionTimer == 0)) {
|
|
this->buttonYOffsets[3] = 0;
|
|
this->actionTimer = 8;
|
|
this->nextTitleLabel = FS_TITLE_SELECT_FILE;
|
|
this->configMode++;
|
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_CLOSE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Exit from the erase animation to the main menu. Return all buttons and labels to their original place.
|
|
* Update function for `CM_ERASE_ANIM_3`
|
|
*/
|
|
void FileChoose_EraseAnim3(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= 0) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
this->fileButtonAlpha[i] += 25;
|
|
|
|
if (Save_GetSaveMetaInfo(i)->valid) {
|
|
this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
|
|
this->connectorAlpha[i] += 31;
|
|
}
|
|
}
|
|
|
|
if (this->fileButtonAlpha[this->selectedFileIndex] >= 200) {
|
|
this->fileButtonAlpha[this->selectedFileIndex] = 200;
|
|
}
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->fileNamesY[this->selectedFileIndex] = 0;
|
|
this->highlightColor[3] = 70;
|
|
this->highlightPulseDir = 1;
|
|
XREG(35) = XREG(36);
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200;
|
|
this->confirmButtonAlpha[0] = this->confirmButtonAlpha[1] = 0;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->configMode = CM_MAIN_MENU;
|
|
}
|
|
|
|
this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY];
|
|
}
|
|
|
|
/**
|
|
* Exit from the erase select screen to the main menu. Return all buttons and labels to their original place.
|
|
* Update function for `CM_EXIT_ERASE_TO_MAIN`
|
|
*/
|
|
void FileChoose_ExitEraseToMain(GameState* thisx) {
|
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
|
s16 i;
|
|
s16 yStep;
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
yStep = ABS(this->buttonYOffsets[i]) / this->actionTimer;
|
|
|
|
if (this->buttonYOffsets[i] >= 0) {
|
|
this->buttonYOffsets[i] -= yStep;
|
|
} else {
|
|
this->buttonYOffsets[i] += yStep;
|
|
}
|
|
}
|
|
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 25;
|
|
this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 25;
|
|
this->optionButtonAlpha += 25;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 50;
|
|
|
|
if (this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] <= 0) {
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
|
|
}
|
|
|
|
this->titleAlpha[0] -= 31;
|
|
this->titleAlpha[1] += 31;
|
|
this->actionTimer--;
|
|
|
|
if (this->actionTimer == 0) {
|
|
this->highlightColor[3] = 70;
|
|
this->highlightPulseDir = 1;
|
|
XREG(35) = XREG(36);
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200;
|
|
this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
|
|
this->titleLabel = this->nextTitleLabel;
|
|
this->titleAlpha[0] = 255;
|
|
this->titleAlpha[1] = 0;
|
|
this->configMode = CM_MAIN_MENU;
|
|
}
|
|
|
|
this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
|
|
this->actionButtonAlpha[FS_BTN_ACTION_COPY];
|
|
}
|