Decomp and doc clear_save_data_screen
This commit is contained in:
@@ -1,469 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80F5574
|
||||
sub_80F5574: @ 80F5574
|
||||
push {lr}
|
||||
bl RunTasks
|
||||
bl AnimateSprites
|
||||
bl BuildOamBuffer
|
||||
bl UpdatePaletteFade
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80F5574
|
||||
|
||||
thumb_func_start sub_80F558C
|
||||
sub_80F558C: @ 80F558C
|
||||
push {lr}
|
||||
bl LoadOam
|
||||
bl ProcessSpriteCopyRequests
|
||||
bl TransferPlttBuffer
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80F558C
|
||||
|
||||
thumb_func_start CB2_SaveClearScreen_Init
|
||||
CB2_SaveClearScreen_Init: @ 80F55A0
|
||||
push {r4,lr}
|
||||
ldr r4, _080F55D0 @ =gUnknown_203AB54
|
||||
movs r0, 0x4
|
||||
bl AllocZeroed
|
||||
str r0, [r4]
|
||||
movs r1, 0
|
||||
strb r1, [r0, 0x1]
|
||||
ldr r0, [r4]
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
strb r1, [r0, 0x2]
|
||||
bl sub_80F580C
|
||||
ldr r0, _080F55D4 @ =sub_80F55DC
|
||||
movs r1, 0
|
||||
bl CreateTask
|
||||
ldr r0, _080F55D8 @ =sub_80F5574
|
||||
bl SetMainCallback2
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080F55D0: .4byte gUnknown_203AB54
|
||||
_080F55D4: .4byte sub_80F55DC
|
||||
_080F55D8: .4byte sub_80F5574
|
||||
thumb_func_end CB2_SaveClearScreen_Init
|
||||
|
||||
thumb_func_start sub_80F55DC
|
||||
sub_80F55DC: @ 80F55DC
|
||||
push {r4,lr}
|
||||
sub sp, 0x14
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
ldr r0, _080F55F8 @ =gUnknown_203AB54
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0x1]
|
||||
cmp r0, 0x5
|
||||
bhi _080F56C0
|
||||
lsls r0, 2
|
||||
ldr r1, _080F55FC @ =_080F5600
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_080F55F8: .4byte gUnknown_203AB54
|
||||
_080F55FC: .4byte _080F5600
|
||||
.align 2, 0
|
||||
_080F5600:
|
||||
.4byte _080F5618
|
||||
.4byte _080F562A
|
||||
.4byte _080F5644
|
||||
.4byte _080F564A
|
||||
.4byte _080F5660
|
||||
.4byte _080F569C
|
||||
_080F5618:
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
movs r1, 0
|
||||
str r1, [sp]
|
||||
movs r2, 0
|
||||
movs r3, 0x10
|
||||
bl BeginNormalPaletteFade
|
||||
b _080F56E2
|
||||
_080F562A:
|
||||
ldr r0, _080F5640 @ =gPaletteFade
|
||||
ldrb r1, [r0, 0x7]
|
||||
movs r0, 0x80
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _080F56EC
|
||||
movs r0, 0
|
||||
bl SetVBlankCallback
|
||||
b _080F56E2
|
||||
.align 2, 0
|
||||
_080F5640: .4byte gPaletteFade
|
||||
_080F5644:
|
||||
bl sub_80F5820
|
||||
b _080F56E2
|
||||
_080F564A:
|
||||
movs r0, 0
|
||||
movs r1, 0x1
|
||||
movs r2, 0xF0
|
||||
bl TextWindow_SetStdFrame0_WithPal
|
||||
movs r0, 0x1
|
||||
movs r1, 0x1
|
||||
movs r2, 0xF0
|
||||
bl TextWindow_SetStdFrame0_WithPal
|
||||
b _080F56E2
|
||||
_080F5660:
|
||||
movs r0, 0x1
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
movs r3, 0xF
|
||||
bl DrawStdFrameWithCustomTileAndPalette
|
||||
movs r0, 0x1
|
||||
str r0, [sp]
|
||||
str r0, [sp, 0x4]
|
||||
ldr r0, _080F5694 @ =gUnknown_841EE80
|
||||
str r0, [sp, 0x8]
|
||||
movs r0, 0
|
||||
str r0, [sp, 0xC]
|
||||
ldr r0, _080F5698 @ =gUnknown_841B69E
|
||||
str r0, [sp, 0x10]
|
||||
movs r0, 0x1
|
||||
movs r1, 0x2
|
||||
movs r2, 0
|
||||
movs r3, 0x3
|
||||
bl AddTextPrinterParameterized4
|
||||
movs r0, 0x1
|
||||
movs r1, 0x2
|
||||
bl CopyWindowToVram
|
||||
b _080F56E2
|
||||
.align 2, 0
|
||||
_080F5694: .4byte gUnknown_841EE80
|
||||
_080F5698: .4byte gUnknown_841B69E
|
||||
_080F569C:
|
||||
ldr r0, _080F56BC @ =gUnknown_841EE68
|
||||
movs r2, 0x1
|
||||
str r2, [sp]
|
||||
movs r1, 0xF
|
||||
str r1, [sp, 0x4]
|
||||
str r2, [sp, 0x8]
|
||||
movs r1, 0x2
|
||||
movs r2, 0
|
||||
movs r3, 0x2
|
||||
bl CreateYesNoMenu
|
||||
movs r0, 0
|
||||
bl CopyBgTilemapBufferToVram
|
||||
b _080F56E2
|
||||
.align 2, 0
|
||||
_080F56BC: .4byte gUnknown_841EE68
|
||||
_080F56C0:
|
||||
ldr r0, _080F56F4 @ =0x0000ffff
|
||||
str r0, [sp]
|
||||
movs r1, 0
|
||||
movs r2, 0x10
|
||||
movs r3, 0
|
||||
bl BeginNormalPaletteFade
|
||||
ldr r0, _080F56F8 @ =sub_80F558C
|
||||
bl SetVBlankCallback
|
||||
ldr r1, _080F56FC @ =gTasks
|
||||
lsls r0, r4, 2
|
||||
adds r0, r4
|
||||
lsls r0, 3
|
||||
adds r0, r1
|
||||
ldr r1, _080F5700 @ =sub_80F5708
|
||||
str r1, [r0]
|
||||
_080F56E2:
|
||||
ldr r0, _080F5704 @ =gUnknown_203AB54
|
||||
ldr r1, [r0]
|
||||
ldrb r0, [r1, 0x1]
|
||||
adds r0, 0x1
|
||||
strb r0, [r1, 0x1]
|
||||
_080F56EC:
|
||||
add sp, 0x14
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080F56F4: .4byte 0x0000ffff
|
||||
_080F56F8: .4byte sub_80F558C
|
||||
_080F56FC: .4byte gTasks
|
||||
_080F5700: .4byte sub_80F5708
|
||||
_080F5704: .4byte gUnknown_203AB54
|
||||
thumb_func_end sub_80F55DC
|
||||
|
||||
thumb_func_start sub_80F5708
|
||||
sub_80F5708: @ 80F5708
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x14
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
ldr r5, _080F5740 @ =gUnknown_203AB54
|
||||
ldr r0, [r5]
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _080F578C
|
||||
bl Menu_ProcessInputNoWrapClearOnChoose
|
||||
lsls r0, 24
|
||||
asrs r4, r0, 24
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r4, r0
|
||||
beq _080F5736
|
||||
cmp r4, r0
|
||||
ble _080F5792
|
||||
cmp r4, 0
|
||||
beq _080F5744
|
||||
cmp r4, 0x1
|
||||
bne _080F5792
|
||||
_080F5736:
|
||||
movs r0, 0x5
|
||||
bl PlaySE
|
||||
b _080F577A
|
||||
.align 2, 0
|
||||
_080F5740: .4byte gUnknown_203AB54
|
||||
_080F5744:
|
||||
movs r0, 0x5
|
||||
bl PlaySE
|
||||
movs r0, 0x1
|
||||
movs r1, 0x11
|
||||
bl FillWindowPixelBuffer
|
||||
movs r0, 0x1
|
||||
str r0, [sp]
|
||||
str r0, [sp, 0x4]
|
||||
ldr r0, _080F5784 @ =gUnknown_841EE80
|
||||
str r0, [sp, 0x8]
|
||||
str r4, [sp, 0xC]
|
||||
ldr r0, _080F5788 @ =gUnknown_841B6B9
|
||||
str r0, [sp, 0x10]
|
||||
movs r0, 0x1
|
||||
movs r1, 0x2
|
||||
movs r2, 0
|
||||
movs r3, 0x3
|
||||
bl AddTextPrinterParameterized4
|
||||
movs r0, 0x1
|
||||
movs r1, 0x3
|
||||
bl CopyWindowToVram
|
||||
bl ClearSaveData
|
||||
_080F577A:
|
||||
ldr r1, [r5]
|
||||
ldrb r0, [r1]
|
||||
adds r0, 0x1
|
||||
strb r0, [r1]
|
||||
b _080F5792
|
||||
.align 2, 0
|
||||
_080F5784: .4byte gUnknown_841EE80
|
||||
_080F5788: .4byte gUnknown_841B6B9
|
||||
_080F578C:
|
||||
adds r0, r1, 0
|
||||
bl sub_80F579C
|
||||
_080F5792:
|
||||
add sp, 0x14
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80F5708
|
||||
|
||||
thumb_func_start sub_80F579C
|
||||
sub_80F579C: @ 80F579C
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x4
|
||||
lsls r0, 24
|
||||
lsrs r6, r0, 24
|
||||
ldr r5, _080F57B4 @ =gUnknown_203AB54
|
||||
ldr r0, [r5]
|
||||
ldrb r0, [r0, 0x2]
|
||||
cmp r0, 0
|
||||
beq _080F57B8
|
||||
cmp r0, 0x1
|
||||
beq _080F57D4
|
||||
b _080F57FE
|
||||
.align 2, 0
|
||||
_080F57B4: .4byte gUnknown_203AB54
|
||||
_080F57B8:
|
||||
ldr r0, _080F57D0 @ =0x0000ffff
|
||||
str r0, [sp]
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x10
|
||||
bl BeginNormalPaletteFade
|
||||
ldr r1, [r5]
|
||||
ldrb r0, [r1, 0x2]
|
||||
adds r0, 0x1
|
||||
strb r0, [r1, 0x2]
|
||||
b _080F57FE
|
||||
.align 2, 0
|
||||
_080F57D0: .4byte 0x0000ffff
|
||||
_080F57D4:
|
||||
ldr r0, _080F5808 @ =gPaletteFade
|
||||
ldrb r1, [r0, 0x7]
|
||||
movs r0, 0x80
|
||||
ands r0, r1
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0
|
||||
bne _080F57FE
|
||||
bl DestroyYesNoMenu
|
||||
adds r0, r6, 0
|
||||
bl DestroyTask
|
||||
bl FreeAllWindowBuffers
|
||||
ldr r0, [r5]
|
||||
bl Free
|
||||
str r4, [r5]
|
||||
bl DoSoftReset
|
||||
_080F57FE:
|
||||
add sp, 0x4
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080F5808: .4byte gPaletteFade
|
||||
thumb_func_end sub_80F579C
|
||||
|
||||
thumb_func_start sub_80F580C
|
||||
sub_80F580C: @ 80F580C
|
||||
push {lr}
|
||||
bl ResetSpriteData
|
||||
bl ResetPaletteFade
|
||||
bl ResetTasks
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80F580C
|
||||
|
||||
thumb_func_start sub_80F5820
|
||||
sub_80F5820: @ 80F5820
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x8
|
||||
movs r3, 0xC0
|
||||
lsls r3, 19
|
||||
movs r4, 0xC0
|
||||
lsls r4, 9
|
||||
add r0, sp, 0x4
|
||||
mov r8, r0
|
||||
mov r2, sp
|
||||
movs r6, 0
|
||||
ldr r1, _080F593C @ =0x040000d4
|
||||
movs r5, 0x80
|
||||
lsls r5, 5
|
||||
ldr r7, _080F5940 @ =0x81000800
|
||||
movs r0, 0x81
|
||||
lsls r0, 24
|
||||
mov r12, r0
|
||||
_080F5846:
|
||||
strh r6, [r2]
|
||||
mov r0, sp
|
||||
str r0, [r1]
|
||||
str r3, [r1, 0x4]
|
||||
str r7, [r1, 0x8]
|
||||
ldr r0, [r1, 0x8]
|
||||
adds r3, r5
|
||||
subs r4, r5
|
||||
cmp r4, r5
|
||||
bhi _080F5846
|
||||
strh r6, [r2]
|
||||
mov r2, sp
|
||||
str r2, [r1]
|
||||
str r3, [r1, 0x4]
|
||||
lsrs r0, r4, 1
|
||||
mov r2, r12
|
||||
orrs r0, r2
|
||||
str r0, [r1, 0x8]
|
||||
ldr r0, [r1, 0x8]
|
||||
movs r0, 0xE0
|
||||
lsls r0, 19
|
||||
movs r3, 0x80
|
||||
lsls r3, 3
|
||||
movs r4, 0
|
||||
str r4, [sp, 0x4]
|
||||
ldr r2, _080F593C @ =0x040000d4
|
||||
mov r1, r8
|
||||
str r1, [r2]
|
||||
str r0, [r2, 0x4]
|
||||
lsrs r0, r3, 2
|
||||
movs r1, 0x85
|
||||
lsls r1, 24
|
||||
orrs r0, r1
|
||||
str r0, [r2, 0x8]
|
||||
ldr r0, [r2, 0x8]
|
||||
movs r1, 0xA0
|
||||
lsls r1, 19
|
||||
mov r0, sp
|
||||
strh r4, [r0]
|
||||
str r0, [r2]
|
||||
str r1, [r2, 0x4]
|
||||
lsrs r3, 1
|
||||
movs r0, 0x81
|
||||
lsls r0, 24
|
||||
orrs r3, r0
|
||||
str r3, [r2, 0x8]
|
||||
ldr r0, [r2, 0x8]
|
||||
movs r0, 0
|
||||
movs r1, 0
|
||||
bl SetGpuReg
|
||||
movs r0, 0x54
|
||||
movs r1, 0
|
||||
bl SetGpuReg
|
||||
movs r0, 0
|
||||
bl ResetBgsAndClearDma3BusyFlags
|
||||
ldr r1, _080F5944 @ =gUnknown_841EE64
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl InitBgsFromTemplates
|
||||
movs r0, 0
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgX
|
||||
movs r0, 0
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgY
|
||||
movs r0, 0x1
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgX
|
||||
movs r0, 0x1
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgY
|
||||
movs r0, 0x2
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgX
|
||||
movs r0, 0x2
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgY
|
||||
movs r0, 0x3
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgX
|
||||
movs r0, 0x3
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl ChangeBgY
|
||||
ldr r0, _080F5948 @ =gUnknown_841EE68
|
||||
bl InitWindows
|
||||
bl DeactivateAllTextPrinters
|
||||
movs r1, 0x82
|
||||
lsls r1, 5
|
||||
movs r0, 0
|
||||
bl SetGpuReg
|
||||
movs r0, 0
|
||||
bl ShowBg
|
||||
add sp, 0x8
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080F593C: .4byte 0x040000d4
|
||||
_080F5940: .4byte 0x81000800
|
||||
_080F5944: .4byte gUnknown_841EE64
|
||||
_080F5948: .4byte gUnknown_841EE68
|
||||
thumb_func_end sub_80F5820
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
@@ -5,26 +5,3 @@
|
||||
.include "constants/constants.inc"
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnknown_841EE64:: @ 841EE64
|
||||
.4byte 0x000001f0
|
||||
@ {
|
||||
@ .bg = 0,
|
||||
@ .charBaseIndex = 0,
|
||||
@ .mapBaseIndex = 31,
|
||||
@ .screenSize = 0,
|
||||
@ .paletteMode = 0,
|
||||
@ .priority = 0,
|
||||
@ .baseTile = 0x0000
|
||||
@ }
|
||||
|
||||
gUnknown_841EE68:: @ 841EE68
|
||||
.byte 0, 3, 5, 6, 4, 15
|
||||
.2byte 0x000a
|
||||
.byte 0, 3, 15, 23, 4, 15
|
||||
.2byte 0x0022
|
||||
.byte 255, 0, 0, 0, 0, 0
|
||||
.2byte 0x0000
|
||||
|
||||
gUnknown_841EE80:: @ 841EE80
|
||||
.byte 0x01, 0x02, 0x03
|
||||
|
||||
@@ -171,6 +171,16 @@
|
||||
#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
|
||||
#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
|
||||
|
||||
#define DmaClearDefvars(dmaNum, dest, size, bit) \
|
||||
{ \
|
||||
void *_dest = dest; \
|
||||
u32 _size = size; \
|
||||
DmaClear##bit(dmaNum, _dest, _size); \
|
||||
}
|
||||
|
||||
#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
|
||||
#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
|
||||
|
||||
#define IntrEnable(flags) \
|
||||
{ \
|
||||
u16 imeTemp; \
|
||||
|
||||
@@ -1309,4 +1309,8 @@ extern const u8 gText_QuestLog_VictoryRoad[];
|
||||
extern const u8 gText_QuestLog_PokemonLeague[];
|
||||
extern const u8 gText_QuestLog_CeruleanCave[];
|
||||
|
||||
// clear_save_data_screen
|
||||
extern const u8 gUnknown_841B69E[];
|
||||
extern const u8 gUnknown_841B6B9[];
|
||||
|
||||
#endif //GUARD_STRINGS_H
|
||||
|
||||
+2
-2
@@ -216,7 +216,7 @@ SECTIONS {
|
||||
src/credits.o(.text);
|
||||
src/diploma.o(.text);
|
||||
src/save_failed_screen.o(.text);
|
||||
asm/clear_save_data_screen.o(.text);
|
||||
src/clear_save_data_screen.o(.text);
|
||||
src/evolution_graphics.o(.text);
|
||||
src/fldeff_teleport.o(.text);
|
||||
src/new_menu_helpers.o(.text);
|
||||
@@ -510,7 +510,7 @@ SECTIONS {
|
||||
src/diploma.o(.rodata);
|
||||
src/strings.o(.rodata);
|
||||
src/save_failed_screen.o(.rodata);
|
||||
data/clear_save_data_screen.o(.rodata);
|
||||
src/clear_save_data_screen.o(.rodata);
|
||||
src/evolution_graphics.o(.rodata);
|
||||
src/new_menu_helpers.o(.rodata);
|
||||
src/box_party_pokemon_dropdown.o(.rodata);
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "menu.h"
|
||||
#include "save.h"
|
||||
#include "strings.h"
|
||||
#include "task.h"
|
||||
#include "text_window.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
struct ClearSaveDataStruct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct ClearSaveDataStruct * sClearSaveDataState = NULL;
|
||||
|
||||
static void Task_DrawClearSaveDataScreen(u8 taskId);
|
||||
static void Task_HandleYesNoMenu(u8 taskId);
|
||||
static void Task_CleanUpAndSoftReset(u8 taskId);
|
||||
static void CB2_Sub_SaveClearScreen_Init(void);
|
||||
static void SaveClearScreen_GpuInit(void);
|
||||
|
||||
static const struct BgTemplate sBgTemplates[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 31,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 0,
|
||||
.baseTile = 0x000
|
||||
}
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplates[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 3,
|
||||
.tilemapTop = 5,
|
||||
.width = 6,
|
||||
.height = 4,
|
||||
.paletteNum = 0xF,
|
||||
.baseBlock = 0x00A
|
||||
}, {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 3,
|
||||
.tilemapTop = 15,
|
||||
.width = 23,
|
||||
.height = 4,
|
||||
.paletteNum = 0xF,
|
||||
.baseBlock = 0x022
|
||||
}, DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
static const u8 sTextColor[] = {
|
||||
TEXT_COLOR_WHITE,
|
||||
TEXT_COLOR_DARK_GREY,
|
||||
TEXT_COLOR_LIGHT_GREY
|
||||
};
|
||||
|
||||
static void CB2_RunClearSaveDataScreen(void)
|
||||
{
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
static void VBlankCB_WaitYesNo(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void CB2_SaveClearScreen_Init(void)
|
||||
{
|
||||
sClearSaveDataState = AllocZeroed(sizeof(struct ClearSaveDataStruct));
|
||||
sClearSaveDataState->unk1 = 0;
|
||||
sClearSaveDataState->unk0 = 0;
|
||||
sClearSaveDataState->unk2 = 0;
|
||||
CB2_Sub_SaveClearScreen_Init();
|
||||
CreateTask(Task_DrawClearSaveDataScreen, 0);
|
||||
SetMainCallback2(CB2_RunClearSaveDataScreen);
|
||||
}
|
||||
|
||||
static void Task_DrawClearSaveDataScreen(u8 taskId)
|
||||
{
|
||||
switch (sClearSaveDataState->unk1)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case 1:
|
||||
if (gPaletteFade.active)
|
||||
return;
|
||||
SetVBlankCallback(NULL);
|
||||
break;
|
||||
case 2:
|
||||
SaveClearScreen_GpuInit();
|
||||
break;
|
||||
case 3:
|
||||
TextWindow_SetStdFrame0_WithPal(0, 0x001, 0xF0);
|
||||
TextWindow_SetStdFrame0_WithPal(1, 0x001, 0xF0);
|
||||
break;
|
||||
case 4:
|
||||
DrawStdFrameWithCustomTileAndPalette(1, TRUE, 0x001, 0xF);
|
||||
AddTextPrinterParameterized4(1, 2, 0, 3, 1, 1, sTextColor, 0, gUnknown_841B69E);
|
||||
CopyWindowToVram(1, 2);
|
||||
break;
|
||||
case 5:
|
||||
CreateYesNoMenu(&sWindowTemplates[0], 2, 0, 2, 0x001, 0xF, 1);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
break;
|
||||
default:
|
||||
BeginNormalPaletteFade(0xFFFF, 0, 16, 0, RGB_WHITEALPHA);
|
||||
SetVBlankCallback(VBlankCB_WaitYesNo);
|
||||
gTasks[taskId].func = Task_HandleYesNoMenu;
|
||||
break;
|
||||
}
|
||||
sClearSaveDataState->unk1++;
|
||||
}
|
||||
|
||||
static void Task_HandleYesNoMenu(u8 taskId)
|
||||
{
|
||||
// agbcc refuses to keep &sClearSaveDataState in a register
|
||||
// unless explicitly told to do so as such:
|
||||
struct ClearSaveDataStruct ** r5 = &sClearSaveDataState;
|
||||
if ((*r5)->unk0 == 0)
|
||||
{
|
||||
switch (Menu_ProcessInputNoWrapClearOnChoose())
|
||||
{
|
||||
case -1:
|
||||
case 1:
|
||||
PlaySE(SE_SELECT);
|
||||
break;
|
||||
case 0:
|
||||
PlaySE(SE_SELECT);
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized4(1, 2, 0, 3, 1, 1, sTextColor, 0, gUnknown_841B6B9);
|
||||
CopyWindowToVram(1, 3);
|
||||
ClearSaveData();
|
||||
break;
|
||||
case -2:
|
||||
default:
|
||||
return;
|
||||
}
|
||||
(*r5)->unk0++;
|
||||
}
|
||||
else
|
||||
{
|
||||
Task_CleanUpAndSoftReset(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_CleanUpAndSoftReset(u8 taskId)
|
||||
{
|
||||
switch (sClearSaveDataState->unk2)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFF, 0, 0, 16, RGB_WHITEALPHA);
|
||||
sClearSaveDataState->unk2++;
|
||||
break;
|
||||
case 1:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyYesNoMenu();
|
||||
DestroyTask(taskId);
|
||||
FreeAllWindowBuffers();
|
||||
FREE_AND_SET_NULL(sClearSaveDataState);
|
||||
DoSoftReset();
|
||||
// noreturn
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void CB2_Sub_SaveClearScreen_Init(void)
|
||||
{
|
||||
ResetSpriteData();
|
||||
ResetPaletteFade();
|
||||
ResetTasks();
|
||||
}
|
||||
|
||||
static void SaveClearScreen_GpuInit(void)
|
||||
{
|
||||
DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000);
|
||||
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"ip");
|
||||
#endif
|
||||
|
||||
do
|
||||
{
|
||||
void * dest = (void *)OAM;
|
||||
size_t size = OAM_SIZE;
|
||||
DmaClear32(3, dest, size);
|
||||
} while (0);
|
||||
|
||||
do
|
||||
{
|
||||
void * dest = (void *)PLTT;
|
||||
size_t size = PLTT_SIZE;
|
||||
DmaClear16(3, dest, size);
|
||||
} while (0);
|
||||
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
ResetBgsAndClearDma3BusyFlags(FALSE);
|
||||
InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates));
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgX(1, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgX(2, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgX(3, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
InitWindows(sWindowTemplates);
|
||||
DeactivateAllTextPrinters();
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
|
||||
ShowBg(0);
|
||||
}
|
||||
+1
-5
@@ -297,14 +297,10 @@ gUnknown_203998C: @ 203998C
|
||||
.include "src/credits.o"
|
||||
.align 2
|
||||
.include "src/diploma.o"
|
||||
|
||||
.align 2
|
||||
.include "src/save_failed_screen.o"
|
||||
|
||||
.align 2
|
||||
gUnknown_203AB54: @ 203AB54
|
||||
.space 0x4
|
||||
|
||||
.include "src/clear_save_data_screen.o"
|
||||
.align 2
|
||||
.include "src/new_menu_helpers.o"
|
||||
.align 2
|
||||
|
||||
Reference in New Issue
Block a user