From 4517e77563b783be7672b9b2ec8391a216db2b42 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Mon, 17 Jan 2022 03:11:40 +0100 Subject: [PATCH] decomp figurine menu --- asm/non_matching/subtask/sub_080A4864.inc | 116 ++ asm/non_matching/subtask/sub_080A4978.inc | 443 +++++++ asm/non_matching/subtask/sub_080A4BA0.inc | 140 +++ asm/subtask.s | 1369 --------------------- include/sound.h | 1 + include/structures.h | 14 +- src/enemy/octorokBoss.c | 6 +- src/game.c | 4 +- src/item/itemOcarina.c | 4 +- src/manager/manager15.c | 2 +- src/manager/manager7.c | 4 +- src/npc/npc23.c | 4 +- src/object/cloud.c | 2 +- src/objectUtils.c | 2 +- src/player.c | 6 +- src/playerItem/playerItemPacciCane.c | 6 +- src/script.c | 6 +- src/subtask.c | 327 +++++ 18 files changed, 1063 insertions(+), 1393 deletions(-) create mode 100644 asm/non_matching/subtask/sub_080A4864.inc create mode 100644 asm/non_matching/subtask/sub_080A4978.inc create mode 100644 asm/non_matching/subtask/sub_080A4BA0.inc diff --git a/asm/non_matching/subtask/sub_080A4864.inc b/asm/non_matching/subtask/sub_080A4864.inc new file mode 100644 index 00000000..22af3aeb --- /dev/null +++ b/asm/non_matching/subtask/sub_080A4864.inc @@ -0,0 +1,116 @@ +.syntax unified + push {r4, r5, r6, lr} + ldr r0, _080A4894 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080A4926 + ldr r0, _080A4898 @ =gMenu + movs r5, #0x1f + ldrsb r5, [r0, r5] + ldrb r4, [r0, #0x1c] + ldr r0, _080A489C @ =gInput + ldrh r1, [r0, #4] + cmp r1, #0x20 + beq _080A48DC + cmp r1, #0x20 + bgt _080A48A0 + cmp r1, #2 + beq _080A48C0 + cmp r1, #2 + ble _080A48DE + cmp r1, #8 + beq _080A48C0 + cmp r1, #0x10 + beq _080A48D8 + b _080A48DE + .align 2, 0 +_080A4894: .4byte gFadeControl +_080A4898: .4byte gMenu +_080A489C: .4byte gInput +_080A48A0: + cmp r1, #0x80 + beq _080A48D4 + cmp r1, #0x80 + bgt _080A48AE + cmp r1, #0x40 + beq _080A48D0 + b _080A48DE +_080A48AE: + movs r0, #0x80 + lsls r0, r0, #1 + cmp r1, r0 + beq _080A48CC + movs r0, #0x80 + lsls r0, r0, #2 + cmp r1, r0 + beq _080A48C8 + b _080A48DE +_080A48C0: + movs r0, #3 + bl sub_080A7114 + b _080A48DE +_080A48C8: + subs r4, #5 + b _080A48DE +_080A48CC: + adds r4, #5 + b _080A48DE +_080A48D0: + subs r4, #1 + b _080A48DE +_080A48D4: + adds r4, #1 + b _080A48DE +_080A48D8: + adds r5, #8 + b _080A48DE +_080A48DC: + subs r5, #8 +_080A48DE: + ldr r0, _080A4928 @ =gSave + ldrb r0, [r0, #6] + movs r1, #0x88 + cmp r0, #0 + bne _080A48EA + movs r1, #0x82 +_080A48EA: + cmp r4, #0 + bgt _080A48F0 + movs r4, #1 +_080A48F0: + cmp r1, r4 + bge _080A48F6 + adds r4, r1, #0 +_080A48F6: + ldr r6, _080A492C @ =gMenu + ldrb r0, [r6, #0x1c] + cmp r0, r4 + beq _080A490E + strb r4, [r6, #0x1c] + movs r0, #0x69 + bl SoundReq + movs r0, #2 + bl sub_080A7114 + movs r5, #0 +_080A490E: + ldrb r0, [r6, #0x1e] + cmp r5, #0 + bge _080A4916 + movs r5, #0 +_080A4916: + cmp r0, r5 + bge _080A491C + adds r5, r0, #0 +_080A491C: + strb r5, [r6, #0x1f] + ldr r1, _080A4930 @ =gScreen + adds r0, r5, #0 + subs r0, #0x70 + strh r0, [r1, #0x18] +_080A4926: + pop {r4, r5, r6, pc} + .align 2, 0 +_080A4928: .4byte gSave +_080A492C: .4byte gMenu +_080A4930: .4byte gScreen +.syntax divided diff --git a/asm/non_matching/subtask/sub_080A4978.inc b/asm/non_matching/subtask/sub_080A4978.inc new file mode 100644 index 00000000..fd243abf --- /dev/null +++ b/asm/non_matching/subtask/sub_080A4978.inc @@ -0,0 +1,443 @@ +.syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r5, _080A432C @ =gOamCmd + movs r0, #0 + strh r0, [r5, #4] + strh r0, [r5, #6] + movs r0, #0x80 + lsls r0, r0, #4 + strh r0, [r5, #8] + movs r0, #0x9c + strh r0, [r5] + movs r0, #0x48 + strh r0, [r5, #2] + ldr r7, _080A4330 @ =0x000001FB + adds r0, r7, #0 + movs r1, #0 + bl DrawDirect + ldr r0, _080A4334 @ =gSave + ldrb r0, [r0, #6] + movs r2, #0x88 + cmp r0, #0 + bne _080A41C2 + movs r2, #0x82 +_080A41C2: + ldr r3, _080A4338 @ =gChooseFileState + ldrb r1, [r3, #1] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _080A4226 + ldrb r4, [r3, #0x1c] + cmp r2, r4 + blt _080A4226 + movs r6, #0xe8 + strh r6, [r5] + movs r0, #0xa0 + lsls r0, r0, #7 + adds r1, r2, #0 + bl __divsi3 + subs r1, r4, #1 + muls r0, r1, r0 + cmp r0, #0 + bge _080A41EC + adds r0, #0xff +_080A41EC: + asrs r0, r0, #8 + adds r0, #0x20 + strh r0, [r5, #2] + adds r0, r7, #0 + movs r1, #1 + bl DrawDirect + ldr r0, _080A433C @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x10 + ands r0, r1 + movs r4, #2 + cmp r0, #0 + beq _080A420A + movs r4, #4 +_080A420A: + strh r6, [r5] + movs r0, #0x1a + strh r0, [r5, #2] + adds r0, r7, #0 + adds r1, r4, #0 + bl DrawDirect + strh r6, [r5] + movs r0, #0x76 + strh r0, [r5, #2] + adds r1, r4, #1 + adds r0, r7, #0 + bl DrawDirect +_080A4226: + ldr r0, _080A433C @ =gMain + ldrh r1, [r0, #0xc] + movs r2, #0x10 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + beq _080A427C + ldr r5, _080A4338 @ =gChooseFileState + ldrb r1, [r5, #1] + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + beq _080A427C + ldrb r0, [r5, #0x1e] + cmp r0, #0 + beq _080A427C + ldr r4, _080A432C @ =gOamCmd + strh r2, [r4, #2] + movs r0, #0x1f + ldrsb r0, [r5, r0] + cmp r0, #0 + ble _080A4262 + movs r0, #6 + strh r0, [r4] + movs r0, #0x9c + strh r0, [r4, #2] + ldr r0, _080A4330 @ =0x000001FB + movs r1, #6 + bl DrawDirect +_080A4262: + ldrb r1, [r5, #0x1e] + movs r0, #0x1f + ldrsb r0, [r5, r0] + cmp r1, r0 + ble _080A427C + movs r0, #0xea + strh r0, [r4] + movs r0, #0x9c + strh r0, [r4, #2] + ldr r0, _080A4330 @ =0x000001FB + movs r1, #7 + bl DrawDirect +_080A427C: + movs r0, #0x80 + lsls r0, r0, #0x12 + ldrb r0, [r0, #7] + cmp r0, #0 + beq _080A42D0 + ldr r2, _080A4338 @ =gChooseFileState + ldrb r1, [r2, #1] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _080A42D0 + ldr r1, _080A432C @ =gOamCmd + movs r0, #0x10 + strh r0, [r1, #2] + ldrb r4, [r2, #0x1c] + movs r6, #2 + adds r7, r1, #0 + movs r5, #0x6b +_080A42A0: + strh r5, [r7] + adds r0, r4, #0 + movs r1, #0xa + bl __modsi3 + lsls r0, r0, #1 + movs r2, #0x9e + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r7, #8] + movs r0, #0 + movs r1, #9 + bl DrawDirect + adds r0, r4, #0 + movs r1, #0xa + bl __divsi3 + adds r4, r0, #0 + subs r5, #7 + subs r6, #1 + cmp r6, #0 + bge _080A42A0 +_080A42D0: + ldr r4, _080A4338 @ =gChooseFileState + ldrb r1, [r4, #1] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080A4352 + ldrb r0, [r4, #0x1c] + bl sub_080A4948 + cmp r0, #0 + beq _080A4352 + ldr r1, _080A432C @ =gOamCmd + movs r0, #0x2c + strh r0, [r1] + movs r0, #0x48 + strh r0, [r1, #2] + movs r0, #0xd4 + lsls r0, r0, #7 + strh r0, [r1, #8] + ldr r0, _080A4340 @ =0x000001F7 + ldrb r1, [r4, #0x1c] + subs r1, #1 + bl DrawDirect + ldrb r1, [r4, #0x1c] + ldrb r0, [r4, #0x1d] + cmp r0, r1 + beq _080A4352 + strb r1, [r4, #0x1d] + ldrb r4, [r4, #0x1c] + lsls r4, r4, #4 + ldr r0, _080A4344 @ =gFigurines + adds r4, r4, r0 + ldr r0, [r4] + movs r1, #0x16 + movs r2, #9 + bl LoadPalettes + ldr r0, [r4, #4] + ldr r2, [r4, #8] + cmp r2, #0 + bge _080A434CEU + ldr r1, _080A4348EU @ =0x06014000 + bl LZ77UnCompVram + b _080A4352 + .align 2, 0 +_080A432C: .4byte gOamCmd +_080A4330: .4byte 0x000001FB +_080A4334: .4byte gSave +_080A4338: .4byte gChooseFileState +_080A433C: .4byte gMain +_080A4340: .4byte 0x000001F7 +_080A4344: .4byte gFigurines +_080A4348EU: .4byte 0x06014000 +_080A434CEU: + ldr r1, _080A4358EU @ =0x06014000 + bl LoadResourceAsync +_080A4352: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A4358EU: .4byte 0x06014000 +.else + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r5, _080A4B1C @ =gOamCmd + movs r0, #0 + strh r0, [r5, #4] + strh r0, [r5, #6] + movs r0, #0x80 + lsls r0, r0, #4 + strh r0, [r5, #8] + movs r0, #0x9c + strh r0, [r5] + movs r0, #0x48 + strh r0, [r5, #2] + movs r7, #0xfe + lsls r7, r7, #1 + adds r0, r7, #0 + movs r1, #0 + bl DrawDirect + ldr r0, _080A4B20 @ =gSave + ldrb r0, [r0, #6] + movs r2, #0x88 + cmp r0, #0 + bne _080A49AC + movs r2, #0x82 +_080A49AC: + ldr r3, _080A4B24 @ =gMenu + ldrb r1, [r3, #1] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _080A4A10 + ldrb r4, [r3, #0x1c] + cmp r2, r4 + blt _080A4A10 + movs r6, #0xe8 + strh r6, [r5] + movs r0, #0xa0 + lsls r0, r0, #7 + adds r1, r2, #0 + bl __divsi3 + subs r1, r4, #1 + muls r0, r1, r0 + cmp r0, #0 + bge _080A49D6 + adds r0, #0xff +_080A49D6: + asrs r0, r0, #8 + adds r0, #0x20 + strh r0, [r5, #2] + adds r0, r7, #0 + movs r1, #1 + bl DrawDirect + ldr r0, _080A4B28 @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x10 + ands r0, r1 + movs r4, #2 + cmp r0, #0 + beq _080A49F4 + movs r4, #4 +_080A49F4: + strh r6, [r5] + movs r0, #0x1a + strh r0, [r5, #2] + adds r0, r7, #0 + adds r1, r4, #0 + bl DrawDirect + strh r6, [r5] + movs r0, #0x76 + strh r0, [r5, #2] + adds r1, r4, #1 + adds r0, r7, #0 + bl DrawDirect +_080A4A10: + ldr r0, _080A4B28 @ =gMain + ldrh r1, [r0, #0xc] + movs r2, #0x10 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + beq _080A4A6A + ldr r5, _080A4B24 @ =gMenu + ldrb r1, [r5, #1] + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + beq _080A4A6A + ldrb r0, [r5, #0x1e] + cmp r0, #0 + beq _080A4A6A + ldr r4, _080A4B1C @ =gOamCmd + strh r2, [r4, #2] + movs r0, #0x1f + ldrsb r0, [r5, r0] + cmp r0, #0 + ble _080A4A4E + movs r0, #6 + strh r0, [r4] + movs r0, #0x9c + strh r0, [r4, #2] + movs r0, #0xfe + lsls r0, r0, #1 + movs r1, #6 + bl DrawDirect +_080A4A4E: + ldrb r1, [r5, #0x1e] + movs r0, #0x1f + ldrsb r0, [r5, r0] + cmp r1, r0 + ble _080A4A6A + movs r0, #0xea + strh r0, [r4] + movs r0, #0x9c + strh r0, [r4, #2] + movs r0, #0xfe + lsls r0, r0, #1 + movs r1, #7 + bl DrawDirect +_080A4A6A: + movs r0, #0x80 + lsls r0, r0, #0x12 + ldrb r0, [r0, #7] + cmp r0, #0 + beq _080A4ABE + ldr r2, _080A4B24 @ =gMenu + ldrb r1, [r2, #1] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _080A4ABE + ldr r1, _080A4B1C @ =gOamCmd + movs r0, #0x10 + strh r0, [r1, #2] + ldrb r4, [r2, #0x1c] + movs r6, #2 + adds r7, r1, #0 + movs r5, #0x6b +_080A4A8E: + strh r5, [r7] + adds r0, r4, #0 + movs r1, #0xa + bl __modsi3 + lsls r0, r0, #1 + movs r2, #0x9e + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r7, #8] + movs r0, #0 + movs r1, #9 + bl DrawDirect + adds r0, r4, #0 + movs r1, #0xa + bl __divsi3 + adds r4, r0, #0 + subs r5, #7 + subs r6, #1 + cmp r6, #0 + bge _080A4A8E +_080A4ABE: + ldr r4, _080A4B24 @ =gMenu + ldrb r1, [r4, #1] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080A4B3A + ldrb r0, [r4, #0x1c] + bl sub_080A4948 + cmp r0, #0 + beq _080A4B3A + ldr r1, _080A4B1C @ =gOamCmd + movs r0, #0x2c + strh r0, [r1] + movs r0, #0x48 + strh r0, [r1, #2] + movs r0, #0xd4 + lsls r0, r0, #7 + strh r0, [r1, #8] + movs r0, #0xfc + lsls r0, r0, #1 + ldrb r1, [r4, #0x1c] + subs r1, #1 + bl DrawDirect + ldrb r1, [r4, #0x1c] + ldrb r0, [r4, #0x1d] + cmp r0, r1 + beq _080A4B3A + strb r1, [r4, #0x1d] + ldrb r4, [r4, #0x1c] + lsls r4, r4, #4 + ldr r0, _080A4B2C @ =gFigurines + adds r4, r4, r0 + ldr r0, [r4] + movs r1, #0x16 + movs r2, #9 + bl LoadPalettes + ldr r0, [r4, #4] + ldr r2, [r4, #8] + cmp r2, #0 + bge _080A4B34 + ldr r1, _080A4B30 @ =0x06014000 + bl LZ77UnCompVram + b _080A4B3A + .align 2, 0 +_080A4B1C: .4byte gOamCmd +_080A4B20: .4byte gSave +_080A4B24: .4byte gMenu +_080A4B28: .4byte gMain +_080A4B2C: .4byte gFigurines +_080A4B30: .4byte 0x06014000 +_080A4B34: + ldr r1, _080A4B40 @ =0x06014000 + bl LoadResourceAsync +_080A4B3A: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A4B40: .4byte 0x06014000 +.endif +.syntax divided diff --git a/asm/non_matching/subtask/sub_080A4BA0.inc b/asm/non_matching/subtask/sub_080A4BA0.inc new file mode 100644 index 00000000..1036e8af --- /dev/null +++ b/asm/non_matching/subtask/sub_080A4BA0.inc @@ -0,0 +1,140 @@ +.syntax unified + push {r4, r5, r6, lr} + sub sp, #0x54 + adds r5, r0, #0 + adds r6, r1, #0 + add r0, sp, #0x18 + movs r1, #0x30 + bl MemClear + ldr r0, _080A4C08 @ =gUnk_0812816C + mov r1, sp + movs r2, #0x18 + bl MemCopy + ldr r0, _080A4C0C @ =gUnk_08128184 + add r4, sp, #0x48 + adds r1, r4, #0 + movs r2, #0xc + bl MemCopy + lsls r1, r6, #1 + adds r1, r1, r6 + lsls r2, r1, #9 + ldr r0, [sp, #4] + adds r0, r0, r2 + str r0, [sp, #4] + mov r2, sp + mov r0, sp + lsls r1, r1, #4 + ldrh r0, [r0, #0x10] + adds r1, r1, r0 + strh r1, [r2, #0x10] + lsls r1, r6, #7 + ldr r0, [sp] + adds r0, r0, r1 + str r0, [sp] + cmp r6, #2 + bne _080A4BEE + mov r0, sp + strb r6, [r0, #0x14] +_080A4BEE: + ldr r0, _080A4C10 @ =gSave + ldrb r0, [r0, #6] + movs r1, #0x88 + cmp r0, #0 + bne _080A4BFA + movs r1, #0x82 +_080A4BFA: + cmp r5, #0 + ble _080A4C02 + cmp r1, r5 + bge _080A4C14 +_080A4C02: + movs r5, #1 + rsbs r5, r5, #0 + b _080A4C3E + .align 2, 0 +_080A4C08: .4byte gUnk_0812816C +_080A4C0C: .4byte gUnk_08128184 +_080A4C10: .4byte gSave +_080A4C14: + ldr r1, _080A4C30 @ =gUnk_020227E8 + ldr r2, _080A4C34 @ =0x00303030 + adds r0, r5, #0 + bl sub_08057044 + adds r0, r5, #0 + bl sub_080A4948 + cmp r0, #0 + bne _080A4C38 + movs r0, #0x80 + lsls r0, r0, #8 + b _080A4C3C + .align 2, 0 +_080A4C30: .4byte gUnk_020227E8 +_080A4C34: .4byte 0x00303030 +_080A4C38: + movs r0, #0x80 + lsls r0, r0, #4 +_080A4C3C: + adds r5, r5, r0 +_080A4C3E: + ldr r0, _080A4C94 @ =gMenu + lsls r1, r6, #1 + adds r0, #0x10 + adds r1, r1, r0 + ldrh r0, [r1] + cmp r0, r5 + beq _080A4CB2 + strh r5, [r1] + ldr r0, _080A4C98 @ =0x0000F00B + cmp r6, #2 + bne _080A4C56 + subs r0, #7 +_080A4C56: + ldr r1, [sp] + movs r2, #0x80 + bl MemFill16 + cmp r5, #0 + ble _080A4CAC + ldr r0, _080A4C9C @ =0x00007FFF + cmp r5, r0 + ble _080A4C6A + ldr r5, _080A4CA0 @ =0x00000889 +_080A4C6A: + adds r0, r5, #0 + cmp r5, #0 + bge _080A4C72 + adds r0, #0xff +_080A4C72: + asrs r0, r0, #8 + strb r0, [r4, #8] + strb r5, [r4, #9] + ldr r0, [sp] + adds r0, #0x16 + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #0x12 + ldrb r0, [r0, #7] + cmp r0, #0 + bne _080A4CA4 + adds r0, r4, #0 + mov r1, sp + bl sub_0805F46C + b _080A4CAC + .align 2, 0 +_080A4C94: .4byte gMenu +_080A4C98: .4byte 0x0000F00B +_080A4C9C: .4byte 0x00007FFF +_080A4CA0: .4byte 0x00000889 +_080A4CA4: + adds r0, r5, #0 + mov r1, sp + bl sub_0805F46C +_080A4CAC: + ldr r1, _080A4CB8 @ =gScreen + movs r0, #1 + strh r0, [r1, #0x32] +_080A4CB2: + add sp, #0x54 + pop {r4, r5, r6, pc} + .align 2, 0 +_080A4CB8: .4byte gScreen +.syntax divided diff --git a/asm/subtask.s b/asm/subtask.s index 738946ec..01cc01e2 100644 --- a/asm/subtask.s +++ b/asm/subtask.s @@ -6,1375 +6,6 @@ .text - thumb_func_start Subtask_FigurineMenu -Subtask_FigurineMenu: @ 0x080A45A4 -.ifdef DEMO_USA - bx lr - .align 2, 0 -.else -.ifdef DEMO_JP - bx lr - .align 2, 0 -.else - push {lr} - bl FlushSprites - ldr r0, _080A45C4 @ =gUnk_02032EC0 - ldrb r0, [r0, #3] - cmp r0, #0xff - bne _080A45D0 - ldr r1, _080A45C8 @ =gUnk_0812815C - ldr r0, _080A45CC @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - b _080A45E0 - .align 2, 0 -_080A45C4: .4byte gUnk_02032EC0 -_080A45C8: .4byte gUnk_0812815C -_080A45CC: .4byte gMenu -_080A45D0: - ldr r1, _080A4600 @ =gUnk_0812814C - ldr r0, _080A4604 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_080A45E0: - bl UpdateEntities - bl sub_0801C1D4 - bl DrawOAMCmd - bl DrawEntities - bl sub_080A4978 - bl CopyOAM - bl sub_080A4B44 - pop {pc} - .align 2, 0 -_080A4600: .4byte gUnk_0812814C -_080A4604: .4byte gMenu -.endif -.endif - - thumb_func_start sub_080A4608 -sub_080A4608: @ 0x080A4608 - push {r4, lr} - movs r0, #0x80 - bl SetBgmVolume - movs r0, #3 - bl sub_080A4DA8 - ldr r4, _080A46A0 @ =gPaletteBuffer - movs r1, #0xfb - lsls r1, r1, #1 - adds r0, r4, r1 - ldrh r1, [r0] - movs r0, #0 - bl SetColor - movs r0, #0xae - lsls r0, r0, #1 - movs r2, #0xd3 - lsls r2, r2, #1 - adds r1, r4, r2 - ldrh r1, [r1] - bl SetColor - ldr r0, _080A46A4 @ =gBG0Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - ldr r0, _080A46A8 @ =gBG3Buffer - movs r1, #0x80 - lsls r1, r1, #5 - bl MemClear - ldr r2, _080A46AC @ =gScreen - adds r1, r2, #0 - adds r1, #0x58 - movs r0, #0xf0 - strh r0, [r1] - adds r1, #4 - ldr r0, _080A46B0 @ =0x00007898 - strh r0, [r1] - adds r1, #4 - movs r0, #0x1f - strh r0, [r1] - adds r1, #2 - movs r0, #0x1d - strh r0, [r1] - movs r0, #1 - strh r0, [r2, #0x1a] - movs r2, #0xee - ldr r3, _080A46B4 @ =gMenu - movs r1, #0xf - adds r0, r3, #0 - adds r0, #0x1f -_080A4674: - strb r2, [r0] - subs r0, #1 - subs r1, #1 - cmp r1, #0 - bge _080A4674 - ldr r0, _080A46B8 @ =gUnk_02032EC0 - ldrb r1, [r0, #3] - ldr r0, _080A46BC @ =gSave - ldrb r0, [r0, #6] - movs r2, #0x88 - cmp r0, #0 - bne _080A468E - movs r2, #0x82 -_080A468E: - cmp r2, r1 - bge _080A4694 - movs r1, #1 -_080A4694: - strb r1, [r3, #0x1c] - movs r0, #4 - movs r1, #8 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080A46A0: .4byte gPaletteBuffer -_080A46A4: .4byte gBG0Buffer -_080A46A8: .4byte gBG3Buffer -_080A46AC: .4byte gScreen -_080A46B0: .4byte 0x00007898 -_080A46B4: .4byte gMenu -_080A46B8: .4byte gUnk_02032EC0 -_080A46BC: .4byte gSave - - thumb_func_start sub_080A46C0 -sub_080A46C0: @ 0x080A46C0 - push {lr} - movs r0, #0x80 - lsls r0, r0, #1 - bl SetBgmVolume - movs r0, #0x6c - bl SoundReq - movs r0, #2 - bl ClearRoomFlag - bl Subtask_Exit - pop {pc} - - thumb_func_start sub_080A46DC -sub_080A46DC: @ 0x080A46DC - push {lr} - bl sub_080A4608 - movs r0, #1 - bl sub_080A7114 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A46EC -sub_080A46EC: @ 0x080A46EC - push {lr} - ldr r0, _080A4714 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A4710 - ldr r1, _080A4718 @ =gUnk_080FC3E4 - ldr r0, _080A471C @ =gMenu - ldrb r0, [r0, #0x1c] - lsls r0, r0, #3 - adds r0, r0, r1 - ldrb r1, [r0, #7] - movs r0, #0xa2 - movs r2, #0 - bl CreateObject - movs r0, #2 - bl sub_080A7114 -_080A4710: - pop {pc} - .align 2, 0 -_080A4714: .4byte gFadeControl -_080A4718: .4byte gUnk_080FC3E4 -_080A471C: .4byte gMenu - - thumb_func_start sub_080A4720 -sub_080A4720: @ 0x080A4720 - push {r4, lr} - ldr r4, _080A4744 @ =gMenu - ldrb r0, [r4] - cmp r0, #0 - beq _080A47C4 - adds r1, r4, #0 - adds r1, #0x20 - ldrb r0, [r1] - adds r0, #1 - movs r3, #0 - strb r0, [r1] - ldrb r0, [r1] - cmp r0, #0x40 - beq _080A4748 - cmp r0, #0x80 - beq _080A4788 - b _080A475A - .align 2, 0 -_080A4744: .4byte gMenu -_080A4748: - ldr r0, _080A477C @ =gUnk_02002B0E - ldrb r1, [r4, #0x1c] - bl WriteBit - adds r1, r4, #0 - adds r1, #0x21 - strb r0, [r1] - movs r0, #1 - strb r0, [r4, #1] -_080A475A: - ldr r0, _080A4780 @ =gMenu - adds r0, #0x20 - ldrb r0, [r0] - lsrs r1, r0, #2 - cmp r1, #0x10 - bls _080A476A - movs r0, #0x20 - subs r1, r0, r1 -_080A476A: - ldr r0, _080A4784 @ =gScreen - adds r2, r0, #0 - adds r2, #0x6a - strh r1, [r2] - adds r0, #0x66 - movs r1, #0xbf - strh r1, [r0] - b _080A47C4 - .align 2, 0 -_080A477C: .4byte gUnk_02002B0E -_080A4780: .4byte gMenu -_080A4784: .4byte gScreen -_080A4788: - ldr r2, _080A47C8 @ =gScreen - adds r0, r2, #0 - adds r0, #0x6a - strh r3, [r0] - subs r0, #4 - strh r3, [r0] - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #6 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - movs r0, #3 - bl sub_080A7114 - ldr r0, _080A47CC @ =gUnk_0812813C - bl sub_080A70AC - movs r0, #0x15 - strb r0, [r4, #1] - adds r0, r4, #0 - adds r0, #0x21 - ldrb r0, [r0] - movs r1, #0x6d - cmp r0, #0 - bne _080A47BE - adds r1, #0x9c -_080A47BE: - adds r0, r1, #0 - bl SoundReq -_080A47C4: - pop {r4, pc} - .align 2, 0 -_080A47C8: .4byte gScreen -_080A47CC: .4byte gUnk_0812813C - - thumb_func_start sub_080A47D0 -sub_080A47D0: @ 0x080A47D0 - push {r4, lr} - ldr r0, _080A47EC @ =gMenu - movs r4, #0x1f - ldrsb r4, [r0, r4] - ldr r0, _080A47F0 @ =gInput - ldrh r0, [r0, #4] - cmp r0, #8 - beq _080A47FE - cmp r0, #8 - bgt _080A47F4 - cmp r0, #2 - beq _080A47FE - b _080A480A - .align 2, 0 -_080A47EC: .4byte gMenu -_080A47F0: .4byte gInput -_080A47F4: - cmp r0, #0x10 - beq _080A4804 - cmp r0, #0x20 - beq _080A4808 - b _080A480A -_080A47FE: - bl sub_080A46C0 - b _080A480A -_080A4804: - adds r4, #8 - b _080A480A -_080A4808: - subs r4, #8 -_080A480A: - ldr r1, _080A4828 @ =gMenu - ldrb r0, [r1, #0x1e] - cmp r4, #0 - bge _080A4814 - movs r4, #0 -_080A4814: - cmp r0, r4 - bge _080A481A - adds r4, r0, #0 -_080A481A: - strb r4, [r1, #0x1f] - ldr r1, _080A482C @ =gScreen - adds r0, r4, #0 - subs r0, #0x70 - strh r0, [r1, #0x18] - pop {r4, pc} - .align 2, 0 -_080A4828: .4byte gMenu -_080A482C: .4byte gScreen - - thumb_func_start sub_080A4830 -sub_080A4830: @ 0x080A4830 - push {lr} - bl sub_080A4608 - ldr r2, _080A4858 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #6 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _080A485C @ =gUnk_0812813C - bl sub_080A70AC - ldr r1, _080A4860 @ =gMenu - movs r0, #0xff - strb r0, [r1, #1] - movs r0, #1 - bl sub_080A7114 - pop {pc} - .align 2, 0 -_080A4858: .4byte gScreen -_080A485C: .4byte gUnk_0812813C -_080A4860: .4byte gMenu - - thumb_func_start sub_080A4864 -sub_080A4864: @ 0x080A4864 - push {r4, r5, r6, lr} - ldr r0, _080A4894 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A4926 - ldr r0, _080A4898 @ =gMenu - movs r5, #0x1f - ldrsb r5, [r0, r5] - ldrb r4, [r0, #0x1c] - ldr r0, _080A489C @ =gInput - ldrh r1, [r0, #4] - cmp r1, #0x20 - beq _080A48DC - cmp r1, #0x20 - bgt _080A48A0 - cmp r1, #2 - beq _080A48C0 - cmp r1, #2 - ble _080A48DE - cmp r1, #8 - beq _080A48C0 - cmp r1, #0x10 - beq _080A48D8 - b _080A48DE - .align 2, 0 -_080A4894: .4byte gFadeControl -_080A4898: .4byte gMenu -_080A489C: .4byte gInput -_080A48A0: - cmp r1, #0x80 - beq _080A48D4 - cmp r1, #0x80 - bgt _080A48AE - cmp r1, #0x40 - beq _080A48D0 - b _080A48DE -_080A48AE: - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - beq _080A48CC - movs r0, #0x80 - lsls r0, r0, #2 - cmp r1, r0 - beq _080A48C8 - b _080A48DE -_080A48C0: - movs r0, #3 - bl sub_080A7114 - b _080A48DE -_080A48C8: - subs r4, #5 - b _080A48DE -_080A48CC: - adds r4, #5 - b _080A48DE -_080A48D0: - subs r4, #1 - b _080A48DE -_080A48D4: - adds r4, #1 - b _080A48DE -_080A48D8: - adds r5, #8 - b _080A48DE -_080A48DC: - subs r5, #8 -_080A48DE: - ldr r0, _080A4928 @ =gSave - ldrb r0, [r0, #6] - movs r1, #0x88 - cmp r0, #0 - bne _080A48EA - movs r1, #0x82 -_080A48EA: - cmp r4, #0 - bgt _080A48F0 - movs r4, #1 -_080A48F0: - cmp r1, r4 - bge _080A48F6 - adds r4, r1, #0 -_080A48F6: - ldr r6, _080A492C @ =gMenu - ldrb r0, [r6, #0x1c] - cmp r0, r4 - beq _080A490E - strb r4, [r6, #0x1c] - movs r0, #0x69 - bl SoundReq - movs r0, #2 - bl sub_080A7114 - movs r5, #0 -_080A490E: - ldrb r0, [r6, #0x1e] - cmp r5, #0 - bge _080A4916 - movs r5, #0 -_080A4916: - cmp r0, r5 - bge _080A491C - adds r5, r0, #0 -_080A491C: - strb r5, [r6, #0x1f] - ldr r1, _080A4930 @ =gScreen - adds r0, r5, #0 - subs r0, #0x70 - strh r0, [r1, #0x18] -_080A4926: - pop {r4, r5, r6, pc} - .align 2, 0 -_080A4928: .4byte gSave -_080A492C: .4byte gMenu -_080A4930: .4byte gScreen - - thumb_func_start sub_080A4934 -sub_080A4934: @ 0x080A4934 - push {lr} - movs r0, #1 - bl sub_080A7114 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A4940 -sub_080A4940: @ 0x080A4940 - push {lr} - bl sub_080A46C0 - pop {pc} - - thumb_func_start sub_080A4948 -sub_080A4948: @ 0x080A4948 - push {r4, lr} - adds r1, r0, #0 - movs r4, #0 - ldr r3, _080A4974 @ =gSave - ldrb r0, [r3, #6] - movs r2, #0x88 - cmp r0, #0 - bne _080A495A - movs r2, #0x82 -_080A495A: - cmp r1, #0 - bgt _080A4962 - cmp r2, r1 - blt _080A4970 -_080A4962: - adds r0, r3, #0 - adds r0, #0xce - bl ReadBit - cmp r0, #0 - beq _080A4970 - movs r4, #1 -_080A4970: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_080A4974: .4byte gSave - - thumb_func_start sub_080A4978 -sub_080A4978: @ 0x080A4978 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r5, _080A432C @ =gOamCmd - movs r0, #0 - strh r0, [r5, #4] - strh r0, [r5, #6] - movs r0, #0x80 - lsls r0, r0, #4 - strh r0, [r5, #8] - movs r0, #0x9c - strh r0, [r5] - movs r0, #0x48 - strh r0, [r5, #2] - ldr r7, _080A4330 @ =0x000001FB - adds r0, r7, #0 - movs r1, #0 - bl DrawDirect - ldr r0, _080A4334 @ =gSave - ldrb r0, [r0, #6] - movs r2, #0x88 - cmp r0, #0 - bne _080A41C2 - movs r2, #0x82 -_080A41C2: - ldr r3, _080A4338 @ =gChooseFileState - ldrb r1, [r3, #1] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080A4226 - ldrb r4, [r3, #0x1c] - cmp r2, r4 - blt _080A4226 - movs r6, #0xe8 - strh r6, [r5] - movs r0, #0xa0 - lsls r0, r0, #7 - adds r1, r2, #0 - bl __divsi3 - subs r1, r4, #1 - muls r0, r1, r0 - cmp r0, #0 - bge _080A41EC - adds r0, #0xff -_080A41EC: - asrs r0, r0, #8 - adds r0, #0x20 - strh r0, [r5, #2] - adds r0, r7, #0 - movs r1, #1 - bl DrawDirect - ldr r0, _080A433C @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x10 - ands r0, r1 - movs r4, #2 - cmp r0, #0 - beq _080A420A - movs r4, #4 -_080A420A: - strh r6, [r5] - movs r0, #0x1a - strh r0, [r5, #2] - adds r0, r7, #0 - adds r1, r4, #0 - bl DrawDirect - strh r6, [r5] - movs r0, #0x76 - strh r0, [r5, #2] - adds r1, r4, #1 - adds r0, r7, #0 - bl DrawDirect -_080A4226: - ldr r0, _080A433C @ =gMain - ldrh r1, [r0, #0xc] - movs r2, #0x10 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080A427C - ldr r5, _080A4338 @ =gChooseFileState - ldrb r1, [r5, #1] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080A427C - ldrb r0, [r5, #0x1e] - cmp r0, #0 - beq _080A427C - ldr r4, _080A432C @ =gOamCmd - strh r2, [r4, #2] - movs r0, #0x1f - ldrsb r0, [r5, r0] - cmp r0, #0 - ble _080A4262 - movs r0, #6 - strh r0, [r4] - movs r0, #0x9c - strh r0, [r4, #2] - ldr r0, _080A4330 @ =0x000001FB - movs r1, #6 - bl DrawDirect -_080A4262: - ldrb r1, [r5, #0x1e] - movs r0, #0x1f - ldrsb r0, [r5, r0] - cmp r1, r0 - ble _080A427C - movs r0, #0xea - strh r0, [r4] - movs r0, #0x9c - strh r0, [r4, #2] - ldr r0, _080A4330 @ =0x000001FB - movs r1, #7 - bl DrawDirect -_080A427C: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #0 - beq _080A42D0 - ldr r2, _080A4338 @ =gChooseFileState - ldrb r1, [r2, #1] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - beq _080A42D0 - ldr r1, _080A432C @ =gOamCmd - movs r0, #0x10 - strh r0, [r1, #2] - ldrb r4, [r2, #0x1c] - movs r6, #2 - adds r7, r1, #0 - movs r5, #0x6b -_080A42A0: - strh r5, [r7] - adds r0, r4, #0 - movs r1, #0xa - bl __modsi3 - lsls r0, r0, #1 - movs r2, #0x9e - lsls r2, r2, #4 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r7, #8] - movs r0, #0 - movs r1, #9 - bl DrawDirect - adds r0, r4, #0 - movs r1, #0xa - bl __divsi3 - adds r4, r0, #0 - subs r5, #7 - subs r6, #1 - cmp r6, #0 - bge _080A42A0 -_080A42D0: - ldr r4, _080A4338 @ =gChooseFileState - ldrb r1, [r4, #1] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080A4352 - ldrb r0, [r4, #0x1c] - bl sub_080A4948 - cmp r0, #0 - beq _080A4352 - ldr r1, _080A432C @ =gOamCmd - movs r0, #0x2c - strh r0, [r1] - movs r0, #0x48 - strh r0, [r1, #2] - movs r0, #0xd4 - lsls r0, r0, #7 - strh r0, [r1, #8] - ldr r0, _080A4340 @ =0x000001F7 - ldrb r1, [r4, #0x1c] - subs r1, #1 - bl DrawDirect - ldrb r1, [r4, #0x1c] - ldrb r0, [r4, #0x1d] - cmp r0, r1 - beq _080A4352 - strb r1, [r4, #0x1d] - ldrb r4, [r4, #0x1c] - lsls r4, r4, #4 - ldr r0, _080A4344 @ =gFigurines - adds r4, r4, r0 - ldr r0, [r4] - movs r1, #0x16 - movs r2, #9 - bl LoadPalettes - ldr r0, [r4, #4] - ldr r2, [r4, #8] - cmp r2, #0 - bge _080A434CEU - ldr r1, _080A4348EU @ =0x06014000 - bl LZ77UnCompVram - b _080A4352 - .align 2, 0 -_080A432C: .4byte gOamCmd -_080A4330: .4byte 0x000001FB -_080A4334: .4byte gSave -_080A4338: .4byte gChooseFileState -_080A433C: .4byte gMain -_080A4340: .4byte 0x000001F7 -_080A4344: .4byte gFigurines -_080A4348EU: .4byte 0x06014000 -_080A434CEU: - ldr r1, _080A4358EU @ =0x06014000 - bl LoadResourceAsync -_080A4352: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A4358EU: .4byte 0x06014000 -.else - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r5, _080A4B1C @ =gOamCmd - movs r0, #0 - strh r0, [r5, #4] - strh r0, [r5, #6] - movs r0, #0x80 - lsls r0, r0, #4 - strh r0, [r5, #8] - movs r0, #0x9c - strh r0, [r5] - movs r0, #0x48 - strh r0, [r5, #2] - movs r7, #0xfe - lsls r7, r7, #1 - adds r0, r7, #0 - movs r1, #0 - bl DrawDirect - ldr r0, _080A4B20 @ =gSave - ldrb r0, [r0, #6] - movs r2, #0x88 - cmp r0, #0 - bne _080A49AC - movs r2, #0x82 -_080A49AC: - ldr r3, _080A4B24 @ =gMenu - ldrb r1, [r3, #1] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080A4A10 - ldrb r4, [r3, #0x1c] - cmp r2, r4 - blt _080A4A10 - movs r6, #0xe8 - strh r6, [r5] - movs r0, #0xa0 - lsls r0, r0, #7 - adds r1, r2, #0 - bl __divsi3 - subs r1, r4, #1 - muls r0, r1, r0 - cmp r0, #0 - bge _080A49D6 - adds r0, #0xff -_080A49D6: - asrs r0, r0, #8 - adds r0, #0x20 - strh r0, [r5, #2] - adds r0, r7, #0 - movs r1, #1 - bl DrawDirect - ldr r0, _080A4B28 @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x10 - ands r0, r1 - movs r4, #2 - cmp r0, #0 - beq _080A49F4 - movs r4, #4 -_080A49F4: - strh r6, [r5] - movs r0, #0x1a - strh r0, [r5, #2] - adds r0, r7, #0 - adds r1, r4, #0 - bl DrawDirect - strh r6, [r5] - movs r0, #0x76 - strh r0, [r5, #2] - adds r1, r4, #1 - adds r0, r7, #0 - bl DrawDirect -_080A4A10: - ldr r0, _080A4B28 @ =gMain - ldrh r1, [r0, #0xc] - movs r2, #0x10 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080A4A6A - ldr r5, _080A4B24 @ =gMenu - ldrb r1, [r5, #1] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080A4A6A - ldrb r0, [r5, #0x1e] - cmp r0, #0 - beq _080A4A6A - ldr r4, _080A4B1C @ =gOamCmd - strh r2, [r4, #2] - movs r0, #0x1f - ldrsb r0, [r5, r0] - cmp r0, #0 - ble _080A4A4E - movs r0, #6 - strh r0, [r4] - movs r0, #0x9c - strh r0, [r4, #2] - movs r0, #0xfe - lsls r0, r0, #1 - movs r1, #6 - bl DrawDirect -_080A4A4E: - ldrb r1, [r5, #0x1e] - movs r0, #0x1f - ldrsb r0, [r5, r0] - cmp r1, r0 - ble _080A4A6A - movs r0, #0xea - strh r0, [r4] - movs r0, #0x9c - strh r0, [r4, #2] - movs r0, #0xfe - lsls r0, r0, #1 - movs r1, #7 - bl DrawDirect -_080A4A6A: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #0 - beq _080A4ABE - ldr r2, _080A4B24 @ =gMenu - ldrb r1, [r2, #1] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - beq _080A4ABE - ldr r1, _080A4B1C @ =gOamCmd - movs r0, #0x10 - strh r0, [r1, #2] - ldrb r4, [r2, #0x1c] - movs r6, #2 - adds r7, r1, #0 - movs r5, #0x6b -_080A4A8E: - strh r5, [r7] - adds r0, r4, #0 - movs r1, #0xa - bl __modsi3 - lsls r0, r0, #1 - movs r2, #0x9e - lsls r2, r2, #4 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r7, #8] - movs r0, #0 - movs r1, #9 - bl DrawDirect - adds r0, r4, #0 - movs r1, #0xa - bl __divsi3 - adds r4, r0, #0 - subs r5, #7 - subs r6, #1 - cmp r6, #0 - bge _080A4A8E -_080A4ABE: - ldr r4, _080A4B24 @ =gMenu - ldrb r1, [r4, #1] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080A4B3A - ldrb r0, [r4, #0x1c] - bl sub_080A4948 - cmp r0, #0 - beq _080A4B3A - ldr r1, _080A4B1C @ =gOamCmd - movs r0, #0x2c - strh r0, [r1] - movs r0, #0x48 - strh r0, [r1, #2] - movs r0, #0xd4 - lsls r0, r0, #7 - strh r0, [r1, #8] - movs r0, #0xfc - lsls r0, r0, #1 - ldrb r1, [r4, #0x1c] - subs r1, #1 - bl DrawDirect - ldrb r1, [r4, #0x1c] - ldrb r0, [r4, #0x1d] - cmp r0, r1 - beq _080A4B3A - strb r1, [r4, #0x1d] - ldrb r4, [r4, #0x1c] - lsls r4, r4, #4 - ldr r0, _080A4B2C @ =gFigurines - adds r4, r4, r0 - ldr r0, [r4] - movs r1, #0x16 - movs r2, #9 - bl LoadPalettes - ldr r0, [r4, #4] - ldr r2, [r4, #8] - cmp r2, #0 - bge _080A4B34 - ldr r1, _080A4B30 @ =0x06014000 - bl LZ77UnCompVram - b _080A4B3A - .align 2, 0 -_080A4B1C: .4byte gOamCmd -_080A4B20: .4byte gSave -_080A4B24: .4byte gMenu -_080A4B28: .4byte gMain -_080A4B2C: .4byte gFigurines -_080A4B30: .4byte 0x06014000 -_080A4B34: - ldr r1, _080A4B40 @ =0x06014000 - bl LoadResourceAsync -_080A4B3A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A4B40: .4byte 0x06014000 -.endif - - thumb_func_start sub_080A4B44 -sub_080A4B44: @ 0x080A4B44 - push {r4, r5, lr} - ldr r5, _080A4B9C @ =gMenu - ldrb r4, [r5, #0x1c] - ldrb r1, [r5, #1] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _080A4B5C - adds r0, r4, #0 - bl sub_080A4CBC - strb r0, [r5, #0x1e] -_080A4B5C: - ldrb r1, [r5, #1] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - beq _080A4B6E - adds r0, r4, #0 - movs r1, #2 - bl sub_080A4BA0 -_080A4B6E: - ldrb r1, [r5, #1] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080A4B98 - subs r0, r4, #2 - movs r1, #0 - bl sub_080A4BA0 - subs r0, r4, #1 - movs r1, #1 - bl sub_080A4BA0 - adds r0, r4, #1 - movs r1, #3 - bl sub_080A4BA0 - adds r0, r4, #2 - movs r1, #4 - bl sub_080A4BA0 -_080A4B98: - pop {r4, r5, pc} - .align 2, 0 -_080A4B9C: .4byte gMenu - - thumb_func_start sub_080A4BA0 -sub_080A4BA0: @ 0x080A4BA0 - push {r4, r5, r6, lr} - sub sp, #0x54 - adds r5, r0, #0 - adds r6, r1, #0 - add r0, sp, #0x18 - movs r1, #0x30 - bl MemClear - ldr r0, _080A4C08 @ =gUnk_0812816C - mov r1, sp - movs r2, #0x18 - bl MemCopy - ldr r0, _080A4C0C @ =gUnk_08128184 - add r4, sp, #0x48 - adds r1, r4, #0 - movs r2, #0xc - bl MemCopy - lsls r1, r6, #1 - adds r1, r1, r6 - lsls r2, r1, #9 - ldr r0, [sp, #4] - adds r0, r0, r2 - str r0, [sp, #4] - mov r2, sp - mov r0, sp - lsls r1, r1, #4 - ldrh r0, [r0, #0x10] - adds r1, r1, r0 - strh r1, [r2, #0x10] - lsls r1, r6, #7 - ldr r0, [sp] - adds r0, r0, r1 - str r0, [sp] - cmp r6, #2 - bne _080A4BEE - mov r0, sp - strb r6, [r0, #0x14] -_080A4BEE: - ldr r0, _080A4C10 @ =gSave - ldrb r0, [r0, #6] - movs r1, #0x88 - cmp r0, #0 - bne _080A4BFA - movs r1, #0x82 -_080A4BFA: - cmp r5, #0 - ble _080A4C02 - cmp r1, r5 - bge _080A4C14 -_080A4C02: - movs r5, #1 - rsbs r5, r5, #0 - b _080A4C3E - .align 2, 0 -_080A4C08: .4byte gUnk_0812816C -_080A4C0C: .4byte gUnk_08128184 -_080A4C10: .4byte gSave -_080A4C14: - ldr r1, _080A4C30 @ =gUnk_020227E8 - ldr r2, _080A4C34 @ =0x00303030 - adds r0, r5, #0 - bl sub_08057044 - adds r0, r5, #0 - bl sub_080A4948 - cmp r0, #0 - bne _080A4C38 - movs r0, #0x80 - lsls r0, r0, #8 - b _080A4C3C - .align 2, 0 -_080A4C30: .4byte gUnk_020227E8 -_080A4C34: .4byte 0x00303030 -_080A4C38: - movs r0, #0x80 - lsls r0, r0, #4 -_080A4C3C: - adds r5, r5, r0 -_080A4C3E: - ldr r0, _080A4C94 @ =gMenu - lsls r1, r6, #1 - adds r0, #0x10 - adds r1, r1, r0 - ldrh r0, [r1] - cmp r0, r5 - beq _080A4CB2 - strh r5, [r1] - ldr r0, _080A4C98 @ =0x0000F00B - cmp r6, #2 - bne _080A4C56 - subs r0, #7 -_080A4C56: - ldr r1, [sp] - movs r2, #0x80 - bl MemFill16 - cmp r5, #0 - ble _080A4CAC - ldr r0, _080A4C9C @ =0x00007FFF - cmp r5, r0 - ble _080A4C6A - ldr r5, _080A4CA0 @ =0x00000889 -_080A4C6A: - adds r0, r5, #0 - cmp r5, #0 - bge _080A4C72 - adds r0, #0xff -_080A4C72: - asrs r0, r0, #8 - strb r0, [r4, #8] - strb r5, [r4, #9] - ldr r0, [sp] - adds r0, #0x16 - str r0, [sp] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #0 - bne _080A4CA4 - adds r0, r4, #0 - mov r1, sp - bl sub_0805F46C - b _080A4CAC - .align 2, 0 -_080A4C94: .4byte gMenu -_080A4C98: .4byte 0x0000F00B -_080A4C9C: .4byte 0x00007FFF -_080A4CA0: .4byte 0x00000889 -_080A4CA4: - adds r0, r5, #0 - mov r1, sp - bl sub_0805F46C -_080A4CAC: - ldr r1, _080A4CB8 @ =gScreen - movs r0, #1 - strh r0, [r1, #0x32] -_080A4CB2: - add sp, #0x54 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A4CB8: .4byte gScreen - - thumb_func_start sub_080A4CBC -sub_080A4CBC: @ 0x080A4CBC - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r1, _080A4D0C @ =gMenu - ldrb r0, [r1, #0x1a] - cmp r0, r6 - beq _080A4CFE - strb r6, [r1, #0x1a] - ldr r4, _080A4D10 @ =gBG1Buffer - movs r5, #0x80 - lsls r5, r5, #4 - adds r0, r4, #0 - adds r1, r5, #0 - bl MemClear - ldr r1, _080A4D14 @ =0x0600E000 - adds r0, r4, #0 - adds r2, r5, #0 - bl MemCopy - adds r0, r6, #0 - bl sub_080A4948 - cmp r0, #0 - beq _080A4CF8 - movs r1, #0x90 - lsls r1, r1, #4 - adds r0, r6, r1 - ldr r1, _080A4D18 @ =gUnk_08128190 - bl sub_0805F46C -_080A4CF8: - ldr r1, _080A4D1C @ =gScreen - movs r0, #1 - strh r0, [r1, #0x1a] -_080A4CFE: - ldr r0, _080A4D18 @ =gUnk_08128190 - ldr r0, [r0] - movs r2, #0x80 - lsls r2, r2, #1 - adds r1, r0, r2 - movs r2, #0 - b _080A4D28 - .align 2, 0 -_080A4D0C: .4byte gMenu -_080A4D10: .4byte gBG1Buffer -_080A4D14: .4byte 0x0600E000 -_080A4D18: .4byte gUnk_08128190 -_080A4D1C: .4byte gScreen -_080A4D20: - adds r1, #0x40 - adds r2, #1 - cmp r2, #0x13 - bhi _080A4D2E -_080A4D28: - ldrh r0, [r1] - cmp r0, #0 - bne _080A4D20 -_080A4D2E: - lsls r0, r2, #3 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A4D34 -sub_080A4D34: @ 0x080A4D34 - push {lr} - bl LoadGfxGroups - movs r0, #0xb5 - bl LoadPaletteGroup - ldr r1, _080A4D50 @ =gSave - adds r2, r1, #0 - adds r2, #0xaa - ldrb r0, [r2] - cmp r0, #8 - bhi _080A4D54 - movs r1, #2 - b _080A4D66 - .align 2, 0 -_080A4D50: .4byte gSave -_080A4D54: - adds r0, r1, #0 - adds r0, #0xab - ldrb r0, [r0] - ldrb r1, [r2] - subs r0, r0, r1 - movs r1, #1 - cmp r0, #8 - bgt _080A4D66 - movs r1, #0 -_080A4D66: - adds r0, r1, #0 - adds r0, #0x56 - bl LoadGfxGroup - ldr r1, _080A4D80 @ =gScreen - movs r0, #0 - strh r0, [r1, #0x2e] - strh r0, [r1, #0x30] - ldr r0, _080A4D84 @ =0x00001E0B - strh r0, [r1, #0x2c] - movs r0, #1 - strh r0, [r1, #0x32] - pop {pc} - .align 2, 0 -_080A4D80: .4byte gScreen -_080A4D84: .4byte 0x00001E0B - - thumb_func_start sub_080A4D88 -sub_080A4D88: @ 0x080A4D88 - push {lr} - ldr r0, _080A4DA4 @ =gUnk_020344A0 - movs r1, #8 - bl MemClear - movs r0, #1 - movs r1, #0 - bl MenuFadeIn - movs r0, #0x80 - bl SetBgmVolume - pop {pc} - .align 2, 0 -_080A4DA4: .4byte gUnk_020344A0 - - thumb_func_start sub_080A4DA8 -sub_080A4DA8: @ 0x080A4DA8 - push {r4, lr} - adds r4, r0, #0 - bl sub_080A4D34 - adds r0, r4, #0 - bl sub_080A4DB8 - pop {r4, pc} - - thumb_func_start sub_080A4DB8 -sub_080A4DB8: @ 0x080A4DB8 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_08056250 - ldr r0, _080A4E58 @ =gBG0Buffer - movs r4, #0x80 - lsls r4, r4, #4 - adds r1, r4, #0 - bl MemClear - ldr r0, _080A4E5C @ =gBG1Buffer - adds r1, r4, #0 - bl MemClear - ldr r0, _080A4E60 @ =gBG2Buffer - adds r1, r4, #0 - bl MemClear - ldr r0, _080A4E64 @ =gUnk_0200AF34 - movs r1, #0xc0 - lsls r1, r1, #2 - bl MemClear - ldr r4, _080A4E68 @ =gMenu - adds r0, r4, #0 - movs r1, #0x30 - bl MemClear - ldr r0, _080A4E6C @ =0x0000FFFF - strh r0, [r4, #0x2e] - ldr r0, _080A4E70 @ =gUnk_02034490 - adds r0, #2 - adds r0, r5, r0 - ldrb r0, [r0] - movs r3, #0 - strb r0, [r4, #3] - ldr r0, _080A4E74 @ =gUnk_08128A38 - lsls r5, r5, #3 - adds r5, r5, r0 - ldrb r0, [r5] - lsls r0, r0, #3 - ldr r1, _080A4E78 @ =gUnk_08128AD8 - adds r4, r0, r1 - ldr r1, _080A4E7C @ =gScreen - ldrh r2, [r4, #2] - movs r5, #0xca - lsls r5, r5, #5 - adds r0, r5, #0 - orrs r0, r2 - strh r0, [r1] - strh r3, [r1, #0xa] - strh r3, [r1, #0xc] - movs r2, #1 - strh r2, [r1, #0xe] - strh r3, [r1, #0x16] - strh r3, [r1, #0x18] - ldrh r0, [r4, #4] - strh r0, [r1, #0x14] - strh r2, [r1, #0x1a] - strh r3, [r1, #0x22] - strh r3, [r1, #0x24] - ldrh r0, [r4, #6] - strh r0, [r1, #0x20] - strh r2, [r1, #0x26] - strh r3, [r1, #0x2e] - strh r3, [r1, #0x30] - ldr r0, _080A4E80 @ =0x00001E0B - strh r0, [r1, #0x2c] - ldrb r0, [r4] - cmp r0, #0 - beq _080A4E4A - bl LoadPaletteGroup -_080A4E4A: - ldrb r0, [r4, #1] - cmp r0, #0 - beq _080A4E54 - bl LoadGfxGroup -_080A4E54: - pop {r4, r5, pc} - .align 2, 0 -_080A4E58: .4byte gBG0Buffer -_080A4E5C: .4byte gBG1Buffer -_080A4E60: .4byte gBG2Buffer -_080A4E64: .4byte gUnk_0200AF34 -_080A4E68: .4byte gMenu -_080A4E6C: .4byte 0x0000FFFF -_080A4E70: .4byte gUnk_02034490 -_080A4E74: .4byte gUnk_08128A38 -_080A4E78: .4byte gUnk_08128AD8 -_080A4E7C: .4byte gScreen -_080A4E80: .4byte 0x00001E0B - - thumb_func_start sub_080A4E84 -sub_080A4E84: @ 0x080A4E84 - ldr r1, _080A4E8C @ =gUnk_02034490 - strb r0, [r1, #0x14] - bx lr - .align 2, 0 -_080A4E8C: .4byte gUnk_02034490 - - thumb_func_start sub_080A4E90 -sub_080A4E90: @ 0x080A4E90 - ldr r1, _080A4E9C @ =gUnk_02034490 - movs r2, #0 - strb r0, [r1, #0x11] - strb r2, [r1, #0x12] - bx lr - .align 2, 0 -_080A4E9C: .4byte gUnk_02034490 - thumb_func_start Subtask_PauseMenu Subtask_PauseMenu: @ 0x080A4EA0 push {r4, lr} diff --git a/include/sound.h b/include/sound.h index 8549510f..898581d3 100644 --- a/include/sound.h +++ b/include/sound.h @@ -6,6 +6,7 @@ #define NUM_BGM 99 void SoundReq(u32 sound); +void SetBgmVolume(u32 volume); extern void EnqueueSFX(u32); void InitSound(void); diff --git a/include/structures.h b/include/structures.h index 16187958..327666d1 100644 --- a/include/structures.h +++ b/include/structures.h @@ -99,7 +99,19 @@ typedef struct { } PriorityHandler; extern PriorityHandler gPriorityHandler; -extern u8 gUnk_02034490[]; +extern struct{ + u8 unk0; + u8 unk1; + u8 unk2[0xf]; + u8 unk11; + u8 unk12; + u8 unk13; + s8 unk14; + u8 unk15; + s8 unk16; + u8 unk17; +} gUnk_02034490; +static_assert(sizeof(gUnk_02034490)==0x18); typedef struct { u8 unk0; diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c index 8514214a..a0112901 100644 --- a/src/enemy/octorokBoss.c +++ b/src/enemy/octorokBoss.c @@ -198,7 +198,7 @@ void OctorokBoss_Hit_SubAction0(Entity* this) { GET_HELPER(this)->fallingStonesTimer = 0; if (GET_BOSS_PHASE(this) == 4) { this->subAction = 4; - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; sub_08078B48(); SoundReq(SFX_BOSS_DIE); } else { @@ -505,7 +505,7 @@ ASM_FUNC("asm/non_matching/octorokBoss/OctorokBoss_Init.inc", void OctorokBoss_I void OctorokBoss_Intro(Entity* this) { sub_08078B48(); - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; sub_08036F60(this); OctorokBoss_Intro_SubActions[this->subAction](this); sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, GET_ANGLE(this)); @@ -579,7 +579,7 @@ void OctorokBoss_Intro_SubAction5(Entity* this) { this->subAction = 0; gRoomControls.unk5 = gPlayerEntity.animationState; OctorokBoss_SetAttackTimer(this); - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; SoundReq(BGM_BOSS_THEME); } } else { diff --git a/src/game.c b/src/game.c index 2bb7b65d..ebbb34c9 100644 --- a/src/game.c +++ b/src/game.c @@ -323,7 +323,7 @@ static void GameMain_ChangeRoom(void) { sub_080300C4(); gMain.substate = GAMEMAIN_UPDATE; SetPlayerControl(0); - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; #if defined(USA) || defined(DEMO_USA) if (gArea.inventoryGfxIdx != 0xff) { sub_0801855C(); @@ -1233,7 +1233,7 @@ static void InitRoomTransition(void) { bool32 CanDispEzloMessage(void) { s32 tmp = PL_STATE_WALK; - if (!(gInput.heldKeys & SELECT_BUTTON) || gPlayerState.controlMode != CONTROL_ENABLED || gUnk_02034490[0] || + if (!(gInput.heldKeys & SELECT_BUTTON) || gPlayerState.controlMode != CONTROL_ENABLED || gUnk_02034490.unk0 || gUnk_0200AF00.filler0[1]) return 0; diff --git a/src/item/itemOcarina.c b/src/item/itemOcarina.c index 5913c477..035e7e23 100644 --- a/src/item/itemOcarina.c +++ b/src/item/itemOcarina.c @@ -24,7 +24,7 @@ void OcarinaUse(ItemBehavior* this, u32 arg1) { gPlayerEntity.field_0x7a.HWORD = 2; gPlayerState.flags |= PL_USE_OCARINA; gPlayerState.field_0x27[0] = -1; - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; gPlayerState.field_0xa = (8 >> arg1) | gPlayerState.field_0xa; gPlayerState.keepFacing = (8 >> arg1) | gPlayerState.keepFacing; ResetPlayerVelocity(); @@ -41,7 +41,7 @@ NONMATCH("asm/non_matching/ocarina/OcarinaUpdate.inc", void OcarinaUpdate(ItemBe gPlayerEntity.flags |= 0x80; gPlayerState.flags &= ~PL_USE_OCARINA; gPlayerState.field_0x27[0] = 0; - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; CreateBird(); ResetPlayerEventPriority(); sub_08077E78(this, arg1); diff --git a/src/manager/manager15.c b/src/manager/manager15.c index 21cad632..598f7b04 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -306,7 +306,7 @@ void sub_0805A76C(Manager15* this) { gPlayerEntity.animationState = 4; RequestPriorityDuration((Entity*)this, 600); SetPlayerControl(0xFF); - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; gRoomControls.camera_target = NULL; sub_08077B20(); } diff --git a/src/manager/manager7.c b/src/manager/manager7.c index 5316a4a3..0560a005 100644 --- a/src/manager/manager7.c +++ b/src/manager/manager7.c @@ -83,7 +83,7 @@ void Manager7_Main(Manager7* this) { tmp2 = &gUnk_081080A4[tmp << 4]; switch (this->manager.unk_0e) { case 0: - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x1000); LoadPaletteGroup(gUnk_081081E4[tmp]); this->manager.unk_0e++; @@ -100,7 +100,7 @@ void Manager7_Main(Manager7* this) { this->manager.unk_0e++; break; case 8: - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; this->manager.unk_0e++; break; } diff --git a/src/npc/npc23.c b/src/npc/npc23.c index 40712f6f..28000a79 100644 --- a/src/npc/npc23.c +++ b/src/npc/npc23.c @@ -49,7 +49,7 @@ void sub_08066358(Entity* this) { } this->speed = 0x80; this->cutsceneBeh.HWORD = 1; - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; sub_080788E0(this); } } else { @@ -96,7 +96,7 @@ void sub_0806643C(Entity* this) { void sub_08066474(void) { if (gPlayerEntity.action != 0xf) { - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; } } diff --git a/src/object/cloud.c b/src/object/cloud.c index 5c4383d8..380ba409 100644 --- a/src/object/cloud.c +++ b/src/object/cloud.c @@ -33,7 +33,7 @@ void sub_0809F514(Entity* this) { this->spriteSettings.draw = 0; this->field_0x68.HALF.LO = 12; gRoomControls.camera_target = this; - gUnk_02034490[0] = 255; + gUnk_02034490.unk0 = 255; sub_0809F7BC(this); } diff --git a/src/objectUtils.c b/src/objectUtils.c index 646b62e5..0b219018 100644 --- a/src/objectUtils.c +++ b/src/objectUtils.c @@ -24,7 +24,7 @@ Entity* sub_080A276C(Entity* parent, u32 type, u32 type2) { PrependEntityToList(e, 6); CopyPosition(&gPlayerEntity, e); gPriorityHandler.sys_priority = 6; - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; e->field_0x68.HALF.HI = gPlayerEntity.flags; e->field_0x68.HALF.LO = gPlayerEntity.spriteSettings.draw; e->field_0x6a.HALF.LO = gPlayerEntity.iframes; diff --git a/src/player.c b/src/player.c index 6c2772d6..b49d83eb 100644 --- a/src/player.c +++ b/src/player.c @@ -325,7 +325,7 @@ extern Entity* gPlayerClones[]; extern ScriptExecutionContext gPlayerScriptExecutionContext; NONMATCH("asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc", u32 CheckPlayerInactive(void)) { - if (!((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490[0] || + if (!((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490.unk0 || (gMessage.doTextBox & 0x7F) || gSave.stats.health == 0 || !gSave.fillerD0[34] || gPlayerState.controlMode != 0 || gPriorityHandler.priority_timer != 0)) { u32 tmp = gPlayerState.framestate ? gPlayerState.framestate : gPlayerState.framestate_last; @@ -1145,7 +1145,7 @@ static void PortalStandUpdate(Entity* this) { static void PortalActivateInit(Entity* this) { gRoomControls.camera_target = NULL; - gUnk_02034490[0] = 1; + gUnk_02034490.unk0 = 1; this->subAction = 3; this->field_0xf = 0x1e; gPlayerState.animation = 0x738; @@ -1228,7 +1228,7 @@ static void sub_080717F8(Entity* this) { this->x.HALF.HI = gArea.curPortalX + sOffsets[gArea.curPortalExitDirection * 2]; this->y.HALF.HI = gArea.curPortalY + sOffsets[gArea.curPortalExitDirection * 2 + 1]; gArea.unk1A = 0xb4; - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; this->action = PLAYER_MINISH; this->subAction = 0; gPlayerState.flags = (gPlayerState.flags & ~PL_USE_PORTAL) | PL_MINISH; diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c index 3a6f533c..3f797d84 100644 --- a/src/playerItem/playerItemPacciCane.c +++ b/src/playerItem/playerItemPacciCane.c @@ -4,13 +4,12 @@ #include "common.h" #include "message.h" #include "save.h" +#include "structures.h" extern void (*const gUnk_0811B9D8[])(Entity*); void sub_080704FC(Entity*); -extern u8 gUnk_02034490[0x18]; - void PlayerItemPacciCane(Entity* this) { gUnk_0811B9D8[this->action](this); } @@ -25,6 +24,7 @@ void sub_080704D4(Entity* this) { ASM_FUNC("asm/non_matching/playerItemPacciCane/sub_080704FC.inc", void sub_080704FC(Entity* this)) +// TODO This name sounds like this does not belong in this file void ClearMenuSavestate(void) { - MemClear(gUnk_02034490, sizeof(gUnk_02034490)); + MemClear(&gUnk_02034490, sizeof(gUnk_02034490)); } diff --git a/src/script.c b/src/script.c index 02cf220a..b7dab735 100644 --- a/src/script.c +++ b/src/script.c @@ -450,11 +450,11 @@ void sub_0807DF28(void) { void sub_0807DF38(void) { gUnk_0200AF00.filler0[1] = 0xff; - gUnk_02034490[0] = 0xff; + gUnk_02034490.unk0 = 0xff; } void sub_0807DF50(void) { - gUnk_02034490[0] = 0; + gUnk_02034490.unk0 = 0; gUnk_0200AF00.filler0[1] = 0; RecoverUI(0); ResetPlayerAnimationAndAction(); @@ -1158,7 +1158,7 @@ void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context) { switch (gFuseInfo._0) { case 2: gPlayerState.controlMode = CONTROL_DISABLED; - gUnk_02034490[0] = tmp; + gUnk_02034490.unk0 = tmp; context->condition = tmp; break; case 1: diff --git a/src/subtask.c b/src/subtask.c index ea93d9b9..7b9375d2 100644 --- a/src/subtask.c +++ b/src/subtask.c @@ -13,6 +13,7 @@ #include "npc.h" #include "enemy.h" #include "functions.h" +#include "structures.h" extern const u32 gUnk_080CA06C[]; extern const u8 gGlobalGfxAndPalettes[]; @@ -44,6 +45,14 @@ u32 sub_080A44E0(struct_02036540*, u8*, u32); struct_02036540* sub_0805F2C8(void); void sub_0805F300(struct_02036540*); u32 sub_0805F76C(u8*, struct_02036540*); +void sub_080A4978(void); +void sub_080A4B44(void); +void sub_080A4DA8(u32); +u32 sub_080A4CBC(u32); +void sub_080A4BA0(u32, u32); +void sub_0805F46C(u32, const u16**); +void sub_080A4DB8(u32); +void sub_08056250(void); extern void (*const gUnk_081280C4[])(void); extern const u8 gUnk_081280EE[]; @@ -89,6 +98,30 @@ typedef struct { extern u8 gTextGfxBuffer[]; extern u8 gUnk_02002AC0[]; +extern const struct { + u8 filler[7]; + u8 unk7; +} gUnk_080FC3E4[]; + +extern u32 gUnk_02002B0E; +extern const KeyButtonLayout gUnk_0812813C; +extern const u16* gUnk_08128190; +extern u8 gUnk_020344A0[8]; +typedef struct { + u8 unk0; + u8 unk1; + u16 unk2; + u16 unk4; + u16 unk6; +} struct_08128AD8; +extern const struct_08128AD8 gUnk_08128AD8[]; + +extern const struct { + u8 unk0; + u8 filler[3]; + void (*func)(void); +} gUnk_08128A38[]; + void Subtask_KinstoneMenu(void) { #if !(defined(DEMO_USA) || defined(DEMO_JP)) gRoomTransition.player_status.field_0x24[8] = 2; @@ -626,3 +659,297 @@ void sub_080A4528(void) { entity->hitbox = NULL; } } + +extern void (*const gUnk_0812815C[])(void); +extern void (*const gUnk_0812814C[])(void); + +void Subtask_FigurineMenu(void) { +#ifndef DEMO + FlushSprites(); + if (gUnk_02032EC0.field_0x3 == 0xff) { + gUnk_0812815C[gMenu.menuType](); + } else { + gUnk_0812814C[gMenu.menuType](); + } + UpdateEntities(); + sub_0801C1D4(); + DrawOAMCmd(); + DrawEntities(); + sub_080A4978(); + CopyOAM(); + sub_080A4B44(); +#endif +} + +void sub_080A4608(void) { + s32 iVar2; + + SetBgmVolume(0x80); + sub_080A4DA8(3); + SetColor(0, gPaletteBuffer[0xfb]); + SetColor(0x15c, gPaletteBuffer[0xd3]); + MemClear(&gBG0Buffer, 0x800); + MemClear(&gBG3Buffer, 0x1000); + gScreen.controls.window0HorizontalDimensions = 0xf0; + gScreen.controls.window0VerticalDimensions = 0x7898; + gScreen.controls.windowInsideControl = 0x1f; + gScreen.controls.windowOutsideControl = 0x1d; + gScreen.bg1.updated = 1; + for (iVar2 = 0; iVar2 < 0x10; iVar2++) { + gMenu.unk10.a[iVar2] = 0xee; + } + { + int r0, r1, r2; + + r1 = gUnk_02032EC0.field_0x3; + r0 = gSave.unk6; + r2 = 0x88; + if (r0 == 0) { + r2 = 0x82; + } + if (r2 < r1) { + r1 = 1; + } + gMenu.unk1c = r1; + } + SetFade(4, 8); +} + +void sub_080A46C0(void) { + SetBgmVolume(0x100); + SoundReq(SFX_MENU_CANCEL); + ClearRoomFlag(2); + Subtask_Exit(); +} + +void sub_080A46DC(void) { + sub_080A4608(); + sub_080A7114(1); +} + +void sub_080A46EC(void) { + if (gFadeControl.active == 0) { + CreateObject(0xa2, gUnk_080FC3E4[gMenu.unk1c].unk7, 0); + sub_080A7114(2); + } +} + +void sub_080A4720(void) { + u32 bVar1; + Sound sound; + + if (gMenu.field_0x0 != 0) { + gMenu.unk20 += 1; + switch (gMenu.unk20) { + case 0x40: + gMenu.unk21 = WriteBit(&gUnk_02002B0E, gMenu.unk1c); + gMenu.column_idx = 1; + default: + bVar1 = gMenu.unk20 >> 2; + if (0x10 < bVar1) { + bVar1 = 0x20 - bVar1; + } + gScreen.controls.layerBrightness = bVar1; + gScreen.controls.layerFXControl = 0xbf; + break; + case 0x80: + gScreen.controls.layerBrightness = 0; + gScreen.controls.layerFXControl = 0; + gScreen.lcd.displayControl |= 0x2000; + sub_080A7114(3); + sub_080A70AC((KeyButtonLayout*)&gUnk_0812813C); + gMenu.column_idx = 0x15; + if (gMenu.unk21 == 0) { + sound = SFX_109; + } else { + sound = SFX_MENU_ERROR; + } + SoundReq(sound); + return; + } + } +} + +void sub_080A47D0(void) { + s32 uVar1; + s32 t; + + uVar1 = gMenu.unk1f; + switch (gInput.unk4) { + case 2: + case 8: + sub_080A46C0(); + break; + case 0x10: + uVar1 += 8; + break; + case 0x20: + uVar1 -= 8; + break; + } + t = gMenu.unk1e; + if (uVar1 < 0) { + uVar1 = 0; + } + if (t < uVar1) { + uVar1 = t; + } + gMenu.unk1f = uVar1; + gScreen.bg1.yOffset = uVar1 - 0x70; +} + +void sub_080A4830(void) { + sub_080A4608(); + gScreen.lcd.displayControl |= 0x2000; + sub_080A70AC(&gUnk_0812813C); + gMenu.column_idx = 0xff; + sub_080A7114(1); +} + +ASM_FUNC("asm/non_matching/subtask/sub_080A4864.inc", void sub_080A4864(Entity* this)) + +void sub_080A4934(void) { + sub_080A7114(1); +} + +void sub_080A4940(void) { + sub_080A46C0(); +} + +u32 sub_080A4948(s32 param_1) { + s32 iVar1; + u32 uVar2; + + uVar2 = 0; + iVar1 = gSave.unk6 == 0 ? 0x82 : 0x88; + if ((0 < param_1) || (iVar1 >= param_1)) { + if (ReadBit((u32*)&gSave.stats.filler4[4], param_1)) { + uVar2 = 1; + } + } + return uVar2; +} + +ASM_FUNC("asm/non_matching/subtask/sub_080A4978.inc", void sub_080A4978(void)) + +void sub_080A4B44(void) { + u32 uVar1; + + uVar1 = gMenu.unk1c; + if ((gMenu.column_idx & 0x10) != 0) { + gMenu.unk1e = sub_080A4CBC(uVar1); + } + if ((gMenu.column_idx & 4) != 0) { + sub_080A4BA0(uVar1, 2); + } + if ((gMenu.column_idx & 8) != 0) { + sub_080A4BA0(uVar1 - 2, 0); + sub_080A4BA0(uVar1 - 1, 1); + sub_080A4BA0(uVar1 + 1, 3); + sub_080A4BA0(uVar1 + 2, 4); + } +} + +ASM_FUNC("asm/non_matching/subtask/sub_080A4BA0.inc", void sub_080A4BA0(u32 unk1, u32 unk2)) + +u32 sub_080A4CBC(u32 param_1) { + s32 iVar1; + const u16* psVar2; + u32 uVar3; + + if (gMenu.unk1a.HALF.LO != param_1) { + gMenu.unk1a.HALF.LO = param_1; + MemClear(&gBG1Buffer, 0x800); + MemCopy(&gBG1Buffer, (void*)0x600e000, 0x800); + iVar1 = sub_080A4948(param_1); + if (iVar1 != 0) { + sub_0805F46C(param_1 + 0x900, &gUnk_08128190); + } + gScreen.bg1.updated = 1; + } + psVar2 = gUnk_08128190 + 0x80; + + for (uVar3 = 0; uVar3 < 0x14; uVar3++) { + if (*psVar2 == 0) + break; + psVar2 += 0x20; + } + return uVar3 << 3; +} + +void sub_080A4D34(void) { + s32 iVar1; + + LoadGfxGroups(); + LoadPaletteGroup(0xb5); + if (gSave.stats.health <= 8) { + iVar1 = 2; + } else { + s32 missingHealth = gSave.stats.maxHealth - gSave.stats.health; + if (missingHealth < 9) { + iVar1 = 0; + } else { + iVar1 = 1; + } + } + LoadGfxGroup(iVar1 + 0x56); + gScreen.bg3.xOffset = 0; + gScreen.bg3.yOffset = 0; + gScreen.bg3.control = 0x1e0b; + gScreen.bg3.updated = 1; +} + +void sub_080A4D88(void) { + MemClear(gUnk_020344A0, sizeof(gUnk_020344A0)); + MenuFadeIn(1, 0); + SetBgmVolume(0x80); +} + +void sub_080A4DA8(u32 param_1) { + sub_080A4D34(); + sub_080A4DB8(param_1); +} + +void sub_080A4DB8(u32 param_1) { + const struct_08128AD8* ptr; + + sub_08056250(); + MemClear(&gBG0Buffer, 0x800); + MemClear(&gBG1Buffer, 0x800); + MemClear(&gBG2Buffer, 0x800); + MemClear(gUnk_0200AF00.filler25 + 0xf, 0x300); + MemClear(&gMenu, sizeof(gMenu)); + gMenu.unk2e.HWORD = 0xffff; + gMenu.field_0x3 = gUnk_02034490.unk2[param_1]; + ptr = &gUnk_08128AD8[gUnk_08128A38[param_1].unk0]; + gScreen.lcd.displayControl = ptr->unk2 | 0x1940; + gScreen.bg0.xOffset = 0; + gScreen.bg0.yOffset = 0; + gScreen.bg0.updated = 1; + gScreen.bg1.xOffset = 0; + gScreen.bg1.yOffset = 0; + gScreen.bg1.control = ptr->unk4; + gScreen.bg1.updated = 1; + gScreen.bg2.xOffset = 0; + gScreen.bg2.yOffset = 0; + gScreen.bg2.control = ptr->unk6; + gScreen.bg2.updated = 1; + gScreen.bg3.xOffset = 0; + gScreen.bg3.yOffset = 0; + gScreen.bg3.control = 0x1e0b; + if (ptr->unk0 != 0) { + LoadPaletteGroup(ptr->unk0); + } + if (ptr->unk1 != 0) { + LoadGfxGroup(ptr->unk1); + } +} + +void sub_080A4E84(u8 param_1) { + gUnk_02034490.unk14 = param_1; +} + +void sub_080A4E90(u8 param_1) { + gUnk_02034490.unk11 = param_1; + gUnk_02034490.unk12 = 0; +}