Start decomping overlay 121

This commit is contained in:
PikalaxALT 2024-07-21 17:12:20 -04:00
parent 6619c7256f
commit 3912a8b88b
No known key found for this signature in database
GPG Key ID: 7774E96AA69E5B61
10 changed files with 190 additions and 280 deletions

View File

@ -4,231 +4,6 @@
.text
thumb_func_start ov121_021E5900
ov121_021E5900: ; 0x021E5900
push {r3, lr}
bl ov121_021E5AEC
mov r0, #1
pop {r3, pc}
.balign 4, 0
thumb_func_end ov121_021E5900
thumb_func_start ov121_021E590C
ov121_021E590C: ; 0x021E590C
push {r3, r4, lr}
sub sp, #0xc
bl OverlayManager_GetData
mov r1, #0x23
add r4, r0, #0
lsl r1, r1, #4
ldrb r1, [r4, r1]
cmp r1, #4
bhi _021E59B0
add r1, r1, r1
add r1, pc
ldrh r1, [r1, #6]
lsl r1, r1, #0x10
asr r1, r1, #0x10
add pc, r1
_021E592C: ; jump table
.short _021E5936 - _021E592C - 2 ; case 0
.short _021E5956 - _021E592C - 2 ; case 1
.short _021E5968 - _021E592C - 2 ; case 2
.short _021E597A - _021E592C - 2 ; case 3
.short _021E599C - _021E592C - 2 ; case 4
_021E5936:
mov r0, #6
str r0, [sp]
mov r1, #1
str r1, [sp, #4]
mov r0, #0x9e
str r0, [sp, #8]
mov r0, #0
add r2, r1, #0
add r3, r0, #0
bl BeginNormalPaletteFade
mov r0, #0x23
mov r1, #1
lsl r0, r0, #4
strb r1, [r4, r0]
b _021E59B0
_021E5956:
bl IsPaletteFadeFinished
cmp r0, #0
beq _021E59B0
mov r0, #0x23
mov r1, #2
lsl r0, r0, #4
strb r1, [r4, r0]
b _021E59B0
_021E5968:
bl ov121_021E5C50
cmp r0, #0
beq _021E59B0
mov r0, #0x23
mov r1, #3
lsl r0, r0, #4
strb r1, [r4, r0]
b _021E59B0
_021E597A:
mov r0, #6
str r0, [sp]
mov r0, #1
str r0, [sp, #4]
mov r0, #0x9e
str r0, [sp, #8]
mov r0, #0
add r1, r0, #0
add r2, r0, #0
add r3, r0, #0
bl BeginNormalPaletteFade
mov r0, #0x23
mov r1, #4
lsl r0, r0, #4
strb r1, [r4, r0]
b _021E59B0
_021E599C:
bl IsPaletteFadeFinished
cmp r0, #0
beq _021E59B0
add r0, r4, #0
bl ov121_021E6F78
add sp, #0xc
mov r0, #1
pop {r3, r4, pc}
_021E59B0:
add r0, r4, #0
bl ov121_021E5CB4
mov r0, #0
add sp, #0xc
pop {r3, r4, pc}
thumb_func_end ov121_021E590C
thumb_func_start ov121_021E59BC
ov121_021E59BC: ; 0x021E59BC
push {r3, r4, r5, r6, r7, lr}
bl OverlayManager_GetData
add r4, r0, #0
ldr r0, _021E5AE0 ; =gSystem + 0x60
mov r1, #0
strb r1, [r0, #9]
bl GfGfx_SwapDisplay
mov r0, #0
add r1, r0, #0
bl Main_SetVBlankIntrCB
ldr r0, _021E5AE4 ; =0x04000050
mov r1, #0
strh r1, [r0]
add r0, r4, #0
bl ov121_021E6A4C
add r0, r4, #4
bl RemoveWindow
add r0, r4, #0
add r0, #0x14
bl RemoveWindow
add r0, r4, #0
add r0, #0x24
bl RemoveWindow
add r0, r4, #0
add r0, #0x34
bl RemoveWindow
add r0, r4, #0
add r0, #0x44
bl RemoveWindow
add r0, r4, #0
add r0, #0x54
bl RemoveWindow
ldr r0, [r4]
mov r1, #0
bl FreeBgTilemapBuffer
ldr r0, [r4]
mov r1, #1
bl FreeBgTilemapBuffer
ldr r0, [r4]
mov r1, #2
bl FreeBgTilemapBuffer
ldr r0, [r4]
mov r1, #3
bl FreeBgTilemapBuffer
ldr r0, [r4]
mov r1, #4
bl FreeBgTilemapBuffer
add r0, r4, #0
bl ov121_021E611C
mov r0, #0x77
lsl r0, r0, #2
ldr r0, [r4, r0]
bl sub_0200AEB0
mov r0, #0x1e
lsl r0, r0, #4
ldr r0, [r4, r0]
bl sub_0200B0A8
mov r7, #0x71
mov r6, #0
add r5, r4, #0
lsl r7, r7, #2
_021E5A5A:
ldr r0, [r5, r7]
bl Destroy2DGfxResObjMan
add r6, r6, #1
add r5, r5, #4
cmp r6, #6
blt _021E5A5A
add r0, r4, #0
add r0, #0x98
ldr r0, [r0]
bl SpriteList_Delete
mov r0, #4
bl FontID_Release
bl OamManager_Free
bl ObjCharTransfer_Destroy
bl sub_02022608
add r0, r4, #0
add r0, #0x94
ldr r0, [r0]
bl YesNoPrompt_Destroy
mov r0, #0x8b
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FreeToHeap
ldr r0, [r4]
bl FreeToHeap
ldr r0, _021E5AE8 ; =0x0000025E
mov r5, #0
ldrb r0, [r4, r0]
add r0, r0, #1
cmp r0, #0
ble _021E5AC4
ldr r7, _021E5AE8 ; =0x0000025E
add r6, r4, #0
_021E5AAE:
mov r0, #0x8e
lsl r0, r0, #2
ldr r0, [r6, r0]
bl sub_0202EAFC
ldrb r0, [r4, r7]
add r5, r5, #1
add r6, r6, #4
add r0, r0, #1
cmp r5, r0
blt _021E5AAE
_021E5AC4:
mov r0, #0x95
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FreeToHeap
add r0, r4, #0
bl FreeToHeap
mov r0, #0x9e
bl DestroyHeap
mov r0, #1
pop {r3, r4, r5, r6, r7, pc}
nop
_021E5AE0: .word gSystem + 0x60
_021E5AE4: .word 0x04000050
_021E5AE8: .word 0x0000025E
thumb_func_end ov121_021E59BC
thumb_func_start ov121_021E5AEC
ov121_021E5AEC: ; 0x021E5AEC
push {r3, r4, r5, lr}

View File

@ -34,7 +34,8 @@ typedef enum HeapID {
HEAP_ID_GAME_BOARD = 110,
HEAP_ID_BERRY_POTS = 130,
HEAP_ID_BERRY_POTS_APP = 131,
HEAP_ID_VOLTORB_FLIP = 160
HEAP_ID_9E = 158,
HEAP_ID_VOLTORB_FLIP = 160,
} HeapID;
typedef struct HeapParam {

View File

@ -146,7 +146,7 @@ void PokeathlonCourse_LaunchApp(FieldSystem *fieldSystem, PokeathlonCourseArgs *
void sub_0203FC68(FieldSystem *fieldSystem, void *args);
void sub_0203FC90(FieldSystem *fieldSystem, void *args);
LegendaryCinematicArgs *LegendaryCinematic_LaunchApp(FieldSystem *fieldSystem, UnkStruct_0203FCC4 *a1, u16 a2, u16 a3, HeapID heapId);
void sub_0203FD08(FieldSystem *fieldSystem, UnkStruct_02097D48 *args);
void sub_0203FD08(FieldSystem *fieldSystem, UnkStruct_02097D56 *args);
PartyMenuArgs *PartyMenu_LaunchApp_Unk1(FieldSystem *fieldSystem, FieldMoveCheckData *fieldMoveCheckData, u8 partySlot);
void CallTask_NamingScreen(TaskManager *taskManager, NameScreenType type, int species, int maxLen, int initPos, const u16 *defaultStr, u16 *retVar);
void sub_0203E960(TaskManager *a0, int a1, UnkStruct_0203E8C8 *a2, u16 *a3, u16 *a4);

View File

@ -1,21 +1,19 @@
#ifndef POKEHEARTGOLD_UNK_02097D3C_H
#define POKEHEARTGOLD_UNK_02097D3C_H
#include "field_types_def.h"
#include "save.h"
typedef struct UnkStruct_02097D56 {
u16 unk00;
u16 unk02;
u16 unk_0;
u16 unk_2;
SaveData *saveData;
} UnkStruct_02097D56;
typedef struct UnkStruct_02097D48 {
u32 unk00;
UnkStruct_02097D56 *unk04;
} UnkStruct_02097D48;
typedef struct UnkStruct_02097D8E {
u32 state;
UnkStruct_02097D48 *unk04;
} UnkStruct_02097D8E;
UnkStruct_02097D56 *args;
} UnkStruct_02097D48;
void sub_02097D3C(FieldSystem *fieldSystem, u8 a1, u8 a2);

View File

@ -1180,7 +1180,8 @@ Overlay OVY_120
Overlay OVY_121
{
After main
Object asm/overlay_121.o
Object src/overlay_121.o
Object asm/overlay_121_s.o
}
Overlay voltorb_flip
{

View File

@ -1397,7 +1397,7 @@ LegendaryCinematicArgs *LegendaryCinematic_LaunchApp(FieldSystem *fieldSystem, U
return args;
}
void sub_0203FD08(FieldSystem *fieldSystem, UnkStruct_02097D48 *args) {
void sub_0203FD08(FieldSystem *fieldSystem, UnkStruct_02097D56 *args) {
static const OVY_MGR_TEMPLATE _020FA494 = { ov121_021E5900, ov121_021E590C, ov121_021E59BC, FS_OVERLAY_ID(OVY_121) };
FieldSystem_LaunchApplication(fieldSystem, &_020FA494, args);
}

123
src/overlay_121.c Normal file
View File

@ -0,0 +1,123 @@
#include "bg_window.h"
#include "font.h"
#include "global.h"
#include "overlay_121.h"
#include "obj_char_transfer.h"
#include "system.h"
#include "unk_02009D48.h"
#include "unk_0200A090.h"
#include "unk_0200ACF0.h"
#include "unk_0200B150.h"
#include "unk_0200FA24.h"
#include "unk_02022588.h"
#include "unk_02023694.h"
#include "unk_0202E4B0.h"
#include "unk_02097D3C.h"
#include "yes_no_prompt.h"
typedef struct Overlay121Appdata {
BgConfig *unk_000;
Window unk_004[6];
u8 filler_064[0x30];
YesNoPrompt *unk_094;
SpriteList *unk_098;
u8 filler_09C[0x128];
GF_2DGfxResMan *unk_1C4[6];
GF_2DGfxResObj *unk_1DC;
GF_2DGfxResObj *unk_1E0;
u8 filler_1E4[0x48];
void *unk_22C;
u8 unk_230;
u8 filler_231[0x7];
UnkStruct_0202E4B0 *unk_238[7];
void *unk_254;
u8 filler_258[6];
u8 unk_25E;
} Overlay121AppData;
void ov121_021E5AEC(OVY_MANAGER *man, int *pState);
BOOL ov121_021E5C50(Overlay121AppData *appData);
void ov121_021E5CB4(Overlay121AppData *appData);
void ov121_021E611C(Overlay121AppData *appData);
void ov121_021E6A4C(Overlay121AppData *appData);
BOOL ov121_021E6F78(Overlay121AppData *appData);
BOOL ov121_021E5900(OVY_MANAGER *man, int *pState) {
ov121_021E5AEC(man, pState);
return TRUE;
}
BOOL ov121_021E590C(OVY_MANAGER *man, int *pState) {
Overlay121AppData *appData = OverlayManager_GetData(man);
switch (appData->unk_230) {
case 0:
BeginNormalPaletteFade(0, 1, 1, RGB_BLACK, 6, 1, HEAP_ID_9E);
appData->unk_230 = 1;
break;
case 1:
if (IsPaletteFadeFinished()) {
appData->unk_230 = 2;
}
break;
case 2:
if (ov121_021E5C50(appData)) {
appData->unk_230 = 3;
}
break;
case 3:
BeginNormalPaletteFade(0, 0, 0, RGB_BLACK, 6, 1, HEAP_ID_9E);
appData->unk_230 = 4;
break;
case 4:
if (IsPaletteFadeFinished()) {
ov121_021E6F78(appData);
return TRUE;
}
break;
}
ov121_021E5CB4(appData);
return FALSE;
}
BOOL ov121_021E59BC(OVY_MANAGER *man, int *pState) {
Overlay121AppData *appData = OverlayManager_GetData(man);
gSystem.screensFlipped = FALSE;
GfGfx_SwapDisplay();
Main_SetVBlankIntrCB(NULL, NULL);
G2_BlendNone();
ov121_021E6A4C(appData);
RemoveWindow(&appData->unk_004[0]);
RemoveWindow(&appData->unk_004[1]);
RemoveWindow(&appData->unk_004[2]);
RemoveWindow(&appData->unk_004[3]);
RemoveWindow(&appData->unk_004[4]);
RemoveWindow(&appData->unk_004[5]);
FreeBgTilemapBuffer(appData->unk_000, GF_BG_LYR_MAIN_0);
FreeBgTilemapBuffer(appData->unk_000, GF_BG_LYR_MAIN_1);
FreeBgTilemapBuffer(appData->unk_000, GF_BG_LYR_MAIN_2);
FreeBgTilemapBuffer(appData->unk_000, GF_BG_LYR_MAIN_3);
FreeBgTilemapBuffer(appData->unk_000, GF_BG_LYR_SUB_0);
ov121_021E611C(appData);
sub_0200AEB0(appData->unk_1DC);
sub_0200B0A8(appData->unk_1E0);
for (int i = 0; i < 6; ++i) {
Destroy2DGfxResObjMan(appData->unk_1C4[i]);
}
SpriteList_Delete(appData->unk_098);
FontID_Release(4);
OamManager_Free();
ObjCharTransfer_Destroy();
sub_02022608();
YesNoPrompt_Destroy(appData->unk_094);
FreeToHeap(appData->unk_22C);
FreeToHeap(appData->unk_000);
for (int i = 0; i < appData->unk_25E + 1; ++i) {
sub_0202EAFC(appData->unk_238[i]);
}
FreeToHeap(appData->unk_254);
FreeToHeap(appData);
DestroyHeap(HEAP_ID_9E);
return TRUE;
}

View File

@ -27,17 +27,17 @@
#include "save_local_field_data.h"
#include "save_trainer_house.h"
#include "save_special_ribbons.h"
#include "unk_0202E4B0.h"
#include "game_stats.h"
#define DECL_CHUNK(prefix) extern u32 prefix##_sizeof(void); extern void prefix##_Init(void *);
#define DECL_CHUNK_EX(sizefn, initfn) extern u32 sizefn(void); extern void initfn(void *);
DECL_CHUNK_EX(sub_020290B8, sub_020290C8)
DECL_CHUNK(Save_FashionData)
DECL_CHUNK(GameStats)
DECL_CHUNK_EX(sub_02031000, sub_02031008)
DECL_CHUNK_EX(sub_0202DB40, sub_0202DB44)
DECL_CHUNK_EX(sub_0202E41C, sub_0202E424)
DECL_CHUNK_EX(sub_0202E4F4, sub_0202E4FC)
DECL_CHUNK_EX(sub_0202C034, sub_0202C03C)
DECL_CHUNK_EX(sub_0202CA24, sub_0202CA2C)
DECL_CHUNK_EX(sub_0202EB30, sub_0202EB38)

12
src/unk_0202E4B0.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef GUARD_POKEHEARTGOLD_UNK_0202E4B0_H
#define GUARD_POKEHEARTGOLD_UNK_0202E4B0_H
#include "global.h"
typedef struct UnkStruct_0202E4B0 UnkStruct_0202E4B0;
u32 sub_0202E4F4(void); // ???_sizeof
void sub_0202E4FC(UnkStruct_0202E4B0 *a0); // ???_Init
void sub_0202EAFC(UnkStruct_0202E4B0 *a0);
#endif //GUARD_POKEHEARTGOLD_UNK_0202E4B0_H

View File

@ -8,57 +8,57 @@
static BOOL sub_02097D80(TaskManager *taskManager);
void sub_02097D3C(FieldSystem *fieldSystem, u8 a1, u8 a2) {
UnkStruct_02097D48 *unk0 = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnkStruct_02097D48));
unk0->unk00 = 0;
unk0->unk04 = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnkStruct_02097D56));
unk0->unk04->saveData = FieldSystem_GetSaveData(fieldSystem);
unk0->unk04->unk00 = a1;
unk0->unk04->unk02 = a2;
TaskManager_Call(fieldSystem->taskman, sub_02097D80, unk0);
UnkStruct_02097D48 *taskData = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnkStruct_02097D48));
taskData->state = 0;
taskData->args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnkStruct_02097D56));
taskData->args->saveData = FieldSystem_GetSaveData(fieldSystem);
taskData->args->unk_0 = a1;
taskData->args->unk_2 = a2;
TaskManager_Call(fieldSystem->taskman, sub_02097D80, taskData);
}
static BOOL sub_02097D80(TaskManager *taskManager) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskManager);
UnkStruct_02097D8E *unk1 = TaskManager_GetEnvironment(taskManager);
switch (unk1->state) {
case 0:
BeginNormalPaletteFade(0, 0, 0, RGB_BLACK, 6, 1, HEAP_ID_4);
unk1->state++;
UnkStruct_02097D48 *taskData = TaskManager_GetEnvironment(taskManager);
switch (taskData->state) {
case 0:
BeginNormalPaletteFade(0, 0, 0, RGB_BLACK, 6, 1, HEAP_ID_4);
taskData->state++;
break;
case 1:
if (!IsPaletteFadeFinished()) {
break;
case 1:
if (!IsPaletteFadeFinished()) {
break;
}
}
sub_0203FD08(fieldSystem, unk1->unk04);
sub_0203E30C();
unk1->state++;
sub_0203FD08(fieldSystem, taskData->args);
sub_0203E30C();
taskData->state++;
break;
case 2:
if (FieldSystem_ApplicationIsRunning(fieldSystem)) {
break;
case 2:
if (FieldSystem_ApplicationIsRunning(fieldSystem)) {
break;
}
}
unk1->state++;
sub_020505C0(fieldSystem);
taskData->state++;
sub_020505C0(fieldSystem);
break;
case 3:
if (sub_020505C8(fieldSystem)) {
BeginNormalPaletteFade(0, 1, 1, RGB_BLACK, 6, 1, HEAP_ID_4);
taskData->state++;
}
break;
case 4:
if (!IsPaletteFadeFinished()) {
break;
case 3:
if (sub_020505C8(fieldSystem)) {
BeginNormalPaletteFade(0, 1, 1, RGB_BLACK, 6, 1, HEAP_ID_4);
unk1->state++;
}
}
break;
case 4:
if (!IsPaletteFadeFinished()) {
break;
}
FreeToHeap(unk1->unk04);
FreeToHeap(unk1);
return TRUE;
FreeToHeap(taskData->args);
FreeToHeap(taskData);
return TRUE;
}
return FALSE;