Decompile some subtask2 functions

This commit is contained in:
Tal Hayon
2022-04-05 20:55:43 +03:00
parent 55213bc9a4
commit 4cf2d4fe0e
5 changed files with 136 additions and 291 deletions
@@ -1,72 +0,0 @@
.syntax unified
push {lr}
bl sub_080A51F4
cmp r0, #0
beq _080A5A52
ldr r1, _080A59EC @ =gMenu
ldrb r2, [r1, #3]
movs r3, #0
ldr r0, _080A59F0 @ =gInput
ldrh r0, [r0, #2]
cmp r0, #2
beq _080A5A02
cmp r0, #2
bgt _080A59F4
cmp r0, #1
beq _080A5A0A
b _080A5A0C
.align 2, 0
_080A59EC: .4byte gMenu
_080A59F0: .4byte gInput
_080A59F4:
cmp r0, #0x40
beq _080A59FE
cmp r0, #0x80
beq _080A5A06
b _080A5A0C
_080A59FE:
movs r2, #0
b _080A5A0C
_080A5A02:
cmp r2, #0
bne _080A5A10
_080A5A06:
movs r2, #1
b _080A5A0C
_080A5A0A:
movs r3, #1
_080A5A0C:
cmp r3, #0
beq _080A5A3C
_080A5A10:
movs r0, #0xff
strh r0, [r1, #8]
cmp r2, #0
bne _080A5A2E
movs r0, #8
movs r1, #0
bl CreateDialogBox
movs r0, #2
bl SetMenuType
movs r0, #0x6a
bl SoundReq
b _080A5A52
_080A5A2E:
movs r0, #3
bl SetMenuType
movs r0, #0x6c
bl SoundReq
b _080A5A52
_080A5A3C:
ldrb r0, [r1, #3]
cmp r0, r2
beq _080A5A52
strb r2, [r1, #3]
movs r0, #0
adds r1, r2, #0
bl SetPopupState
movs r0, #0x69
bl SoundReq
_080A5A52:
pop {pc}
.syntax divided
@@ -1,68 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
bl sub_080A51F4
cmp r0, #0
beq _080A5BB6
ldr r1, _080A5B58 @ =gMenu
ldrb r4, [r1, #3]
movs r5, #0
ldr r0, _080A5B5C @ =gInput
ldrh r0, [r0, #2]
adds r6, r1, #0
cmp r0, #2
beq _080A5B6C
cmp r0, #2
bgt _080A5B60
cmp r0, #1
beq _080A5B74
b _080A5B76
.align 2, 0
_080A5B58: .4byte gMenu
_080A5B5C: .4byte gInput
_080A5B60:
cmp r0, #0x10
beq _080A5B70
cmp r0, #0x20
bne _080A5B76
movs r4, #0
b _080A5B76
_080A5B6C:
cmp r4, #0
bne _080A5B74
_080A5B70:
movs r4, #1
b _080A5B76
_080A5B74:
movs r5, #1
_080A5B76:
adds r1, r6, #0
ldrb r0, [r1, #3]
cmp r0, r4
beq _080A5B8E
strb r4, [r1, #3]
movs r0, #2
adds r1, r4, #0
bl SetPopupState
movs r0, #0x69
bl SoundReq
_080A5B8E:
cmp r5, #0
beq _080A5BB6
cmp r4, #0
bne _080A5BAA
movs r0, #7
movs r1, #0x20
bl SetFade
movs r0, #0x3c
strh r0, [r6, #8]
movs r0, #2
bl SetMenuType
b _080A5BB6
_080A5BAA:
movs r0, #0x6c
bl SoundReq
movs r0, #2
bl sub_080A4E84
_080A5BB6:
pop {r4, r5, r6, pc}
.syntax divided
@@ -1,97 +0,0 @@
.syntax unified
.ifdef EU
push {r4, r5, r6, r7, lr}
ldr r0, _080A5CDCEU @ =gOamCmd
movs r2, #0
movs r1, #0x80
lsls r1, r1, #4
strh r1, [r0, #4]
strh r2, [r0, #6]
strh r2, [r0, #8]
movs r4, #0
ldr r7, _080A5CE0 @ =gSave
adds r6, r0, #0
movs r5, #0x28
_080A5CA4:
movs r1, #1
lsls r1, r4
ldr r0, [r7, #0x40]
ands r0, r1
cmp r0, #0
bne _080A5CC8EU
lsls r1, r4, #3
ldr r0, _080A5CE4 @ =gUnk_08128DE8
adds r1, r1, r0
ldrb r0, [r1, #6]
strh r0, [r6]
ldrb r0, [r1, #7]
strh r0, [r6, #2]
movs r0, #0xfd
lsls r0, r0, #1
adds r1, r5, #0
bl DrawDirect
_080A5CC8EU:
adds r5, #3
adds r4, #1
cmp r4, #0x10
bls _080A5CA4
ldr r0, _080A5CE8 @ =gScreen
adds r0, #0x62
ldr r1, _080A5CEC @ =0x00003D3F
strh r1, [r0]
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A5CDCEU: .4byte gOamCmd
_080A5CE0: .4byte gSave
_080A5CE4: .4byte gUnk_08128DE8
_080A5CE8: .4byte gScreen
_080A5CEC: .4byte 0x00003D3F
.else
push {r4, r5, r6, r7, lr}
ldr r0, _080A64E4 @ =gOamCmd
movs r2, #0
movs r1, #0x80
lsls r1, r1, #4
strh r1, [r0, #4]
strh r2, [r0, #6]
strh r2, [r0, #8]
movs r4, #0
ldr r7, _080A64E8 @ =gSave
adds r6, r0, #0
movs r5, #0x28
_080A64B0:
movs r1, #1
lsls r1, r4
ldr r0, [r7, #0x40]
ands r0, r1
cmp r0, #0
bne _080A64D2
lsls r1, r4, #3
ldr r0, _080A64EC @ =gUnk_08128DE8
adds r1, r1, r0
ldrb r0, [r1, #6]
strh r0, [r6]
ldrb r0, [r1, #7]
strh r0, [r6, #2]
ldr r0, _080A64F0 @ =0x000001FB
adds r1, r5, #0
bl DrawDirect
_080A64D2:
adds r5, #3
adds r4, #1
cmp r4, #0x10
bls _080A64B0
ldr r0, _080A64F4 @ =gScreen
adds r0, #0x62
ldr r1, _080A64F8 @ =0x00003D3F
strh r1, [r0]
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A64E4: .4byte gOamCmd
_080A64E8: .4byte gSave
_080A64EC: .4byte gUnk_08128DE8
_080A64F0: .4byte 0x000001FB
_080A64F4: .4byte gScreen
_080A64F8: .4byte 0x00003D3F
.endif
.syntax divided
@@ -1,50 +0,0 @@
.syntax unified
push {r4, lr}
bl sub_080A4D34
movs r0, #4
bl sub_080A4DB8
bl sub_080A6290
ldr r2, _080A6590 @ =gScreen
ldrh r1, [r2]
ldr r0, _080A6594 @ =0x0000F7FF
ands r0, r1
movs r4, #0
strh r0, [r2]
ldr r0, _080A6598 @ =gPaletteBuffer
adds r0, #0xa2
ldrh r1, [r0]
movs r0, #0
bl SetColor
ldr r1, _080A659C @ =gUnk_08128F4C
ldr r0, _080A65A0 @ =gUI
ldrb r0, [r0, #3]
lsls r0, r0, #1
adds r0, r0, r1
ldrh r2, [r0]
ldr r3, _080A65A4 @ =gSave
ldrh r1, [r3, #0x20]
adds r0, r2, #0
orrs r0, r1
strh r0, [r3, #0x20]
ldr r1, _080A65A8 @ =gMenu
ldrh r0, [r1, #0x10]
ands r2, r0
strh r2, [r1, #0x12]
strh r4, [r1, #0x10]
movs r0, #0x3c
strh r0, [r1, #8]
movs r0, #1
bl SetMenuType
movs r0, #4
movs r1, #8
bl SetFade
pop {r4, pc}
.align 2, 0
_080A6590: .4byte gScreen
_080A6594: .4byte 0x0000F7FF
_080A6598: .4byte gPaletteBuffer
_080A659C: .4byte gUnk_08128F4C
_080A65A0: .4byte gUI
_080A65A4: .4byte gSave
_080A65A8: .4byte gMenu
.syntax divided
+136 -4
View File
@@ -86,6 +86,18 @@ typedef struct {
extern const struct_gUnk_08128E94 gUnk_08128E94[];
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
} gUnk_08128DE8_struct;
extern gUnk_08128DE8_struct gUnk_08128DE8[];
ASM_FUNC("asm/non_matching/subtask2/sub_080A5594.inc", void sub_080A5594())
ASM_FUNC("asm/non_matching/subtask2/sub_080A56A0.inc", void sub_080A56A0())
@@ -103,7 +115,51 @@ void sub_080A59AC(void) {
SetMenuType(1);
}
ASM_FUNC("asm/non_matching/subtask2/sub_080A59C8.inc", void sub_080A59C8())
void sub_080A59C8(void) {
u32 uVar2;
u32 bVar3;
if (!sub_080A51F4()) {
return;
}
uVar2 = gMenu.field_0x3;
bVar3 = FALSE;
switch (gInput.newKeys) {
case DPAD_UP:
uVar2 = 0;
break;
case B_BUTTON:
if (gMenu.field_0x3 == 0) {
uVar2 = 1;
} else {
bVar3 = TRUE;
}
break;
case DPAD_DOWN:
uVar2 = 1;
break;
case A_BUTTON:
bVar3 = TRUE;
break;
}
if (bVar3) {
gMenu.transitionTimer = 0xff;
if (uVar2 == 0) {
CreateDialogBox(8, 0);
SetMenuType(2);
SoundReq(SFX_TEXTBOX_SELECT);
} else {
SetMenuType(3);
SoundReq(SFX_MENU_CANCEL);
}
} else if (gMenu.field_0x3 != uVar2) {
gMenu.field_0x3 = uVar2;
SetPopupState(0, uVar2);
SoundReq(SFX_TEXTBOX_CHOICE);
}
}
void sub_080A5A54(void) {
switch (HandleSave(0)) {
@@ -160,7 +216,49 @@ void sub_080A5AF4(void) {
SetMenuType(1);
}
ASM_FUNC("asm/non_matching/subtask2/sub_080A5B34.inc", void sub_080A5B34())
void sub_080A5B34(void) {
bool32 bVar1;
u32 uVar3;
if (!sub_080A51F4()) {
return;
}
uVar3 = gMenu.field_0x3;
bVar1 = FALSE;
switch (gInput.newKeys) {
case DPAD_LEFT:
uVar3 = 0;
break;
case B_BUTTON:
if (gMenu.field_0x3 != 0) {
bVar1 = TRUE;
} else {
uVar3 = 1;
}
break;
case DPAD_RIGHT:
uVar3 = 1;
break;
case A_BUTTON:
bVar1 = TRUE;
break;
}
if (gMenu.field_0x3 != uVar3) {
gMenu.field_0x3 = uVar3;
SetPopupState(2, uVar3);
SoundReq(SFX_TEXTBOX_CHOICE);
}
if (bVar1) {
if (uVar3 == 0) {
SetFade(7, 0x20);
gMenu.transitionTimer = 0x3c;
SetMenuType(2);
} else {
SoundReq(SFX_MENU_CANCEL);
sub_080A4E84(2);
}
}
}
void sub_080A5BB8(void) {
Main* m;
@@ -344,7 +442,26 @@ void sub_080A6438(void) {
}
}
ASM_FUNC("asm/non_matching/subtask2/sub_080A6498.inc", void sub_080A6498())
void sub_080A6498(void) {
u32 i;
gOamCmd._4 = 0x800;
gOamCmd._6 = 0;
gOamCmd._8 = 0;
for (i = 0; i <= 0x10; i++) {
if ((gSave.windcrests & (1 << i)) == 0) {
gUnk_08128DE8_struct* ptr = &gUnk_08128DE8[i];
gOamCmd.x = ptr->unk6;
gOamCmd.y = ptr->unk7;
#ifdef EU
DrawDirect(0x1fa, 0x28 + 3 * i);
#else
DrawDirect(0x1fb, 0x28 + 3 * i);
#endif
}
}
gScreen.controls.windowOutsideControl = 0x3d3f;
}
void Subtask_MapHint(void) {
extern void (*const gUnk_08128E70[])(void);
@@ -357,7 +474,22 @@ void Subtask_MapHint(void) {
CopyOAM();
}
ASM_FUNC("asm/non_matching/subtask2/sub_080A6534.inc", void sub_080A6534())
void sub_080A6534(void) {
extern const u16 gUnk_08128F4C[];
u32 val;
sub_080A4D34();
sub_080A4DB8(4);
sub_080A6290();
gScreen.lcd.displayControl = gScreen.lcd.displayControl & 0xf7ff;
SetColor(0, gPaletteBuffer[0x51]);
val = gUnk_08128F4C[gUI.field_0x3];
gSave.field_0x20 |= val;
gGenericMenu.unk10.h[1] = val & gGenericMenu.unk10.h[0];
gGenericMenu.unk10.h[0] = 0;
gMenu.transitionTimer = 0x3c;
SetMenuType(1);
SetFade(4, 8);
}
ASM_FUNC("asm/non_matching/subtask2/sub_080A65AC.inc", void sub_080A65AC())