through sub_80C0A88

This commit is contained in:
PikalaxALT
2020-01-02 12:04:35 -05:00
parent 5a4ffc9a8e
commit 496fb8ce87
2 changed files with 142 additions and 366 deletions
-361
View File
@@ -5,367 +5,6 @@
.text
thumb_func_start sub_80C07D0
sub_80C07D0: @ 80C07D0
ldr r1, _080C07DC @ =gUnknown_20399D4
ldr r1, [r1]
ldr r2, _080C07E0 @ =0x000047b8
adds r1, r2
str r0, [r1]
bx lr
.align 2, 0
_080C07DC: .4byte gUnknown_20399D4
_080C07E0: .4byte 0x000047b8
thumb_func_end sub_80C07D0
thumb_func_start sub_80C07E4
sub_80C07E4: @ 80C07E4
ldr r0, _080C07F0 @ =gUnknown_20399D4
ldr r0, [r0]
ldr r1, _080C07F4 @ =0x000047b8
adds r0, r1
ldr r0, [r0]
bx lr
.align 2, 0
_080C07F0: .4byte gUnknown_20399D4
_080C07F4: .4byte 0x000047b8
thumb_func_end sub_80C07E4
thumb_func_start sub_80C07F8
sub_80C07F8: @ 80C07F8
lsls r0, 24
lsrs r0, 24
ldr r2, _080C0814 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
ldr r0, _080C0818 @ =gUnknown_20399D4
ldr r0, [r0]
ldr r2, _080C081C @ =0x000047b8
adds r0, r2
ldr r0, [r0]
str r0, [r1]
bx lr
.align 2, 0
_080C0814: .4byte gTasks
_080C0818: .4byte gUnknown_20399D4
_080C081C: .4byte 0x000047b8
thumb_func_end sub_80C07F8
thumb_func_start sub_80C0820
sub_80C0820: @ 80C0820
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0x2
bl sub_80C0E04
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080C0838
bl sub_80C25BC
_080C0838:
bl sub_80C4A04
bl sub_80C3188
bl sub_80C4348
bl sub_80C4D30
adds r0, r4, 0
bl DestroyTask
bl FreeAllWindowBuffers
ldr r0, _080C086C @ =gUnknown_20399D4
ldr r0, [r0]
ldr r1, _080C0870 @ =0x000047bc
adds r0, r1
ldr r0, [r0]
cmp r0, 0
bne _080C0878
ldr r0, _080C0874 @ =gMain
ldr r0, [r0, 0x8]
bl SetMainCallback2
b _080C087C
.align 2, 0
_080C086C: .4byte gUnknown_20399D4
_080C0870: .4byte 0x000047bc
_080C0874: .4byte gMain
_080C0878:
bl SetMainCallback2
_080C087C:
ldr r4, _080C0894 @ =gUnknown_20399D4
ldr r0, [r4]
cmp r0, 0
beq _080C088C
bl Free
movs r0, 0
str r0, [r4]
_080C088C:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C0894: .4byte gUnknown_20399D4
thumb_func_end sub_80C0820
thumb_func_start sub_80C0898
sub_80C0898: @ 80C0898
push {r4,lr}
ldr r4, _080C08B0 @ =gUnknown_20399D4
ldr r0, [r4]
cmp r0, 0
beq _080C08AA
bl Free
movs r0, 0
str r0, [r4]
_080C08AA:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C08B0: .4byte gUnknown_20399D4
thumb_func_end sub_80C0898
thumb_func_start sub_80C08B4
sub_80C08B4: @ 80C08B4
push {lr}
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
pop {r0}
bx r0
thumb_func_end sub_80C08B4
thumb_func_start sub_80C08CC
sub_80C08CC: @ 80C08CC
push {lr}
bl LoadOam
bl ProcessSpriteCopyRequests
bl TransferPlttBuffer
pop {r0}
bx r0
thumb_func_end sub_80C08CC
thumb_func_start sub_80C08E0
sub_80C08E0: @ 80C08E0
push {lr}
movs r0, 0
bl SetVBlankCallback
movs r0, 0
bl SetHBlankCallback
pop {r0}
bx r0
thumb_func_end sub_80C08E0
thumb_func_start sub_80C08F4
sub_80C08F4: @ 80C08F4
push {lr}
ldr r0, _080C0900 @ =sub_80C08CC
bl SetVBlankCallback
pop {r0}
bx r0
.align 2, 0
_080C0900: .4byte sub_80C08CC
thumb_func_end sub_80C08F4
thumb_func_start sub_80C0904
sub_80C0904: @ 80C0904
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, _080C0A18 @ =0x040000d4
movs r5, 0x80
lsls r5, 5
ldr r7, _080C0A1C @ =0x81000800
movs r0, 0x81
lsls r0, 24
mov r12, r0
_080C092A:
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 _080C092A
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, _080C0A18 @ =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, 0
bl ResetBgsAndClearDma3BusyFlags
ldr r1, _080C0A20 @ =gUnknown_83F1A50
movs r0, 0
movs r2, 0x4
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, _080C0A24 @ =gUnknown_83F1A60
bl InitWindows
bl DeactivateAllTextPrinters
ldr r1, _080C0A28 @ =0x00006040
movs r0, 0
bl SetGpuReg
bl sub_80C0A2C
bl sub_80C0AB8
add sp, 0x8
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080C0A18: .4byte 0x040000d4
_080C0A1C: .4byte 0x81000800
_080C0A20: .4byte gUnknown_83F1A50
_080C0A24: .4byte gUnknown_83F1A60
_080C0A28: .4byte 0x00006040
thumb_func_end sub_80C0904
thumb_func_start sub_80C0A2C
sub_80C0A2C: @ 80C0A2C
push {r4,lr}
ldr r4, _080C0A5C @ =gUnknown_20399D4
ldr r1, [r4]
ldr r0, _080C0A60 @ =0x00001796
adds r1, r0
movs r0, 0
bl SetBgTilemapBuffer
ldr r1, [r4]
ldr r0, _080C0A64 @ =0x00002796
adds r1, r0
movs r0, 0x1
bl SetBgTilemapBuffer
ldr r1, [r4]
ldr r0, _080C0A68 @ =0x00003796
adds r1, r0
movs r0, 0x2
bl SetBgTilemapBuffer
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C0A5C: .4byte gUnknown_20399D4
_080C0A60: .4byte 0x00001796
_080C0A64: .4byte 0x00002796
_080C0A68: .4byte 0x00003796
thumb_func_end sub_80C0A2C
thumb_func_start sub_80C0A6C
sub_80C0A6C: @ 80C0A6C
push {lr}
bl ResetSpriteData
bl ResetPaletteFade
bl FreeAllSpritePalettes
bl ResetTasks
bl ScanlineEffect_Stop
pop {r0}
bx r0
thumb_func_end sub_80C0A6C
thumb_func_start sub_80C0A88
sub_80C0A88: @ 80C0A88
push {lr}
lsls r0, 24
lsrs r0, 24
cmp r0, 0
beq _080C0A98
cmp r0, 0x1
beq _080C0AA6
b _080C0AB2
_080C0A98:
movs r0, 0
bl ShowBg
movs r0, 0x3
bl ShowBg
b _080C0AB2
_080C0AA6:
movs r0, 0
bl HideBg
movs r0, 0x3
bl HideBg
_080C0AB2:
pop {r0}
bx r0
thumb_func_end sub_80C0A88
thumb_func_start sub_80C0AB8
sub_80C0AB8: @ 80C0AB8
push {r4,lr}
+142 -5
View File
@@ -1,5 +1,7 @@
#include "global.h"
#include "palette.h"
#include "gpu_regs.h"
#include "scanline_effect.h"
#include "task.h"
#include "malloc.h"
#include "overworld.h"
@@ -17,7 +19,10 @@ struct UnkStruct_20399D4
{
u8 filler_0000[0x0026];
u16 field_0026[5][600];
u8 filler_1796[0x3000];
// Inefficiency: these should be u8 or have half the elements each
u16 field_1796[BG_SCREEN_SIZE];
u16 field_2796[BG_SCREEN_SIZE];
u16 field_3796[BG_SCREEN_SIZE];
u8 field_4796;
u8 field_4797[4];
u8 field_479B;
@@ -54,8 +59,10 @@ void sub_80C08B4(void);
void sub_80C08E0(void);
void sub_80C08F4(void);
void sub_80C0904(void);
void sub_80C0A2C(void);
void sub_80C0A6C(void);
void sub_80C0A88(u8 a0);
void sub_80C0AB8(void);
void sub_80C0B18(void);
void sub_80C0B9C(void);
void sub_80C0BB0(void);
@@ -65,25 +72,30 @@ u8 sub_80C0E20(void);
void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc);
void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc);
void sub_80C2208(u8 taskId, TaskFunc taskFunc);
void sub_80C25BC(void);
void sub_80C2C1C(u8 taskId);
void sub_80C3008(u16 a0, u16 a1);
void sub_80C3154(u8 a0);
void sub_80C3178(void);
u8 sub_80C3400(void);
u16 sub_80C3508(void);
u16 sub_80C3514(void);
u16 sub_80C3580(void);
void sub_80C3188(void);
u8 sub_80C3AC8(u8 a0);
u8 sub_80C3400(void);
u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3);
void sub_80C41D8(u16 a0, u16 a1);
void sub_80C4324(u8 a0);
void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc);
void sub_80C4348(void);
void sub_80C48BC(u8 a0, u8 a1, u8 a2);
void sub_80C4960(u8 a0, u8 a1, u8 a2);
void sub_80C4A04(void);
void sub_80C4D30(void);
void sub_80C4E18(const u8 *str);
void sub_80C4E74(const u8 *str);
void sub_80C4ED0(bool8 a0);
void sub_80C4F08(u8 taskId);
u16 sub_80C3508(void);
u16 sub_80C3514(void);
u16 sub_80C3580(void);
#include "data/text/map_section_names.h"
@@ -96,6 +108,8 @@ extern const u32 gUnknown_83F0C0C[];
extern const u32 gUnknown_83F0CF0[];
extern const u32 gUnknown_83F1978[];
extern const u32 gUnknown_83F19A0[];
extern const struct BgTemplate gUnknown_83F1A50[4];
extern const struct WindowTemplate gUnknown_83F1A60[];
extern const u8 sSeviiMapsecs[3][30];
extern const u8 gUnknown_83F1B00[3][4];
@@ -462,3 +476,126 @@ void sub_80C04E4(u8 taskId)
break;
}
}
void sub_80C07D0(TaskFunc taskFunc)
{
gUnknown_20399D4->field_47B8 = taskFunc;
}
TaskFunc sub_80C07E4(void)
{
return gUnknown_20399D4->field_47B8;
}
void sub_80C07F8(u8 taskId)
{
gTasks[taskId].func = gUnknown_20399D4->field_47B8;
}
void sub_80C0820(u8 taskId)
{
if (sub_80C0E04(2) == TRUE)
sub_80C25BC();
sub_80C4A04();
sub_80C3188();
sub_80C4348();
sub_80C4D30();
DestroyTask(taskId);
FreeAllWindowBuffers();
if (gUnknown_20399D4->field_47BC == NULL)
SetMainCallback2(gMain.savedCallback);
else
SetMainCallback2(gUnknown_20399D4->field_47BC);
if (gUnknown_20399D4 != NULL)
{
FREE_AND_SET_NULL(gUnknown_20399D4);
}
}
void sub_80C0898(void)
{
if (gUnknown_20399D4 != NULL)
{
FREE_AND_SET_NULL(gUnknown_20399D4);
}
}
void sub_80C08B4(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
void sub_80C08CC(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void sub_80C08E0(void)
{
SetVBlankCallback(NULL);
SetHBlankCallback(NULL);
}
void sub_80C08F4(void)
{
SetVBlankCallback(sub_80C08CC);
}
void sub_80C0904(void)
{
DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE);
DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ResetBgsAndClearDma3BusyFlags(FALSE);
InitBgsFromTemplates(0, gUnknown_83F1A50, NELEMS(gUnknown_83F1A50));
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(gUnknown_83F1A60);
DeactivateAllTextPrinters();
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
sub_80C0A2C();
sub_80C0AB8();
}
void sub_80C0A2C(void)
{
SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796);
SetBgTilemapBuffer(1, gUnknown_20399D4->field_2796);
SetBgTilemapBuffer(2, gUnknown_20399D4->field_3796);
}
void sub_80C0A6C(void)
{
ResetSpriteData();
ResetPaletteFade();
FreeAllSpritePalettes();
ResetTasks();
ScanlineEffect_Stop();
}
void sub_80C0A88(u8 mode)
{
switch (mode)
{
case 0:
ShowBg(0);
ShowBg(3);
break;
case 1:
HideBg(0);
HideBg(3);
break;
}
}