Decomp and doc clear_save_data_screen

This commit is contained in:
PikalaxALT
2020-03-06 10:57:42 -05:00
parent f483a93bea
commit 3581ce9ba2
7 changed files with 241 additions and 499 deletions
-469
View File
@@ -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.
-23
View File
@@ -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
+10
View File
@@ -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; \
+4
View File
@@ -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
View File
@@ -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);
+224
View File
@@ -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
View File
@@ -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