Finish save_failed_screen
This commit is contained in:
@@ -1,312 +0,0 @@
|
|||||||
.include "asm/macros.inc"
|
|
||||||
.include "constants/constants.inc"
|
|
||||||
|
|
||||||
.syntax unified
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
thumb_func_start sub_80F5350
|
|
||||||
sub_80F5350: @ 80F5350
|
|
||||||
push {r4-r7,lr}
|
|
||||||
mov r7, r10
|
|
||||||
mov r6, r9
|
|
||||||
mov r5, r8
|
|
||||||
push {r5-r7}
|
|
||||||
ldr r4, [sp, 0x20]
|
|
||||||
ldr r5, [sp, 0x24]
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r6, r0, 16
|
|
||||||
lsls r1, 24
|
|
||||||
lsrs r1, 24
|
|
||||||
mov r9, r1
|
|
||||||
lsls r2, 24
|
|
||||||
lsls r3, 24
|
|
||||||
lsrs r3, 24
|
|
||||||
mov r8, r3
|
|
||||||
lsls r4, 24
|
|
||||||
lsrs r4, 24
|
|
||||||
lsls r5, 16
|
|
||||||
lsrs r7, r5, 16
|
|
||||||
lsrs r0, r2, 24
|
|
||||||
adds r2, r0, r4
|
|
||||||
cmp r0, r2
|
|
||||||
bge _080F53B6
|
|
||||||
mov r12, r2
|
|
||||||
ldr r1, _080F53C8 @ =gDecompressionBuffer + 0x3800
|
|
||||||
mov r10, r1
|
|
||||||
_080F5386:
|
|
||||||
mov r4, r9
|
|
||||||
mov r2, r8
|
|
||||||
adds r1, r4, r2
|
|
||||||
adds r3, r0, 0x1
|
|
||||||
cmp r4, r1
|
|
||||||
bge _080F53AE
|
|
||||||
lsls r2, r0, 6
|
|
||||||
mov r5, r10
|
|
||||||
_080F5396:
|
|
||||||
lsls r0, r4, 1
|
|
||||||
adds r0, r2, r0
|
|
||||||
adds r0, r5
|
|
||||||
strh r6, [r0]
|
|
||||||
adds r0, r6, r7
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r6, r0, 16
|
|
||||||
adds r0, r4, 0x1
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r4, r0, 16
|
|
||||||
cmp r4, r1
|
|
||||||
blt _080F5396
|
|
||||||
_080F53AE:
|
|
||||||
lsls r0, r3, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
cmp r0, r12
|
|
||||||
blt _080F5386
|
|
||||||
_080F53B6:
|
|
||||||
bl sub_80F5318
|
|
||||||
pop {r3-r5}
|
|
||||||
mov r8, r3
|
|
||||||
mov r9, r4
|
|
||||||
mov r10, r5
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_080F53C8: .4byte gDecompressionBuffer + 0x3800
|
|
||||||
thumb_func_end sub_80F5350
|
|
||||||
|
|
||||||
thumb_func_start sub_80F53CC
|
|
||||||
sub_80F53CC: @ 80F53CC
|
|
||||||
push {lr}
|
|
||||||
sub sp, 0x8
|
|
||||||
movs r0, 0xA
|
|
||||||
str r0, [sp]
|
|
||||||
movs r0, 0x1
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
movs r1, 0x1
|
|
||||||
movs r2, 0x5
|
|
||||||
movs r3, 0x1C
|
|
||||||
bl sub_80F5350
|
|
||||||
add sp, 0x8
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end sub_80F53CC
|
|
||||||
|
|
||||||
thumb_func_start sub_80F53E8
|
|
||||||
sub_80F53E8: @ 80F53E8
|
|
||||||
push {lr}
|
|
||||||
sub sp, 0x8
|
|
||||||
movs r0, 0x14
|
|
||||||
str r0, [sp]
|
|
||||||
movs r0, 0
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
movs r1, 0
|
|
||||||
movs r2, 0
|
|
||||||
movs r3, 0x1E
|
|
||||||
bl sub_80F5350
|
|
||||||
add sp, 0x8
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end sub_80F53E8
|
|
||||||
|
|
||||||
thumb_func_start sub_80F5404
|
|
||||||
sub_80F5404: @ 80F5404
|
|
||||||
push {r4,r5,lr}
|
|
||||||
sub sp, 0x10
|
|
||||||
adds r5, r0, 0
|
|
||||||
movs r0, 0x2
|
|
||||||
movs r1, 0x1
|
|
||||||
movs r2, 0x3
|
|
||||||
bl GenerateFontHalfRowLookupTable
|
|
||||||
add r1, sp, 0xC
|
|
||||||
ldr r2, _080F544C @ =0x00001111
|
|
||||||
adds r0, r2, 0
|
|
||||||
strh r0, [r1]
|
|
||||||
ldr r4, _080F5450 @ =gDecompressionBuffer + 0x020
|
|
||||||
ldr r2, _080F5454 @ =0x01001180
|
|
||||||
adds r0, r1, 0
|
|
||||||
adds r1, r4, 0
|
|
||||||
bl CpuSet
|
|
||||||
movs r0, 0x2
|
|
||||||
str r0, [sp]
|
|
||||||
movs r0, 0x1C
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
movs r0, 0xA
|
|
||||||
str r0, [sp, 0x8]
|
|
||||||
movs r0, 0x2
|
|
||||||
adds r1, r4, 0
|
|
||||||
adds r2, r5, 0
|
|
||||||
movs r3, 0x2
|
|
||||||
bl HelpSystemRenderText
|
|
||||||
bl sub_80F5334
|
|
||||||
add sp, 0x10
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_080F544C: .4byte 0x00001111
|
|
||||||
_080F5450: .4byte gDecompressionBuffer + 0x020
|
|
||||||
_080F5454: .4byte 0x01001180
|
|
||||||
thumb_func_end sub_80F5404
|
|
||||||
|
|
||||||
thumb_func_start sub_80F5458
|
|
||||||
sub_80F5458: @ 80F5458
|
|
||||||
push {r4,r5,lr}
|
|
||||||
movs r5, 0
|
|
||||||
ldr r0, _080F5490 @ =gDamagedSaveSectors
|
|
||||||
ldr r1, [r0]
|
|
||||||
adds r4, r0, 0
|
|
||||||
cmp r1, 0
|
|
||||||
beq _080F548C
|
|
||||||
_080F5466:
|
|
||||||
ldr r0, [r4]
|
|
||||||
bl sub_80F5540
|
|
||||||
cmp r0, 0
|
|
||||||
bne _080F5498
|
|
||||||
ldr r0, _080F5494 @ =gUnknown_203AB4C
|
|
||||||
ldrb r0, [r0]
|
|
||||||
bl HandleSavingData
|
|
||||||
adds r5, 0x1
|
|
||||||
ldr r0, [r4]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _080F548C
|
|
||||||
ldr r4, _080F5490 @ =gDamagedSaveSectors
|
|
||||||
cmp r5, 0x2
|
|
||||||
ble _080F5466
|
|
||||||
ldr r0, [r4]
|
|
||||||
cmp r0, 0
|
|
||||||
bne _080F5498
|
|
||||||
_080F548C:
|
|
||||||
movs r0, 0x1
|
|
||||||
b _080F549A
|
|
||||||
.align 2, 0
|
|
||||||
_080F5490: .4byte gDamagedSaveSectors
|
|
||||||
_080F5494: .4byte gUnknown_203AB4C
|
|
||||||
_080F5498:
|
|
||||||
movs r0, 0
|
|
||||||
_080F549A:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
thumb_func_end sub_80F5458
|
|
||||||
|
|
||||||
thumb_func_start VerifySectorWipe
|
|
||||||
VerifySectorWipe: @ 80F54A0
|
|
||||||
push {r4,lr}
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
ldr r4, _080F54C4 @ =gSaveDataBuffer
|
|
||||||
movs r3, 0x80
|
|
||||||
lsls r3, 5
|
|
||||||
movs r1, 0
|
|
||||||
adds r2, r4, 0
|
|
||||||
bl ReadFlash
|
|
||||||
movs r1, 0
|
|
||||||
ldr r2, _080F54C8 @ =0x000003ff
|
|
||||||
_080F54B8:
|
|
||||||
ldr r0, [r4]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _080F54CC
|
|
||||||
movs r0, 0x1
|
|
||||||
b _080F54DA
|
|
||||||
.align 2, 0
|
|
||||||
_080F54C4: .4byte gSaveDataBuffer
|
|
||||||
_080F54C8: .4byte 0x000003ff
|
|
||||||
_080F54CC:
|
|
||||||
adds r0, r1, 0x1
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r1, r0, 16
|
|
||||||
adds r4, 0x4
|
|
||||||
cmp r1, r2
|
|
||||||
bls _080F54B8
|
|
||||||
movs r0, 0
|
|
||||||
_080F54DA:
|
|
||||||
pop {r4}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
thumb_func_end VerifySectorWipe
|
|
||||||
|
|
||||||
thumb_func_start WipeSector
|
|
||||||
WipeSector: @ 80F54E0
|
|
||||||
push {r4-r7,lr}
|
|
||||||
mov r7, r9
|
|
||||||
mov r6, r8
|
|
||||||
push {r6,r7}
|
|
||||||
adds r7, r0, 0
|
|
||||||
movs r0, 0
|
|
||||||
lsls r6, r7, 16
|
|
||||||
ldr r1, _080F5538 @ =ProgramFlashByte
|
|
||||||
mov r9, r1
|
|
||||||
ldr r1, _080F553C @ =0x00000fff
|
|
||||||
mov r8, r1
|
|
||||||
_080F54F6:
|
|
||||||
movs r4, 0
|
|
||||||
adds r5, r0, 0x1
|
|
||||||
_080F54FA:
|
|
||||||
mov r0, r9
|
|
||||||
ldr r3, [r0]
|
|
||||||
lsrs r0, r6, 16
|
|
||||||
adds r1, r4, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl _call_via_r3
|
|
||||||
adds r0, r4, 0x1
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r4, r0, 16
|
|
||||||
cmp r4, r8
|
|
||||||
bls _080F54FA
|
|
||||||
adds r0, r7, 0
|
|
||||||
bl VerifySectorWipe
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r1, r0, 16
|
|
||||||
lsls r0, r5, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
cmp r1, 0
|
|
||||||
beq _080F5528
|
|
||||||
cmp r0, 0x81
|
|
||||||
bls _080F54F6
|
|
||||||
_080F5528:
|
|
||||||
adds r0, r1, 0
|
|
||||||
pop {r3,r4}
|
|
||||||
mov r8, r3
|
|
||||||
mov r9, r4
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
.align 2, 0
|
|
||||||
_080F5538: .4byte ProgramFlashByte
|
|
||||||
_080F553C: .4byte 0x00000fff
|
|
||||||
thumb_func_end WipeSector
|
|
||||||
|
|
||||||
thumb_func_start sub_80F5540
|
|
||||||
sub_80F5540: @ 80F5540
|
|
||||||
push {r4-r6,lr}
|
|
||||||
adds r5, r0, 0
|
|
||||||
movs r6, 0
|
|
||||||
_080F5546:
|
|
||||||
movs r4, 0x1
|
|
||||||
lsls r4, r6
|
|
||||||
adds r0, r5, 0
|
|
||||||
ands r0, r4
|
|
||||||
cmp r0, 0
|
|
||||||
beq _080F555E
|
|
||||||
adds r0, r6, 0
|
|
||||||
bl WipeSector
|
|
||||||
cmp r0, 0
|
|
||||||
bne _080F555E
|
|
||||||
bics r5, r4
|
|
||||||
_080F555E:
|
|
||||||
adds r6, 0x1
|
|
||||||
cmp r6, 0x1F
|
|
||||||
ble _080F5546
|
|
||||||
cmp r5, 0
|
|
||||||
beq _080F556C
|
|
||||||
movs r0, 0x1
|
|
||||||
b _080F556E
|
|
||||||
_080F556C:
|
|
||||||
movs r0, 0
|
|
||||||
_080F556E:
|
|
||||||
pop {r4-r6}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
thumb_func_end sub_80F5540
|
|
||||||
|
|
||||||
.align 2, 0 @ Don't pad with nop.
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
sIsInSaveFailedScreen
|
||||||
@@ -5,6 +5,3 @@
|
|||||||
.include "constants/constants.inc"
|
.include "constants/constants.inc"
|
||||||
.section .rodata
|
.section .rodata
|
||||||
.align 2
|
.align 2
|
||||||
|
|
||||||
gUnknown_841EE44:: @ 841EE44
|
|
||||||
.incbin "graphics/interface/save_failed_screen.gbapal"
|
|
||||||
|
|||||||
+3
-3
@@ -2465,14 +2465,14 @@ gUnknown_8418C62:: @ 0x8418C62
|
|||||||
gUnknown_8418C6F:: @ 0x8418C6F
|
gUnknown_8418C6F:: @ 0x8418C6F
|
||||||
.string "もう これいじょう たべない みたい‥$"
|
.string "もう これいじょう たべない みたい‥$"
|
||||||
|
|
||||||
gUnknown_8418C83:: @ 8418C83
|
gText_SaveFailedScreen_CheckingBackupMemory:: @ 8418C83
|
||||||
.string "Save failed.\n"
|
.string "Save failed.\n"
|
||||||
.string "Checking the backup memory‥\n"
|
.string "Checking the backup memory‥\n"
|
||||||
.string "Please wait.\n"
|
.string "Please wait.\n"
|
||||||
.string "“Time required:\n"
|
.string "“Time required:\n"
|
||||||
.string "about 1 minute”$"
|
.string "about 1 minute”$"
|
||||||
|
|
||||||
gUnknown_8418CD9:: @ 8418CD9
|
gText_SaveFailedScreen_BackupMemoryDamaged:: @ 8418CD9
|
||||||
.string "The backup memory is damaged or\n"
|
.string "The backup memory is damaged or\n"
|
||||||
.string "the game's battery has run dry.\n"
|
.string "the game's battery has run dry.\n"
|
||||||
.string "The game can be played, but its\n"
|
.string "The game can be played, but its\n"
|
||||||
@@ -2493,7 +2493,7 @@ gUnknown_8418DC9:: @ 0x8418DC9
|
|||||||
.string "{COLOR RED}“このまま ぼうけんをつづけることは できません\n"
|
.string "{COLOR RED}“このまま ぼうけんをつづけることは できません\n"
|
||||||
.string "タイトルに もどります”$"
|
.string "タイトルに もどります”$"
|
||||||
|
|
||||||
gUnknown_8418E09:: @ 8418E09
|
gText_SaveFailedScreen_SaveCompleted:: @ 8418E09
|
||||||
.string "Save completed.\n"
|
.string "Save completed.\n"
|
||||||
.string "“Please press the A Button.”$"
|
.string "“Please press the A Button.”$"
|
||||||
|
|
||||||
|
|||||||
@@ -91,5 +91,6 @@ void PlaceListMenuCursor(void);
|
|||||||
bool8 MoveCursor(u8 by, u8 dirn);
|
bool8 MoveCursor(u8 by, u8 dirn);
|
||||||
void HelpSystem_BackupSomeVariable(void);
|
void HelpSystem_BackupSomeVariable(void);
|
||||||
void HelpSystem_RestoreSomeVariable(void);
|
void HelpSystem_RestoreSomeVariable(void);
|
||||||
|
void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height);
|
||||||
|
|
||||||
#endif //GUARD_HELP_SYSTEM_H
|
#endif //GUARD_HELP_SYSTEM_H
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define GUARD_SAVE_FAILED_SCREEN_H
|
#define GUARD_SAVE_FAILED_SCREEN_H
|
||||||
|
|
||||||
extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen
|
extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen
|
||||||
void sub_80F50F4(void);
|
void SetNotInSaveFailedScreen(void);
|
||||||
bool32 sub_80F5118(void);
|
bool32 RunSaveFailedScreen(void);
|
||||||
|
|
||||||
#endif //GUARD_SAVE_FAILED_SCREEN_H
|
#endif //GUARD_SAVE_FAILED_SCREEN_H
|
||||||
|
|||||||
+3
-3
@@ -1034,8 +1034,8 @@ extern const u8 gText_RegionMap_AreaDesc_PatternBush[];
|
|||||||
extern const u8 gText_RegionMap_AreaDesc_DottedHole[];
|
extern const u8 gText_RegionMap_AreaDesc_DottedHole[];
|
||||||
|
|
||||||
// save_failed_screen
|
// save_failed_screen
|
||||||
extern const u8 gUnknown_8418C83[];
|
extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[];
|
||||||
extern const u8 gUnknown_8418CD9[];
|
extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[];
|
||||||
extern const u8 gUnknown_8418E09[];
|
extern const u8 gText_SaveFailedScreen_SaveCompleted[];
|
||||||
|
|
||||||
#endif //GUARD_STRINGS_H
|
#endif //GUARD_STRINGS_H
|
||||||
|
|||||||
+1
-2
@@ -218,7 +218,6 @@ SECTIONS {
|
|||||||
src/credits.o(.text);
|
src/credits.o(.text);
|
||||||
src/diploma.o(.text);
|
src/diploma.o(.text);
|
||||||
src/save_failed_screen.o(.text);
|
src/save_failed_screen.o(.text);
|
||||||
asm/save_failed_screen.o(.text);
|
|
||||||
asm/clear_save_data_screen.o(.text);
|
asm/clear_save_data_screen.o(.text);
|
||||||
src/evolution_graphics.o(.text);
|
src/evolution_graphics.o(.text);
|
||||||
src/fldeff_teleport.o(.text);
|
src/fldeff_teleport.o(.text);
|
||||||
@@ -506,7 +505,7 @@ SECTIONS {
|
|||||||
src/credits.o(.rodata);
|
src/credits.o(.rodata);
|
||||||
src/diploma.o(.rodata);
|
src/diploma.o(.rodata);
|
||||||
data/strings.o(.rodata);
|
data/strings.o(.rodata);
|
||||||
data/save_failed_screen.o(.rodata);
|
src/save_failed_screen.o(.rodata);
|
||||||
data/clear_save_data_screen.o(.rodata);
|
data/clear_save_data_screen.o(.rodata);
|
||||||
src/evolution_graphics.o(.rodata);
|
src/evolution_graphics.o(.rodata);
|
||||||
src/new_menu_helpers.o(.rodata);
|
src/new_menu_helpers.o(.rodata);
|
||||||
|
|||||||
+2
-2
@@ -115,7 +115,7 @@ void AgbMain()
|
|||||||
gSoftResetDisabled = FALSE;
|
gSoftResetDisabled = FALSE;
|
||||||
gHelpSystemEnabled = FALSE;
|
gHelpSystemEnabled = FALSE;
|
||||||
|
|
||||||
sub_80F50F4();
|
SetNotInSaveFailedScreen();
|
||||||
|
|
||||||
AGBPrintInit();
|
AGBPrintInit();
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ static void InitMainCallbacks(void)
|
|||||||
|
|
||||||
static void CallCallbacks(void)
|
static void CallCallbacks(void)
|
||||||
{
|
{
|
||||||
if (!sub_80F5118() && !RunHelpSystemCallback())
|
if (!RunSaveFailedScreen() && !RunHelpSystemCallback())
|
||||||
{
|
{
|
||||||
if (gMain.callback1)
|
if (gMain.callback1)
|
||||||
gMain.callback1();
|
gMain.callback1();
|
||||||
|
|||||||
+144
-38
@@ -1,65 +1,70 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "decompress.h"
|
#include "decompress.h"
|
||||||
#include "dma3.h"
|
#include "dma3.h"
|
||||||
|
#include "gba/flash_internal.h"
|
||||||
#include "gpu_regs.h"
|
#include "gpu_regs.h"
|
||||||
#include "help_system.h"
|
#include "help_system.h"
|
||||||
#include "m4a.h"
|
#include "m4a.h"
|
||||||
#include "save.h"
|
#include "save.h"
|
||||||
#include "save_failed_screen.h"
|
#include "save_failed_screen.h"
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
|
#include "text.h"
|
||||||
|
|
||||||
bool32 gUnknown_3005430;
|
bool32 sIsInSaveFailedScreen;
|
||||||
EWRAM_DATA u16 gUnknown_203AB4C = SAVE_NORMAL;
|
|
||||||
EWRAM_DATA u8 gUnknown_203AB50 = 0;
|
|
||||||
|
|
||||||
void sub_80F52EC(void);
|
static EWRAM_DATA u16 sSaveType = SAVE_NORMAL;
|
||||||
void sub_80F53CC(void);
|
static EWRAM_DATA u16 unused_203AB4E = 0;
|
||||||
void sub_80F53E8(void);
|
static EWRAM_DATA u8 sSaveFailedScreenState = 0;
|
||||||
void sub_80F5404(const u8 *a0);
|
|
||||||
bool32 sub_80F5458(void);
|
|
||||||
|
|
||||||
extern const u16 gUnknown_841EE44[];
|
static void BlankPalettes(void);
|
||||||
|
static void UpdateMapBufferWithText(void);
|
||||||
|
static void ClearMapBuffer(void);
|
||||||
|
static void PrintTextOnSaveFailedScreen(const u8 *a0);
|
||||||
|
static bool32 TryWipeDamagedSectors(void);
|
||||||
|
static bool32 WipeDamagedSectors(u32 damagedSectors);
|
||||||
|
|
||||||
void sub_80F50F4(void)
|
static const u16 sSaveFailedScreenPals[] = INCBIN_U16("graphics/interface/save_failed_screen.gbapal");
|
||||||
|
|
||||||
|
void SetNotInSaveFailedScreen(void)
|
||||||
{
|
{
|
||||||
gUnknown_3005430 = FALSE;
|
sIsInSaveFailedScreen = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoSaveFailedScreen(u8 saveType)
|
void DoSaveFailedScreen(u8 saveType)
|
||||||
{
|
{
|
||||||
gUnknown_203AB4C = saveType;
|
sSaveType = saveType;
|
||||||
gUnknown_3005430 = TRUE;
|
sIsInSaveFailedScreen = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool32 sub_80F5118(void)
|
bool32 RunSaveFailedScreen(void)
|
||||||
{
|
{
|
||||||
switch (gUnknown_203AB50)
|
switch (sSaveFailedScreenState)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (!gUnknown_3005430)
|
if (!sIsInSaveFailedScreen)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128);
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128);
|
||||||
SaveCallbacks();
|
SaveCallbacks();
|
||||||
gUnknown_203AB50 = 1;
|
sSaveFailedScreenState = 1;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
SaveMapTiles();
|
SaveMapTiles();
|
||||||
SaveMapGPURegs();
|
SaveMapGPURegs();
|
||||||
SaveMapTextColors();
|
SaveMapTextColors();
|
||||||
sub_80F52EC();
|
BlankPalettes();
|
||||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||||
gUnknown_203AB50 = 2;
|
sSaveFailedScreenState = 2;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0);
|
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0);
|
||||||
RequestDma3Copy(gUnknown_841EE44, (void *)PLTT, 0x20, 0);
|
RequestDma3Copy(sSaveFailedScreenPals, (void *)PLTT, 0x20, 0);
|
||||||
gUnknown_203AB50 = 3;
|
sSaveFailedScreenState = 3;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
sub_80F53E8();
|
ClearMapBuffer();
|
||||||
sub_80F5404(gUnknown_8418C83);
|
PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_CheckingBackupMemory);
|
||||||
sub_80F53CC();
|
UpdateMapBufferWithText();
|
||||||
gUnknown_203AB50 = 4;
|
sSaveFailedScreenState = 4;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||||
@@ -67,44 +72,44 @@ bool32 sub_80F5118(void)
|
|||||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||||
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31));
|
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31));
|
||||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
|
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
|
||||||
gUnknown_203AB50 = 5;
|
sSaveFailedScreenState = 5;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
if (sub_80F5458() == TRUE)
|
if (TryWipeDamagedSectors() == TRUE)
|
||||||
{
|
{
|
||||||
gSaveSucceeded = SAVE_STATUS_OK;
|
gSaveSucceeded = SAVE_STATUS_OK;
|
||||||
sub_80F5404(gUnknown_8418E09);
|
PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_SaveCompleted);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gSaveSucceeded = SAVE_STATUS_ERROR;
|
gSaveSucceeded = SAVE_STATUS_ERROR;
|
||||||
sub_80F5404(gUnknown_8418CD9);
|
PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_BackupMemoryDamaged);
|
||||||
}
|
}
|
||||||
gUnknown_203AB50 = 6;
|
sSaveFailedScreenState = 6;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if (JOY_NEW(A_BUTTON))
|
if (JOY_NEW(A_BUTTON))
|
||||||
gUnknown_203AB50 = 7;
|
sSaveFailedScreenState = 7;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||||
RestoreMapTiles();
|
RestoreMapTiles();
|
||||||
sub_80F52EC();
|
BlankPalettes();
|
||||||
gUnknown_203AB50 = 8;
|
sSaveFailedScreenState = 8;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
|
||||||
RestoreMapTextColors();
|
RestoreMapTextColors();
|
||||||
RestoreGPURegs();
|
RestoreGPURegs();
|
||||||
RestoreCallbacks();
|
RestoreCallbacks();
|
||||||
gUnknown_3005430 = FALSE;
|
sIsInSaveFailedScreen = FALSE;
|
||||||
gUnknown_203AB50 = 0;
|
sSaveFailedScreenState = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_80F52EC(void)
|
static void BlankPalettes(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < BG_PLTT_SIZE; i += sizeof(u16))
|
for (i = 0; i < BG_PLTT_SIZE; i += sizeof(u16))
|
||||||
@@ -114,12 +119,113 @@ void sub_80F52EC(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_80F5318(void)
|
static void RequestDmaCopyFromScreenBuffer(void)
|
||||||
{
|
{
|
||||||
RequestDma3Copy(gDecompressionBuffer + 0x3800, (void *)BG_SCREEN_ADDR(31), 0x500, 0);
|
RequestDma3Copy(gDecompressionBuffer + 0x3800, (void *)BG_SCREEN_ADDR(31), 0x500, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_80F5334(void)
|
static void RequestDmaCopyFromCharBuffer(void)
|
||||||
{
|
{
|
||||||
RequestDma3Copy(gDecompressionBuffer + 0x020, (void *)BG_CHAR_ADDR(3) + 0x20, 0x2300, 0);
|
RequestDma3Copy(gDecompressionBuffer + 0x020, (void *)BG_CHAR_ADDR(3) + 0x20, 0x2300, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void FillBgMapBufferRect(u16 baseBlock, u8 left, u8 top, u8 width, u8 height, u16 blockOffset)
|
||||||
|
{
|
||||||
|
u16 i, j;
|
||||||
|
|
||||||
|
for (i = top; i < top + height; i++)
|
||||||
|
{
|
||||||
|
for (j = left; j < left + width; j++)
|
||||||
|
{
|
||||||
|
*((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseBlock;
|
||||||
|
baseBlock += blockOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RequestDmaCopyFromScreenBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void UpdateMapBufferWithText(void)
|
||||||
|
{
|
||||||
|
FillBgMapBufferRect(0x001, 1, 5, 28, 10, 0x001);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ClearMapBuffer(void)
|
||||||
|
{
|
||||||
|
FillBgMapBufferRect(0x000, 0, 0, 30, 20, 0x000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PrintTextOnSaveFailedScreen(const u8 *str)
|
||||||
|
{
|
||||||
|
GenerateFontHalfRowLookupTable(TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
|
||||||
|
CpuFill16(PIXEL_FILL(1) | (PIXEL_FILL(1) << 8), gDecompressionBuffer + 0x20, 0x2300);
|
||||||
|
HelpSystemRenderText(2, gDecompressionBuffer + 0x20, str, 2, 2, 28, 10);
|
||||||
|
RequestDmaCopyFromCharBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool32 TryWipeDamagedSectors(void)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
for (i = 0; gDamagedSaveSectors != 0 && i < 3; i++)
|
||||||
|
{
|
||||||
|
if (WipeDamagedSectors(gDamagedSaveSectors))
|
||||||
|
return FALSE;
|
||||||
|
HandleSavingData(sSaveType);
|
||||||
|
}
|
||||||
|
if (gDamagedSaveSectors != 0)
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool16 VerifySectorWipe(u32 sector)
|
||||||
|
{
|
||||||
|
u16 sector0 = sector;
|
||||||
|
u16 i;
|
||||||
|
u32 *saveDataBuffer = (void *)&gSaveDataBuffer;
|
||||||
|
ReadFlash(sector0, 0, saveDataBuffer, 0x1000);
|
||||||
|
for (i = 0; i < 0x1000 / 4; i++, saveDataBuffer++)
|
||||||
|
{
|
||||||
|
if (*saveDataBuffer != 0)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool32 WipeSector(u32 sector)
|
||||||
|
{
|
||||||
|
bool32 result;
|
||||||
|
u16 i, j;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < 130)
|
||||||
|
{
|
||||||
|
for (j = 0; j < 0x1000; j++)
|
||||||
|
{
|
||||||
|
ProgramFlashByte(sector, j, 0);
|
||||||
|
}
|
||||||
|
result = VerifySectorWipe(sector);
|
||||||
|
i++;
|
||||||
|
if (!result)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool32 WipeDamagedSectors(u32 damagedSectors)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
if (damagedSectors & (1 << i))
|
||||||
|
{
|
||||||
|
if (!WipeSector(i))
|
||||||
|
{
|
||||||
|
damagedSectors &= ~(1 << i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damagedSectors == 0)
|
||||||
|
return FALSE;
|
||||||
|
else
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|||||||
+2
-4
@@ -71,10 +71,8 @@ gUnknown_3005078: @ 3005078
|
|||||||
.include "save.o"
|
.include "save.o"
|
||||||
.align 2
|
.align 2
|
||||||
.include "battle_anim_special.o"
|
.include "battle_anim_special.o"
|
||||||
|
.align 2
|
||||||
gUnknown_3005430: @ 3005430
|
.include "save_failed_screen.o"
|
||||||
.space 0x10
|
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.include "link_rfu_2.o"
|
.include "link_rfu_2.o"
|
||||||
.align 4
|
.align 4
|
||||||
|
|||||||
+3
-5
@@ -306,15 +306,13 @@ gUnknown_203998C: @ 203998C
|
|||||||
.include "src/diploma.o"
|
.include "src/diploma.o"
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gUnknown_203AB4C: @ 203AB4C
|
.include "src/save_failed_screen.o"
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_203AB50: @ 203AB50
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
|
.align 2
|
||||||
gUnknown_203AB54: @ 203AB54
|
gUnknown_203AB54: @ 203AB54
|
||||||
.space 0x4
|
.space 0x4
|
||||||
|
|
||||||
|
.align 2
|
||||||
.include "src/new_menu_helpers.o"
|
.include "src/new_menu_helpers.o"
|
||||||
.align 2
|
.align 2
|
||||||
.include "src/box_party_pokemon_dropdown.o"
|
.include "src/box_party_pokemon_dropdown.o"
|
||||||
|
|||||||
Reference in New Issue
Block a user