From 8ad65efb7c228d934e515209fdff5515a30aade1 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sun, 16 Jan 2022 23:28:59 +0100 Subject: [PATCH] decomp kinstone menu --- asm/non_matching/subtask/sub_080A3C6C.inc | 172 +++ asm/non_matching/subtask/sub_080A414C.inc | 112 ++ asm/non_matching/subtask/sub_080A4494.inc | 34 + asm/subtask.s | 1294 --------------------- include/enemy.h | 1 + include/kinstone.h | 2 +- include/menu.h | 28 +- include/screen.h | 4 +- src/debug.c | 12 +- src/fileselect.c | 18 +- src/game.c | 8 +- src/object/fileScreenObjects.c | 14 +- src/subtask.c | 568 ++++++++- src/subtask2.c | 2 +- 14 files changed, 939 insertions(+), 1330 deletions(-) create mode 100644 asm/non_matching/subtask/sub_080A3C6C.inc create mode 100644 asm/non_matching/subtask/sub_080A414C.inc create mode 100644 asm/non_matching/subtask/sub_080A4494.inc diff --git a/asm/non_matching/subtask/sub_080A3C6C.inc b/asm/non_matching/subtask/sub_080A3C6C.inc new file mode 100644 index 00000000..d55c1997 --- /dev/null +++ b/asm/non_matching/subtask/sub_080A3C6C.inc @@ -0,0 +1,172 @@ + .syntax unified + push {r4, r5, lr} + ldr r0, _080A3C9C @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + beq _080A3C78 + b _080A3DA8 +_080A3C78: + ldr r5, _080A3CA0 @ =gMenu + movs r0, #2 + strb r0, [r5, #1] + adds r0, r5, #0 + adds r0, #0x28 + ldrb r0, [r0] + lsls r2, r0, #0x10 + ldr r0, [r5, #0x10] + subs r4, r2, r0 + adds r1, r4, #0 + cmp r4, #0 + bge _080A3C92 + rsbs r1, r4, #0 +_080A3C92: + ldr r0, _080A3CA4 @ =0x00001FFD + cmp r1, r0 + bhi _080A3CA8 + str r2, [r5, #0x10] + b _080A3CDE + .align 2, 0 +_080A3C9C: .4byte gFadeControl +_080A3CA0: .4byte gMenu +_080A3CA4: .4byte 0x00001FFD +_080A3CA8: + movs r0, #1 + strb r0, [r5, #1] + adds r0, r4, #0 + bl sub_08000E44 + adds r2, r0, #0 + adds r0, r4, #0 + cmp r0, #0 + bge _080A3CBE + ldr r1, _080A3D18 @ =0x0001FFFF + adds r0, r0, r1 +_080A3CBE: + asrs r4, r0, #0x11 + cmp r4, #0 + bge _080A3CC6 + rsbs r4, r4, #0 +_080A3CC6: + cmp r4, #5 + ble _080A3CCC + movs r4, #5 +_080A3CCC: + ldr r0, _080A3D1C @ =gUnk_081280EE + adds r0, r4, r0 + ldrb r1, [r0] + ldr r0, _080A3D20 @ =0x00000666 + muls r0, r2, r0 + muls r1, r0, r1 + ldr r0, [r5, #0x10] + adds r0, r0, r1 + str r0, [r5, #0x10] +_080A3CDE: + adds r3, r5, #0 + adds r3, #0x29 + ldrb r2, [r3] + ldr r0, [r5, #0x10] + adds r1, r0, #0 + cmp r0, #0 + bge _080A3CF0 + ldr r4, _080A3D24 @ =0x0000FFFF + adds r1, r0, r4 +_080A3CF0: + asrs r1, r1, #0x10 + cmp r2, r1 + beq _080A3CFE + strb r1, [r3] + movs r0, #0x69 + bl SoundReq +_080A3CFE: + ldr r2, _080A3D28 @ =gInput + ldrh r1, [r2, #2] + ldr r0, _080A3D2C @ =0x0000020A + ands r0, r1 + cmp r0, #0 + beq _080A3D30 + movs r0, #2 + bl sub_080A7114 + movs r0, #0x6c + bl SoundReq + b _080A3DA8 + .align 2, 0 +_080A3D18: .4byte 0x0001FFFF +_080A3D1C: .4byte gUnk_081280EE +_080A3D20: .4byte 0x00000666 +_080A3D24: .4byte 0x0000FFFF +_080A3D28: .4byte gInput +_080A3D2C: .4byte 0x0000020A +_080A3D30: + adds r0, r5, #0 + adds r0, #0x28 + ldrb r4, [r0] + ldrh r1, [r2, #4] + adds r5, r0, #0 + cmp r1, #0x20 + beq _080A3D56 + cmp r1, #0x20 + bgt _080A3D4C + cmp r1, #1 + beq _080A3D5E + cmp r1, #0x10 + beq _080A3D5A + b _080A3D8A +_080A3D4C: + cmp r1, #0x40 + beq _080A3D56 + cmp r1, #0x80 + beq _080A3D5A + b _080A3D8A +_080A3D56: + subs r4, #1 + b _080A3D8A +_080A3D5A: + adds r4, #1 + b _080A3D8A +_080A3D5E: + ldr r2, _080A3DAC @ =gMenu + ldrb r0, [r2, #1] + cmp r0, #2 + bne _080A3D8A + ldr r0, [r2, #0x10] + cmp r0, #0 + bge _080A3D70 + ldr r1, _080A3DB0 @ =0x0000FFFF + adds r0, r0, r1 +_080A3D70: + asrs r4, r0, #0x10 + ldr r0, _080A3DB4 @ =gSave + movs r1, #0x8c + lsls r1, r1, #1 + adds r0, r0, r1 + adds r0, r4, r0 + ldrb r1, [r0] + adds r0, r2, #0 + adds r0, #0x2a + strb r1, [r0] + movs r0, #3 + bl sub_080A7114 +_080A3D8A: + bl sub_080A3B48 + cmp r0, r4 + bgt _080A3D94 + subs r4, r0, #1 +_080A3D94: + cmp r0, #1 + bgt _080A3D9A + movs r4, #0 +_080A3D9A: + cmp r4, #0 + bge _080A3DA0 + movs r4, #0 +_080A3DA0: + ldrb r0, [r5] + cmp r0, r4 + beq _080A3DA8 + strb r4, [r5] +_080A3DA8: + pop {r4, r5, pc} + .align 2, 0 +_080A3DAC: .4byte gMenu +_080A3DB0: .4byte 0x0000FFFF +_080A3DB4: .4byte gSave + .syntax divided diff --git a/asm/non_matching/subtask/sub_080A414C.inc b/asm/non_matching/subtask/sub_080A414C.inc new file mode 100644 index 00000000..56c64cc5 --- /dev/null +++ b/asm/non_matching/subtask/sub_080A414C.inc @@ -0,0 +1,112 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r4, _080A4210 @ =gOamCmd + movs r0, #0 + strh r0, [r4, #4] + strh r0, [r4, #6] + ldr r0, _080A4214 @ =gMenu + ldrh r0, [r0, #0x10] + ldr r1, _080A4218 @ =0x00000B21 + bl __divsi3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + movs r5, #3 + rsbs r5, r5, #0 + movs r1, #0xff + mov r8, r1 + adds r7, r4, #0 + ldr r6, _080A421C @ =gSineTable + rsbs r0, r0, #0 + adds r4, r0, #0 + subs r4, #0x45 + ldr r2, _080A4220 @ =gUnk_02002B6B + mov sb, r2 +_080A4180: + adds r2, r4, #0 + mov r3, r8 + ands r2, r3 + lsls r0, r2, #1 + adds r0, r0, r6 + movs r3, #0 + ldrsh r1, [r0, r3] + lsls r0, r1, #4 + adds r0, r0, r1 + lsls r0, r0, #2 + cmp r0, #0 + bge _080A419A + adds r0, #0xff +_080A419A: + asrs r0, r0, #8 + adds r0, #0x4f + strh r0, [r7, #2] + adds r0, r2, #0 + adds r0, #0x40 + mov r1, r8 + ands r0, r1 + lsls r0, r0, #1 + adds r0, r0, r6 + movs r2, #0 + ldrsh r1, [r0, r2] + lsls r0, r1, #5 + adds r0, r0, r1 + lsls r0, r0, #1 + cmp r0, #0 + bge _080A41BC + adds r0, #0xff +_080A41BC: + asrs r0, r0, #8 + subs r0, #0x10 + strh r0, [r7] + ldr r2, _080A4214 @ =gMenu + ldr r0, [r2, #0x10] + cmp r0, #0 + bge _080A41CE + ldr r3, _080A4224 @ =0x0000FFFF + adds r0, r0, r3 +_080A41CE: + asrs r0, r0, #0x10 + adds r3, r0, r5 + cmp r3, #0 + blt _080A4200 + mov r1, sb + adds r0, r3, r1 + ldrb r1, [r0] + ldr r0, _080A4228 @ =gSave + cmp r5, #0 + bne _080A41EE + ldrb r2, [r2, #1] + cmp r2, #4 + bgt _080A41EE + cmp r2, #3 + blt _080A41EE + subs r1, #1 +_080A41EE: + cmp r1, #0 + ble _080A4200 + movs r2, #0x8c + lsls r2, r2, #1 + adds r0, r0, r2 + adds r0, r3, r0 + ldrb r0, [r0] + bl sub_080A42E0 +_080A4200: + adds r4, #0x17 + adds r5, #1 + cmp r5, #3 + ble _080A4180 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A4210: .4byte gOamCmd +_080A4214: .4byte gMenu +_080A4218: .4byte 0x00000B21 +_080A421C: .4byte gSineTable +_080A4220: .4byte gUnk_02002B6B +_080A4224: .4byte 0x0000FFFF +_080A4228: .4byte gSave + .syntax divided diff --git a/asm/non_matching/subtask/sub_080A4494.inc b/asm/non_matching/subtask/sub_080A4494.inc new file mode 100644 index 00000000..ddb6aaa1 --- /dev/null +++ b/asm/non_matching/subtask/sub_080A4494.inc @@ -0,0 +1,34 @@ + .syntax unified + push {r4, r5, lr} + bl sub_0805F2C8 + adds r4, r0, #0 + cmp r4, #0 + beq _080A44D0 + ldr r0, _080A44D4 @ =gTextGfxBuffer + str r0, [r4, #8] + movs r1, #0 + strb r1, [r4, #2] + movs r0, #5 + strb r0, [r4, #3] + strb r1, [r4, #1] + ldr r1, _080A44D8 @ =gUnk_02002AC0 + adds r0, r4, #0 + movs r2, #0x80 + bl sub_080A44E0 + ldr r0, _080A44DC @ =gFuseInfo + ldr r0, [r0, #0xc] + bl sub_08002632 + adds r0, r4, #0 + movs r2, #0xa0 + bl sub_080A44E0 + adds r5, r0, #0 + adds r0, r4, #0 + bl sub_0805F300 +_080A44D0: + adds r0, r5, #0 + pop {r4, r5, pc} + .align 2, 0 +_080A44D4: .4byte gTextGfxBuffer +_080A44D8: .4byte gUnk_02002AC0 +_080A44DC: .4byte gFuseInfo + .syntax divided diff --git a/asm/subtask.s b/asm/subtask.s index a643ad7b..738946ec 100644 --- a/asm/subtask.s +++ b/asm/subtask.s @@ -6,1300 +6,6 @@ .text - thumb_func_start sub_080A3C6C -sub_080A3C6C: @ 0x080A3C6C - push {r4, r5, lr} - ldr r0, _080A3C9C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - beq _080A3C78 - b _080A3DA8 -_080A3C78: - ldr r5, _080A3CA0 @ =gMenu - movs r0, #2 - strb r0, [r5, #1] - adds r0, r5, #0 - adds r0, #0x28 - ldrb r0, [r0] - lsls r2, r0, #0x10 - ldr r0, [r5, #0x10] - subs r4, r2, r0 - adds r1, r4, #0 - cmp r4, #0 - bge _080A3C92 - rsbs r1, r4, #0 -_080A3C92: - ldr r0, _080A3CA4 @ =0x00001FFD - cmp r1, r0 - bhi _080A3CA8 - str r2, [r5, #0x10] - b _080A3CDE - .align 2, 0 -_080A3C9C: .4byte gFadeControl -_080A3CA0: .4byte gMenu -_080A3CA4: .4byte 0x00001FFD -_080A3CA8: - movs r0, #1 - strb r0, [r5, #1] - adds r0, r4, #0 - bl sub_08000E44 - adds r2, r0, #0 - adds r0, r4, #0 - cmp r0, #0 - bge _080A3CBE - ldr r1, _080A3D18 @ =0x0001FFFF - adds r0, r0, r1 -_080A3CBE: - asrs r4, r0, #0x11 - cmp r4, #0 - bge _080A3CC6 - rsbs r4, r4, #0 -_080A3CC6: - cmp r4, #5 - ble _080A3CCC - movs r4, #5 -_080A3CCC: - ldr r0, _080A3D1C @ =gUnk_081280EE - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, _080A3D20 @ =0x00000666 - muls r0, r2, r0 - muls r1, r0, r1 - ldr r0, [r5, #0x10] - adds r0, r0, r1 - str r0, [r5, #0x10] -_080A3CDE: - adds r3, r5, #0 - adds r3, #0x29 - ldrb r2, [r3] - ldr r0, [r5, #0x10] - adds r1, r0, #0 - cmp r0, #0 - bge _080A3CF0 - ldr r4, _080A3D24 @ =0x0000FFFF - adds r1, r0, r4 -_080A3CF0: - asrs r1, r1, #0x10 - cmp r2, r1 - beq _080A3CFE - strb r1, [r3] - movs r0, #0x69 - bl SoundReq -_080A3CFE: - ldr r2, _080A3D28 @ =gInput - ldrh r1, [r2, #2] - ldr r0, _080A3D2C @ =0x0000020A - ands r0, r1 - cmp r0, #0 - beq _080A3D30 - movs r0, #2 - bl sub_080A7114 - movs r0, #0x6c - bl SoundReq - b _080A3DA8 - .align 2, 0 -_080A3D18: .4byte 0x0001FFFF -_080A3D1C: .4byte gUnk_081280EE -_080A3D20: .4byte 0x00000666 -_080A3D24: .4byte 0x0000FFFF -_080A3D28: .4byte gInput -_080A3D2C: .4byte 0x0000020A -_080A3D30: - adds r0, r5, #0 - adds r0, #0x28 - ldrb r4, [r0] - ldrh r1, [r2, #4] - adds r5, r0, #0 - cmp r1, #0x20 - beq _080A3D56 - cmp r1, #0x20 - bgt _080A3D4C - cmp r1, #1 - beq _080A3D5E - cmp r1, #0x10 - beq _080A3D5A - b _080A3D8A -_080A3D4C: - cmp r1, #0x40 - beq _080A3D56 - cmp r1, #0x80 - beq _080A3D5A - b _080A3D8A -_080A3D56: - subs r4, #1 - b _080A3D8A -_080A3D5A: - adds r4, #1 - b _080A3D8A -_080A3D5E: - ldr r2, _080A3DAC @ =gMenu - ldrb r0, [r2, #1] - cmp r0, #2 - bne _080A3D8A - ldr r0, [r2, #0x10] - cmp r0, #0 - bge _080A3D70 - ldr r1, _080A3DB0 @ =0x0000FFFF - adds r0, r0, r1 -_080A3D70: - asrs r4, r0, #0x10 - ldr r0, _080A3DB4 @ =gSave - movs r1, #0x8c - lsls r1, r1, #1 - adds r0, r0, r1 - adds r0, r4, r0 - ldrb r1, [r0] - adds r0, r2, #0 - adds r0, #0x2a - strb r1, [r0] - movs r0, #3 - bl sub_080A7114 -_080A3D8A: - bl sub_080A3B48 - cmp r0, r4 - bgt _080A3D94 - subs r4, r0, #1 -_080A3D94: - cmp r0, #1 - bgt _080A3D9A - movs r4, #0 -_080A3D9A: - cmp r4, #0 - bge _080A3DA0 - movs r4, #0 -_080A3DA0: - ldrb r0, [r5] - cmp r0, r4 - beq _080A3DA8 - strb r4, [r5] -_080A3DA8: - pop {r4, r5, pc} - .align 2, 0 -_080A3DAC: .4byte gMenu -_080A3DB0: .4byte 0x0000FFFF -_080A3DB4: .4byte gSave - - thumb_func_start sub_080A3DB8 -sub_080A3DB8: @ 0x080A3DB8 - push {lr} - ldr r0, _080A3DDC @ =gMenu - ldrb r1, [r0, #1] - cmp r1, #6 - bne _080A3DEE - ldr r0, _080A3DE0 @ =gFuseInfo - strb r1, [r0] - ldrb r0, [r0, #3] - lsls r0, r0, #3 - ldr r1, _080A3DE4 @ =gUnk_080C9CBC - adds r1, r0, r1 - ldrb r0, [r1, #3] - cmp r0, #0 - beq _080A3DE8 - ldrb r1, [r1, #4] - bl MenuFadeIn - b _080A3DF8 - .align 2, 0 -_080A3DDC: .4byte gMenu -_080A3DE0: .4byte gFuseInfo -_080A3DE4: .4byte gUnk_080C9CBC -_080A3DE8: - bl Subtask_Exit - b _080A3DF8 -_080A3DEE: - ldr r1, _080A3DFC @ =gFuseInfo - movs r0, #5 - strb r0, [r1] - bl Subtask_Exit -_080A3DF8: - pop {pc} - .align 2, 0 -_080A3DFC: .4byte gFuseInfo - - thumb_func_start sub_080A3E00 -sub_080A3E00: @ 0x080A3E00 - push {lr} - ldr r1, _080A3E18 @ =gMenu - movs r0, #3 - strb r0, [r1, #1] - ldr r2, _080A3E1C @ =gUnk_081280F4 - ldrb r0, [r1, #6] - lsls r0, r0, #2 - adds r0, r0, r2 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A3E18: .4byte gMenu -_080A3E1C: .4byte gUnk_081280F4 - - thumb_func_start sub_080A3E20 -sub_080A3E20: @ 0x080A3E20 - push {lr} - ldr r2, _080A3E44 @ =gMenu - movs r0, #0 - strh r0, [r2, #0x18] - adds r1, r2, #0 - adds r1, #0x2c - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0x45 - ble _080A3E42 - movs r0, #0x46 - strb r0, [r1] - movs r0, #1 - strb r0, [r2, #6] -_080A3E42: - pop {pc} - .align 2, 0 -_080A3E44: .4byte gMenu - - thumb_func_start sub_080A3E48 -sub_080A3E48: @ 0x080A3E48 - push {r4, lr} - ldr r2, _080A3E78 @ =gUnk_080C9CBC - ldr r3, _080A3E7C @ =gMenu - adds r0, r3, #0 - adds r0, #0x2a - ldrb r0, [r0] - lsls r0, r0, #3 - adds r0, r0, r2 - ldrb r1, [r0, #5] - ldr r0, _080A3E80 @ =gFuseInfo - ldrb r0, [r0, #3] - lsls r0, r0, #3 - adds r0, r0, r2 - ldrb r0, [r0, #5] - cmp r1, r0 - beq _080A3E84 - movs r0, #0x8c - lsls r0, r0, #1 - bl SoundReq - movs r0, #4 - bl sub_080A7114 - b _080A3EC8 - .align 2, 0 -_080A3E78: .4byte gUnk_080C9CBC -_080A3E7C: .4byte gMenu -_080A3E80: .4byte gFuseInfo -_080A3E84: - movs r2, #0 - movs r0, #2 - strb r0, [r3, #6] - movs r0, #0x14 - strh r0, [r3, #8] - ldr r3, _080A3ECC @ =gScreen - ldrh r0, [r3] - movs r4, #0x80 - lsls r4, r4, #6 - adds r1, r4, #0 - orrs r0, r1 - strh r0, [r3] - adds r1, r3, #0 - adds r1, #0x58 - ldr r0, _080A3ED0 @ =0x00006887 - strh r0, [r1] - adds r1, #4 - ldr r0, _080A3ED4 @ =0x0000405F - strh r0, [r1] - adds r1, #4 - movs r0, #0x3f - strh r0, [r1] - adds r1, #2 - movs r0, #0x1f - strh r0, [r1] - adds r1, #4 - ldr r0, _080A3ED8 @ =0x00003F90 - strh r0, [r1] - adds r0, r3, #0 - adds r0, #0x6a - strh r2, [r0] - movs r0, #0xfa - bl SoundReq -_080A3EC8: - pop {r4, pc} - .align 2, 0 -_080A3ECC: .4byte gScreen -_080A3ED0: .4byte 0x00006887 -_080A3ED4: .4byte 0x0000405F -_080A3ED8: .4byte 0x00003F90 - - thumb_func_start sub_080A3EDC -sub_080A3EDC: @ 0x080A3EDC - push {lr} - ldr r2, _080A3F08 @ =gScreen - adds r1, r2, #0 - adds r1, #0x6a - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0xe - bls _080A3F04 - movs r0, #0 - strh r0, [r1] - ldrh r1, [r2] - ldr r0, _080A3F0C @ =0x0000DFFF - ands r0, r1 - strh r0, [r2] - movs r0, #5 - bl sub_080A7114 -_080A3F04: - pop {pc} - .align 2, 0 -_080A3F08: .4byte gScreen -_080A3F0C: .4byte 0x0000DFFF - - thumb_func_start sub_080A3F10 -sub_080A3F10: @ 0x080A3F10 - push {r4, lr} - ldr r2, _080A3F48 @ =gMenu - movs r0, #4 - strb r0, [r2, #1] - adds r3, r2, #0 - adds r3, #0x2c - ldrb r1, [r3] - subs r1, #3 - strb r1, [r3] - movs r4, #0x80 - lsls r4, r4, #1 - adds r0, r4, #0 - ldrh r4, [r2, #0x18] - adds r0, r0, r4 - strh r0, [r2, #0x18] - lsls r1, r1, #0x18 - cmp r1, #0 - bge _080A3F46 - movs r0, #0 - strh r0, [r2, #0x18] - strb r0, [r3] - movs r0, #1 - bl sub_080A7114 - movs r0, #0x6d - bl SoundReq -_080A3F46: - pop {r4, pc} - .align 2, 0 -_080A3F48: .4byte gMenu - - thumb_func_start sub_080A3F4C -sub_080A3F4C: @ 0x080A3F4C - push {lr} - ldr r1, _080A3F60 @ =gUnk_08128100 - ldr r0, _080A3F64 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A3F60: .4byte gUnk_08128100 -_080A3F64: .4byte gMenu - - thumb_func_start sub_080A3F68 -sub_080A3F68: @ 0x080A3F68 - push {r4, r5, lr} - ldr r5, _080A3FB4 @ =gMenu - movs r0, #5 - strb r0, [r5, #1] - ldr r4, _080A3FB8 @ =gUnk_02002C81 - ldr r0, _080A3FBC @ =gFuseInfo - ldrb r1, [r0, #3] - adds r0, r4, #0 - bl WriteBit - ldr r0, _080A3FC0 @ =0xFFFFFED6 - adds r1, r4, r0 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x63 - bls _080A3F96 - ldr r0, _080A3FC4 @ =0xFFFFFED5 - adds r1, r4, r0 - movs r0, #1 - strb r0, [r1] -_080A3F96: - bl sub_080A4468 - movs r0, #0xcd - bl SoundReq - ldr r0, _080A3FC8 @ =0x00000702 - movs r1, #0xe - bl MessageAtHeight - movs r0, #1 - strb r0, [r5, #6] - movs r0, #0x78 - strh r0, [r5, #8] - pop {r4, r5, pc} - .align 2, 0 -_080A3FB4: .4byte gMenu -_080A3FB8: .4byte gUnk_02002C81 -_080A3FBC: .4byte gFuseInfo -_080A3FC0: .4byte 0xFFFFFED6 -_080A3FC4: .4byte 0xFFFFFED5 -_080A3FC8: .4byte 0x00000702 - - thumb_func_start sub_080A3FCC -sub_080A3FCC: @ 0x080A3FCC - push {lr} - ldr r0, _080A3FE8 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _080A3FE6 - ldr r0, _080A3FEC @ =gMenu - movs r1, #2 - strb r1, [r0, #6] - ldr r0, _080A3FF0 @ =0x00000147 - bl SoundReq -_080A3FE6: - pop {pc} - .align 2, 0 -_080A3FE8: .4byte gMessage -_080A3FEC: .4byte gMenu -_080A3FF0: .4byte 0x00000147 - - thumb_func_start sub_080A3FF4 -sub_080A3FF4: @ 0x080A3FF4 - push {lr} - ldr r2, _080A4014 @ =gMenu - ldrh r0, [r2, #8] - subs r0, #1 - strh r0, [r2, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _080A4018 - ldrh r0, [r2, #0x1a] - ldrh r3, [r2, #0x18] - adds r1, r0, r3 - strh r1, [r2, #0x18] - adds r0, #0x20 - strh r0, [r2, #0x1a] - b _080A4036 - .align 2, 0 -_080A4014: .4byte gMenu -_080A4018: - movs r0, #6 - strb r0, [r2, #1] - movs r0, #3 - strb r0, [r2, #6] - movs r0, #0x4f - strh r0, [r2, #8] - movs r0, #0xb3 - movs r1, #1 - movs r2, #0 - bl CreateObject - movs r0, #0xe5 - lsls r0, r0, #1 - bl SoundReq -_080A4036: - pop {pc} - - thumb_func_start sub_080A4038 -sub_080A4038: @ 0x080A4038 - push {lr} - ldr r1, _080A4050 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _080A404E - movs r0, #2 - bl sub_080A7114 -_080A404E: - pop {pc} - .align 2, 0 -_080A4050: .4byte gMenu - - thumb_func_start sub_080A4054 -sub_080A4054: @ 0x080A4054 - push {lr} - bl sub_080A422C - bl sub_080A414C - bl sub_080A4080 - movs r2, #0 - ldr r0, _080A407C @ =gUnk_02019EE0 - adds r1, r0, #1 -_080A4068: - ldrb r0, [r1] - cmp r0, #0 - beq _080A4072 - subs r0, #1 - strb r0, [r1] -_080A4072: - adds r1, #4 - adds r2, #1 - cmp r2, #0xf - bls _080A4068 - pop {pc} - .align 2, 0 -_080A407C: .4byte gUnk_02019EE0 - - thumb_func_start sub_080A4080 -sub_080A4080: @ 0x080A4080 -.ifdef EU - push {r4, r5, r6, r7, lr} - ldr r4, _080A394C @ =gOamCmd - movs r0, #0 - strh r0, [r4, #4] - strh r0, [r4, #6] - ldr r5, _080A3950 @ =gChooseFileState - adds r0, r5, #0 - adds r0, #0x2f - movs r1, #0 - ldrsb r1, [r0, r1] - movs r0, #0x10 - subs r0, r0, r1 - strh r0, [r4, #2] - movs r0, #0x40 - strh r0, [r4] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r4, #8] - movs r0, #0xfd - lsls r0, r0, #1 - movs r1, #0 - bl DrawDirect - movs r0, #0x94 - strh r0, [r4, #2] - movs r0, #0x50 - strh r0, [r4] - movs r0, #0x90 - lsls r0, r0, #3 - strh r0, [r4, #8] - ldr r7, _080A3954 @ =0x000001F9 - adds r0, r7, #0 - movs r1, #0 - bl DrawDirect - movs r0, #0xb8 - strh r0, [r4] - movs r0, #0x94 - lsls r0, r0, #3 - strh r0, [r4, #8] - adds r0, r7, #0 - movs r1, #1 - bl DrawDirect - ldr r0, _080A3958 @ =gMain - ldrh r0, [r0, #0xc] - lsrs r0, r0, #2 - movs r1, #0xe - ands r0, r1 - ldr r1, _080A395C @ =gUnk_08128110 - adds r6, r0, r1 - ldrb r1, [r6] - movs r0, #0xa - subs r0, r0, r1 - strh r0, [r4] - movs r0, #0x9c - lsls r0, r0, #3 - strh r0, [r4, #8] - bl sub_080A3B48 - subs r0, #1 - cmp r0, #0 - ble _080A3948 - ldr r1, [r5, #0x10] - cmp r1, #0 - bge _080A3920 - ldr r2, _080A3960 @ =0x0000FFFF - adds r1, r1, r2 -_080A3920: - asrs r5, r1, #0x10 - cmp r5, r0 - beq _080A3934 - ldrb r0, [r6, #1] - adds r0, #0x77 - strh r0, [r4, #2] - adds r0, r7, #0 - movs r1, #3 - bl DrawDirect -_080A3934: - cmp r5, #0 - beq _080A3948 - ldrb r1, [r6, #1] - movs r0, #0x27 - subs r0, r0, r1 - strh r0, [r4, #2] - adds r0, r7, #0 - movs r1, #2 - bl DrawDirect -_080A3948: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A394C: .4byte gOamCmd -_080A3950: .4byte gChooseFileState -_080A3954: .4byte 0x000001F9 -_080A3958: .4byte gMain -_080A395C: .4byte gUnk_08128110 -_080A3960: .4byte 0x0000FFFF -.else - push {r4, r5, r6, r7, lr} - ldr r4, _080A4134 @ =gOamCmd - movs r0, #0 - strh r0, [r4, #4] - strh r0, [r4, #6] - ldr r5, _080A4138 @ =gMenu - adds r0, r5, #0 - adds r0, #0x2f - movs r1, #0 - ldrsb r1, [r0, r1] - movs r0, #0x10 - subs r0, r0, r1 - strh r0, [r4, #2] - movs r0, #0x40 - strh r0, [r4] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r4, #8] - ldr r0, _080A413C @ =0x000001FB - movs r1, #0 - bl DrawDirect - movs r0, #0x94 - strh r0, [r4, #2] - movs r0, #0x50 - strh r0, [r4] - movs r0, #0x90 - lsls r0, r0, #3 - strh r0, [r4, #8] - movs r7, #0xfd - lsls r7, r7, #1 - adds r0, r7, #0 - movs r1, #0 - bl DrawDirect - movs r0, #0xb8 - strh r0, [r4] - movs r0, #0x94 - lsls r0, r0, #3 - strh r0, [r4, #8] - adds r0, r7, #0 - movs r1, #1 - bl DrawDirect - ldr r0, _080A4140 @ =gMain - ldrh r0, [r0, #0xc] - lsrs r0, r0, #2 - movs r1, #0xe - ands r0, r1 - ldr r1, _080A4144 @ =gUnk_08128110 - adds r6, r0, r1 - ldrb r1, [r6] - movs r0, #0xa - subs r0, r0, r1 - strh r0, [r4] - movs r0, #0x9c - lsls r0, r0, #3 - strh r0, [r4, #8] - bl sub_080A3B48 - subs r0, #1 - cmp r0, #0 - ble _080A4130 - ldr r1, [r5, #0x10] - cmp r1, #0 - bge _080A4108 - ldr r2, _080A4148 @ =0x0000FFFF - adds r1, r1, r2 -_080A4108: - asrs r5, r1, #0x10 - cmp r5, r0 - beq _080A411C - ldrb r0, [r6, #1] - adds r0, #0x77 - strh r0, [r4, #2] - adds r0, r7, #0 - movs r1, #3 - bl DrawDirect -_080A411C: - cmp r5, #0 - beq _080A4130 - ldrb r1, [r6, #1] - movs r0, #0x27 - subs r0, r0, r1 - strh r0, [r4, #2] - adds r0, r7, #0 - movs r1, #2 - bl DrawDirect -_080A4130: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A4134: .4byte gOamCmd -_080A4138: .4byte gMenu -_080A413C: .4byte 0x000001FB -_080A4140: .4byte gMain -_080A4144: .4byte gUnk_08128110 -_080A4148: .4byte 0x0000FFFF -.endif - - thumb_func_start sub_080A414C -sub_080A414C: @ 0x080A414C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - ldr r4, _080A4210 @ =gOamCmd - movs r0, #0 - strh r0, [r4, #4] - strh r0, [r4, #6] - ldr r0, _080A4214 @ =gMenu - ldrh r0, [r0, #0x10] - ldr r1, _080A4218 @ =0x00000B21 - bl __divsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r5, #3 - rsbs r5, r5, #0 - movs r1, #0xff - mov r8, r1 - adds r7, r4, #0 - ldr r6, _080A421C @ =gSineTable - rsbs r0, r0, #0 - adds r4, r0, #0 - subs r4, #0x45 - ldr r2, _080A4220 @ =gUnk_02002B6B - mov sb, r2 -_080A4180: - adds r2, r4, #0 - mov r3, r8 - ands r2, r3 - lsls r0, r2, #1 - adds r0, r0, r6 - movs r3, #0 - ldrsh r1, [r0, r3] - lsls r0, r1, #4 - adds r0, r0, r1 - lsls r0, r0, #2 - cmp r0, #0 - bge _080A419A - adds r0, #0xff -_080A419A: - asrs r0, r0, #8 - adds r0, #0x4f - strh r0, [r7, #2] - adds r0, r2, #0 - adds r0, #0x40 - mov r1, r8 - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r6 - movs r2, #0 - ldrsh r1, [r0, r2] - lsls r0, r1, #5 - adds r0, r0, r1 - lsls r0, r0, #1 - cmp r0, #0 - bge _080A41BC - adds r0, #0xff -_080A41BC: - asrs r0, r0, #8 - subs r0, #0x10 - strh r0, [r7] - ldr r2, _080A4214 @ =gMenu - ldr r0, [r2, #0x10] - cmp r0, #0 - bge _080A41CE - ldr r3, _080A4224 @ =0x0000FFFF - adds r0, r0, r3 -_080A41CE: - asrs r0, r0, #0x10 - adds r3, r0, r5 - cmp r3, #0 - blt _080A4200 - mov r1, sb - adds r0, r3, r1 - ldrb r1, [r0] - ldr r0, _080A4228 @ =gSave - cmp r5, #0 - bne _080A41EE - ldrb r2, [r2, #1] - cmp r2, #4 - bgt _080A41EE - cmp r2, #3 - blt _080A41EE - subs r1, #1 -_080A41EE: - cmp r1, #0 - ble _080A4200 - movs r2, #0x8c - lsls r2, r2, #1 - adds r0, r0, r2 - adds r0, r3, r0 - ldrb r0, [r0] - bl sub_080A42E0 -_080A4200: - adds r4, #0x17 - adds r5, #1 - cmp r5, #3 - ble _080A4180 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A4210: .4byte gOamCmd -_080A4214: .4byte gMenu -_080A4218: .4byte 0x00000B21 -_080A421C: .4byte gSineTable -_080A4220: .4byte gUnk_02002B6B -_080A4224: .4byte 0x0000FFFF -_080A4228: .4byte gSave - - thumb_func_start sub_080A422C -sub_080A422C: @ 0x080A422C - push {r4, r5, lr} - ldr r5, _080A42A4 @ =gMenu - ldrh r0, [r5, #0x18] - lsrs r0, r0, #8 - movs r1, #0x1b - bl __modsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r1, _080A42A8 @ =gUnk_08128120 - adds r0, r0, r1 - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r1, r1, #4 - movs r4, #0x80 - lsls r4, r4, #1 - movs r0, #0 - adds r2, r4, #0 - movs r3, #0 - bl sub_0805ECEC - ldr r1, _080A42AC @ =gOamCmd - movs r0, #0 - strh r4, [r1, #4] - strh r0, [r1, #6] - movs r0, #0x4f - strh r0, [r1, #2] - adds r0, r5, #0 - adds r0, #0x2a - ldrb r2, [r0] - adds r4, #0x80 - ldrb r0, [r5, #1] - cmp r0, #5 - beq _080A42B6 - cmp r0, #5 - bgt _080A42B0 - cmp r0, #3 - blt _080A42C4 - adds r4, r5, #0 - adds r4, #0x2c - movs r0, #0 - ldrsb r0, [r4, r0] - adds r0, #0x32 - strh r0, [r1] - adds r0, r2, #0 - movs r1, #0 - bl sub_080A42E0 - movs r1, #0 - ldrsb r1, [r4, r1] - lsls r0, r1, #3 - adds r0, r0, r1 - lsls r0, r0, #1 - movs r1, #0x46 - bl __divsi3 - movs r1, #0x8a - subs r4, r1, r0 - b _080A42C6 - .align 2, 0 -_080A42A4: .4byte gMenu -_080A42A8: .4byte gUnk_08128120 -_080A42AC: .4byte gOamCmd -_080A42B0: - cmp r0, #6 - beq _080A42C6 - b _080A42C4 -_080A42B6: - movs r0, #0x78 - strh r0, [r1] - adds r0, r2, #0 - movs r1, #0xff - bl sub_080A42E0 - b _080A42C6 -_080A42C4: - movs r4, #0x8a -_080A42C6: - ldr r0, _080A42D8 @ =gOamCmd - strh r4, [r0] - ldr r0, _080A42DC @ =gFuseInfo - ldrb r0, [r0, #3] - movs r1, #0 - bl sub_080A42E0 - pop {r4, r5, pc} - .align 2, 0 -_080A42D8: .4byte gOamCmd -_080A42DC: .4byte gFuseInfo - - thumb_func_start sub_080A42E0 -sub_080A42E0: @ 0x080A42E0 - push {r4, r5, r6, r7, lr} - adds r4, r1, #0 - lsls r0, r0, #3 - ldr r1, _080A42F4 @ =gUnk_080C9CBC - adds r7, r0, r1 - cmp r4, #0xff - bne _080A42F8 - ldrb r0, [r7, #2] - b _080A42FA - .align 2, 0 -_080A42F4: .4byte gUnk_080C9CBC -_080A42F8: - ldrb r0, [r7, #1] -_080A42FA: - bl sub_080A43A8 - adds r6, r0, #0 - cmp r4, #0 - beq _080A4372 - cmp r4, #0xff - beq _080A4372 - lsls r1, r6, #2 - ldr r0, _080A4348 @ =gUnk_02019EE0 - adds r1, r1, r0 - lsls r5, r6, #1 - ldrb r0, [r1, #2] - cmp r4, r0 - beq _080A4324 - strb r4, [r1, #2] - movs r1, #0xb8 - lsls r1, r1, #2 - adds r0, r5, r1 - adds r1, r4, #0 - bl sub_0801C2F0 -_080A4324: - ldr r1, _080A434C @ =gOamCmd - ldr r2, _080A4350 @ =0x00003AE0 - adds r0, r5, r2 - strh r0, [r1, #8] - movs r0, #0 - ldrsh r4, [r1, r0] - movs r2, #2 - ldrsh r5, [r1, r2] - ldr r0, _080A4354 @ =gMenu - ldrb r0, [r0, #1] - cmp r0, #0 - bne _080A4358 - ldrh r0, [r1] - adds r0, #0x10 - strh r0, [r1] - ldrh r0, [r1, #2] - adds r0, #9 - b _080A4362 - .align 2, 0 -_080A4348: .4byte gUnk_02019EE0 -_080A434C: .4byte gOamCmd -_080A4350: .4byte 0x00003AE0 -_080A4354: .4byte gMenu -_080A4358: - ldrh r0, [r1] - adds r0, #8 - strh r0, [r1] - ldrh r0, [r1, #2] - adds r0, #0xa -_080A4362: - strh r0, [r1, #2] - movs r0, #0 - movs r1, #5 - bl DrawDirect - ldr r0, _080A4394 @ =gOamCmd - strh r4, [r0] - strh r5, [r0, #2] -_080A4372: - ldrb r1, [r7] - lsls r1, r1, #0xc - movs r0, #0x80 - lsls r0, r0, #4 - orrs r1, r0 - lsls r0, r6, #4 - movs r2, #0xc0 - lsls r2, r2, #2 - adds r0, r0, r2 - orrs r1, r0 - ldr r0, _080A4394 @ =gOamCmd - strh r1, [r0, #8] - movs r0, #0 - movs r1, #3 - bl DrawDirect - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A4394: .4byte gOamCmd - - thumb_func_start sub_080A4398 -sub_080A4398: @ 0x080A4398 - push {lr} - ldr r0, _080A43A4 @ =gUnk_02019EE0 - movs r1, #0x40 - bl MemClear - pop {pc} - .align 2, 0 -_080A43A4: .4byte gUnk_02019EE0 - - thumb_func_start sub_080A43A8 -sub_080A43A8: @ 0x080A43A8 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080A43DC - adds r4, r0, #0 - cmp r4, #0xf - bls _080A43C8 - movs r0, #0xf - ands r4, r0 - lsls r1, r4, #4 - movs r0, #0xc0 - lsls r0, r0, #2 - adds r1, r1, r0 - adds r0, r5, #0 - bl sub_080A4418 -_080A43C8: - lsls r0, r4, #2 - ldr r1, _080A43D8 @ =gUnk_02019EE0 - adds r0, r0, r1 - strb r5, [r0] - movs r1, #2 - strb r1, [r0, #1] - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 -_080A43D8: .4byte gUnk_02019EE0 - - thumb_func_start sub_080A43DC -sub_080A43DC: @ 0x080A43DC - push {lr} - movs r1, #0 - ldr r2, _080A43EC @ =gUnk_02019EE0 -_080A43E2: - ldrb r3, [r2] - cmp r0, r3 - bne _080A43F0 - adds r0, r1, #0 - b _080A4416 - .align 2, 0 -_080A43EC: .4byte gUnk_02019EE0 -_080A43F0: - adds r2, #4 - adds r1, #1 - cmp r1, #0xf - bls _080A43E2 - movs r1, #0 - ldr r2, _080A4408 @ =gUnk_02019EE0 -_080A43FC: - ldrb r0, [r2, #1] - cmp r0, #0 - bne _080A440C - adds r0, r1, #0 - adds r0, #0x10 - b _080A4416 - .align 2, 0 -_080A4408: .4byte gUnk_02019EE0 -_080A440C: - adds r2, #4 - adds r1, #1 - cmp r1, #0xf - bls _080A43FC - movs r0, #0 -_080A4416: - pop {pc} - - thumb_func_start sub_080A4418 -sub_080A4418: @ 0x080A4418 - push {lr} - lsls r1, r1, #5 - ldr r2, _080A4444 @ =0x06010000 - adds r3, r1, r2 - ldr r1, _080A4448 @ =gUnk_080CA06C - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #0x18 - ands r2, r1 - mvns r0, r2 - ands r0, r1 - ldr r1, _080A444C @ =gGlobalGfxAndPalettes - adds r1, r0, r1 - cmp r2, #0 - beq _080A4450 - adds r0, r1, #0 - adds r1, r3, #0 - bl LZ77UnCompVram - b _080A445C - .align 2, 0 -_080A4444: .4byte 0x06010000 -_080A4448: .4byte gUnk_080CA06C -_080A444C: .4byte gGlobalGfxAndPalettes -_080A4450: - ldr r0, _080A4460 @ =0x040000D4 - str r1, [r0] - str r3, [r0, #4] - ldr r1, _080A4464 @ =0x84000080 - str r1, [r0, #8] - ldr r0, [r0, #8] -_080A445C: - pop {pc} - .align 2, 0 -_080A4460: .4byte 0x040000D4 -_080A4464: .4byte 0x84000080 - - thumb_func_start sub_080A4468 -sub_080A4468: @ 0x080A4468 - push {lr} - ldr r0, _080A4488 @ =gUnk_03003DF0 - movs r1, #0 - strb r1, [r0, #2] - ldr r0, [r0, #4] - strb r1, [r0, #3] - ldr r0, _080A448C @ =gFuseInfo - ldrb r0, [r0, #3] - bl sub_0801E6C8 - ldr r0, _080A4490 @ =gMenu - adds r0, #0x2a - ldrb r0, [r0] - bl sub_0801E798 - pop {pc} - .align 2, 0 -_080A4488: .4byte gUnk_03003DF0 -_080A448C: .4byte gFuseInfo -_080A4490: .4byte gMenu - - thumb_func_start sub_080A4494 -sub_080A4494: @ 0x080A4494 - push {r4, r5, lr} - bl sub_0805F2C8 - adds r4, r0, #0 - cmp r4, #0 - beq _080A44D0 - ldr r0, _080A44D4 @ =gTextGfxBuffer - str r0, [r4, #8] - movs r1, #0 - strb r1, [r4, #2] - movs r0, #5 - strb r0, [r4, #3] - strb r1, [r4, #1] - ldr r1, _080A44D8 @ =gUnk_02002AC0 - adds r0, r4, #0 - movs r2, #0x80 - bl sub_080A44E0 - ldr r0, _080A44DC @ =gFuseInfo - ldr r0, [r0, #0xc] - bl sub_08002632 - adds r0, r4, #0 - movs r2, #0xa0 - bl sub_080A44E0 - adds r5, r0, #0 - adds r0, r4, #0 - bl sub_0805F300 -_080A44D0: - adds r0, r5, #0 - pop {r4, r5, pc} - .align 2, 0 -_080A44D4: .4byte gTextGfxBuffer -_080A44D8: .4byte gUnk_02002AC0 -_080A44DC: .4byte gFuseInfo - - thumb_func_start sub_080A44E0 -sub_080A44E0: @ 0x080A44E0 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - adds r4, r0, #0 - adds r6, r1, #0 - adds r5, r2, #0 - movs r0, #0 - strh r0, [r4, #6] - movs r0, #0x60 - strh r0, [r4, #4] - movs r0, #0xc0 - lsls r0, r0, #2 - mov r8, r0 - ldr r0, [r4, #8] - mov r1, r8 - bl MemClear - adds r0, r6, #0 - adds r1, r4, #0 - bl sub_0805F76C - adds r6, r0, #0 - ldr r0, [r4, #8] - lsls r5, r5, #5 - ldr r1, _080A4524 @ =0x06010000 - adds r5, r5, r1 - adds r1, r5, #0 - mov r2, r8 - bl MemCopy - adds r0, r6, #0 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A4524: .4byte 0x06010000 - - thumb_func_start sub_080A4528 -sub_080A4528: @ 0x080A4528 - push {r4, lr} - ldr r0, _080A4540 @ =gFuseInfo - ldr r2, [r0, #0xc] - ldrb r0, [r2, #8] - cmp r0, #7 - bne _080A4544 - ldrb r0, [r2, #9] - ldrb r1, [r2, #0xa] - ldrb r2, [r2, #0xb] - bl CreateNPC - b _080A4550 - .align 2, 0 -_080A4540: .4byte gFuseInfo -_080A4544: - cmp r0, #3 - bne _080A45A2 - ldrb r0, [r2, #9] - ldrb r1, [r2, #0xa] - bl CreateEnemy -_080A4550: - adds r4, r0, #0 - cmp r4, #0 - beq _080A45A2 - ldrb r0, [r4, #8] - cmp r0, #7 - bne _080A456A - adds r0, r4, #0 - bl NPCInit - ldrb r0, [r4, #9] - strb r0, [r4, #0xf] - movs r0, #0x56 - b _080A4576 -_080A456A: - adds r0, r4, #0 - bl EnemyInit - ldrb r0, [r4, #9] - strb r0, [r4, #0xf] - movs r0, #0x66 -_080A4576: - strb r0, [r4, #9] - movs r2, #0 - movs r0, #0xcc - strh r0, [r4, #0x2e] - movs r0, #0x60 - strh r0, [r4, #0x32] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - subs r0, #0x99 - ands r0, r1 - movs r1, #0x10 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - str r2, [r4, #0x48] -_080A45A2: - pop {r4, pc} - thumb_func_start Subtask_FigurineMenu Subtask_FigurineMenu: @ 0x080A45A4 .ifdef DEMO_USA diff --git a/include/enemy.h b/include/enemy.h index 1b7d1a07..49d40b28 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -12,6 +12,7 @@ #include "entity.h" #include "projectile.h" +bool32 EnemyInit(Entity* this); extern u32 GetNextFunction(Entity*); extern void EnemyFunctionHandler(Entity*, EntityActionArray); extern void sub_08001324(Entity*); diff --git a/include/kinstone.h b/include/kinstone.h index 28b799dd..5d8e3ec8 100644 --- a/include/kinstone.h +++ b/include/kinstone.h @@ -7,7 +7,7 @@ extern void sub_08018C58(u32); typedef struct { u8 unk[4]; - u32 unk2; + u8* unk2; u32 unk4; } Unk_struct; extern Unk_struct gUnk_03003DF0[]; diff --git a/include/menu.h b/include/menu.h index e4c09e84..22902ca5 100644 --- a/include/menu.h +++ b/include/menu.h @@ -44,9 +44,14 @@ typedef struct { /*0x08*/ u16 transitionTimer; /*0x0a*/ u16 field_0xa; /*0x0c*/ u8* field_0xc; - /*0x10*/ u8 focusCoords[2]; - /*0x12*/ u8 field_0x12; - /*0x13*/ u8 unk13; + /*0x10*/ // u8 focusCoords[2]; + union { + s32 i; + u16 h[2]; + u8 a[4]; + } unk10; + /*0x12*/ // u8 field_0x12; + /*0x13*/ // u8 unk13; /*0x14*/ u8 unk14; /*0x15*/ u8 unk15; /*0x16*/ u8 unk16; @@ -54,9 +59,22 @@ typedef struct { /* */ // directly in the code. This happens when you take the address off the field with '&`. /* */ // Perhaps they had a macro to cast this to different sized arrays. /*0x17*/ u8 selectMtx; - /*0x18*/ u8 filler18[0x12]; + /*0x18*/ u16 unk18; + /*0x1a*/ union SplitHWord unk1a; + /*0x1c*/ u8 unk1c; + /*0x1s*/ u8 unk1d; + /*0x1e*/ u8 unk1e; + /*0x1f*/ s8 unk1f; + /*0x20*/ u8 unk20; + /*0x21*/ u8 unk21; + /*0x22*/ u8 filler22[6]; + /*0x28*/ u8 unk28; + /*0x29*/ u8 unk29; /*0x2a*/ u8 unk2a; - /*0x2c*/ int field_0x2c; + /*0x2b*/ u8 unk2b; + /*0x2c*/ s8 unk2c; + /*0x2d*/ u8 unk2d; + /*0x2e*/ union SplitHWord unk2e; } Menu; static_assert(sizeof(Menu) == 0x30); diff --git a/include/screen.h b/include/screen.h index a5b05623..fe17b183 100644 --- a/include/screen.h +++ b/include/screen.h @@ -68,8 +68,8 @@ typedef struct { } Screen; typedef struct { - u16 x; - u16 y; + s16 x; + s16 y; u16 _4; u16 _6; u16 _8; diff --git a/src/debug.c b/src/debug.c index 19b3ae04..f07417d6 100644 --- a/src/debug.c +++ b/src/debug.c @@ -48,14 +48,14 @@ void sub_0805FA98(void) { switch (gInput.newKeys) { case DPAD_UP: - gMenu.focusCoords[1] -= 1; + gMenu.unk10.a[1] -= 1; break; case DPAD_DOWN: - gMenu.focusCoords[1] += 1; + gMenu.unk10.a[1] += 1; break; case L_BUTTON: - gMenu.focusCoords[0] ^= 1; - if (gMenu.focusCoords[0] == 0) { + gMenu.unk10.a[0] ^= 1; + if (gMenu.unk10.a[0] == 0) { gScreen.bg0.control = BGCNT_SCREENBASE(31) | BGCNT_CHARBASE(3); gScreen.bg3.control = BGCNT_SCREENBASE(30) | BGCNT_CHARBASE(3) | BGCNT_PRIORITY(3); } else { @@ -82,7 +82,7 @@ void sub_0805FA98(void) { iVar1 = 0; break; } - switch (gMenu.focusCoords[1]) { + switch (gMenu.unk10.a[1]) { case 0: gMenu.unk14 = (gMenu.unk14 + iVar1 + 0x50) % 0x50; break; @@ -94,7 +94,7 @@ void sub_0805FA98(void) { break; } } - gMenu.focusCoords[1] = (gMenu.focusCoords[1] + 3) % 3; + gMenu.unk10.a[1] = (gMenu.unk10.a[1] + 3) % 3; gScreen.bg3.updated = 1; } diff --git a/src/fileselect.c b/src/fileselect.c index f2e1cb39..539c974b 100644 --- a/src/fileselect.c +++ b/src/fileselect.c @@ -875,11 +875,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_080610B8.inc", void sub_080610B8(void) END_NONMATCH void sub_08051358(void) { - gMenu.field_0x12 = gSaveHeader->language == 0 ? 4 : 3; + gMenu.unk10.a[2] = gSaveHeader->language == 0 ? 4 : 3; - if (gMenu.focusCoords[0] != 0x0b || gMenu.focusCoords[1] != 0x5) { - gMenu.focusCoords[1] = 0x5; - gMenu.focusCoords[0] = 0xb; + if (gMenu.unk10.a[0] != 0x0b || gMenu.unk10.a[1] != 0x5) { + gMenu.unk10.a[1] = 0x5; + gMenu.unk10.a[0] = 0xb; SoundReq(SFX_TEXTBOX_NEXT); } } @@ -940,7 +940,7 @@ void sub_08051480(u32 c) { u32 idx; result = sub_080514BC(c); - idx = gMenu.unk13; + idx = gMenu.unk10.a[3]; if (result == RESULT_INVALID) { return; @@ -955,7 +955,7 @@ void sub_08051480(u32 c) { idx = FILENAME_LENGTH - 1; } - gMenu.unk13 = idx + 1; + gMenu.unk10.a[3] = idx + 1; gSave.name[idx] = c; sub_08051574(SFX_6B); } @@ -976,7 +976,7 @@ u32 sub_080514BC(u32 a1) { return 1; } - idx = gMenu.unk13; + idx = gMenu.unk10.a[3]; if (idx == 0) return 0; @@ -1119,7 +1119,7 @@ NONMATCH("asm/non_matching/fileScreen/sub_08051738.inc", void sub_08051738(void) } uVar3++; gMenu.unk16 = uVar3; - gMenu.unk13 = 4; + gMenu.unk10.a[3] = 4; gMenu.unk14 = uVar3; } END_NONMATCH @@ -1128,7 +1128,7 @@ s32 sub_080517B4(s32 a1) { u32 i = gUnk_02019EE0.unk7; if (a1 != 0) { for (i = i + a1; i < 5; i += a1) { - if ((&gMenu.focusCoords[0])[i] != 0 && (&gMenu.focusCoords[0])[i] != 4) + if (gMenu.unk10.a[i] != 0 && gMenu.unk10.a[i] != 4) return i; } diff --git a/src/game.c b/src/game.c index b2aefb17..2bb7b65d 100644 --- a/src/game.c +++ b/src/game.c @@ -652,7 +652,7 @@ static void GameOver_Init(void) { if (gFadeControl.active) return; sub_08052010(); - gMenu.focusCoords[0] = 80; + gMenu.unk10.a[0] = 80; gMenu.transitionTimer = 60; gSave.stats.health = 24; gMain.field_0x5 = 60; @@ -667,8 +667,8 @@ static void GameOver_FadeIn(void) { return; if (gMain.field_0x5 == 0) { - if (gMenu.focusCoords[0] >= 38) { - gMenu.focusCoords[0]--; + if (gMenu.unk10.a[0] >= 38) { + gMenu.unk10.a[0]--; } else { gMenu.transitionTimer--; if (gMenu.transitionTimer == 0) { @@ -839,7 +839,7 @@ static void DrawGameOverText(void) { gOamCmd._4 = 0; gOamCmd._6 = 0; gOamCmd._8 = 0x8600; - gOamCmd.y = gMenu.focusCoords[0]; + gOamCmd.y = gMenu.unk10.a[0]; for (i = 0; i < 8; ++i) { gOamCmd.x = sOffsets[i]; #ifdef EU diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c index 004f98d5..a59f8172 100644 --- a/src/object/fileScreenObjects.c +++ b/src/object/fileScreenObjects.c @@ -219,7 +219,7 @@ void sub_0808EABC(Entity* this) { } break; case 5: - switch (gMenu.focusCoords[this->type]) { + switch (gMenu.unk10.a[this->type]) { case 0: var0 = 42; var1 = 40; @@ -228,7 +228,7 @@ void sub_0808EABC(Entity* this) { case 2: var0 = 20; var1 = 144; - var1 -= (gMenu.unk16 - gMenu.focusCoords[this->type]) * 32; + var1 -= (gMenu.unk16 - gMenu.unk10.a[this->type]) * 32; break; } break; @@ -371,9 +371,9 @@ void sub_0808ECBC(Entity* this) { void sub_0808ED64(Entity* this) { int y = 255; - if (gUnk_02032EC0.lastState == 1 && gMenu.focusCoords[1] != 5) { - this->x.HALF.HI = gMenu.focusCoords[0] * 16 + 28; - y = gMenu.focusCoords[1] * 16 + 58; + if (gUnk_02032EC0.lastState == 1 && gMenu.unk10.a[1] != 5) { + this->x.HALF.HI = gMenu.unk10.a[0] * 16 + 28; + y = gMenu.unk10.a[1] * 16 + 58; } this->y.HALF.HI = y; } @@ -384,7 +384,7 @@ void sub_0808ED98(Entity* this) { this->field_0x68.HWORD = 27; y = -10; } else { - u32 var0 = gMenu.unk13; + u32 var0 = gMenu.unk10.a[3]; if (var0 > 5) { var0 = 5; } @@ -416,7 +416,7 @@ void sub_0808EE00(Entity* this) { } this->field_0x6a.HWORD = var2; - this->palette.b.b0 = gMenu.focusCoords[1] == 5 && var1 == gMenu.field_0x12 ? 11 : 9; + this->palette.b.b0 = gMenu.unk10.a[1] == 5 && var1 == gMenu.unk10.a[2] ? 11 : 9; gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this); } diff --git a/src/subtask.c b/src/subtask.c index f73b719f..ea93d9b9 100644 --- a/src/subtask.c +++ b/src/subtask.c @@ -1,11 +1,93 @@ #include "global.h" -#include "functions.h" #include "menu.h" #include "screen.h" #include "common.h" #include "subtask.h" +#include "sound.h" +#include "save.h" +#include "kinstone.h" +#include "game.h" +#include "message.h" +#include "object.h" +#include "main.h" +#include "npc.h" +#include "enemy.h" +#include "functions.h" + +extern const u32 gUnk_080CA06C[]; +extern const u8 gGlobalGfxAndPalettes[]; +typedef struct { + u8 filler0[0x1]; + u8 unk1; + u8 charColor; + u8 bgColor; + u16 unk4; + u16 unk6; + u8* unk8; +} struct_02036540; + +u32 sub_08000E44(u32); +s32 sub_080A3B48(void); +void sub_080A4468(void); +void sub_080A422C(void); +void sub_080A414C(void); +void sub_080A4080(void); +void sub_080A42E0(u32, u32); +void sub_0805ECEC(u32, u32, u32, u32); +u32 sub_080A43A8(u32); +void sub_0801C2F0(u32, u32); +u32 sub_080A4418(u32, u32); +u32 sub_080A43DC(u32); +void sub_0801E6C8(u32); +void sub_0801E798(u32); +u32 sub_080A44E0(struct_02036540*, u8*, u32); +struct_02036540* sub_0805F2C8(void); +void sub_0805F300(struct_02036540*); +u32 sub_0805F76C(u8*, struct_02036540*); extern void (*const gUnk_081280C4[])(void); +extern const u8 gUnk_081280EE[]; + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +} struct_080C9CBC; + +extern const struct_080C9CBC gUnk_080C9CBC[]; +extern void (*const gUnk_081280F4[])(void); + +extern u8 gUnk_02002C81[]; +typedef struct { + u8 unk_00[1]; + u8 unk_01; + u8 unk_02[2]; +} struct_02019EE0; + +extern struct_02019EE0 gUnk_02019EE0[]; +extern s8 gUnk_08128120[]; + +typedef struct { + void* sourceAddress; + void* destinationAddress; + union { + u32 word; + struct { + u16 low; + u16 high; + } half; + } control; +} DMARegisters; + +#define DMA3 ((volatile DMARegisters*)REG_ADDR_DMA3SAD) + +extern u8 gTextGfxBuffer[]; +extern u8 gUnk_02002AC0[]; void Subtask_KinstoneMenu(void) { #if !(defined(DEMO_USA) || defined(DEMO_JP)) @@ -60,3 +142,487 @@ void sub_080A3BD0(void) { sub_080A7114(1); SetFade(6, 8); } + +NONMATCH("asm/non_matching/subtask/sub_080A3C6C.inc", void sub_080A3C6C(void)) { + s32 tmp1, tmp2, tmp3, tmp4, tmp5; + u8* ptr; + if (gFadeControl.active) { + return; + } + gMenu.column_idx = 2; + tmp2 = gMenu.unk28 * 0x10000; + tmp1 = tmp2 - gMenu.unk10.i; + tmp5 = tmp1; + if (tmp1 < 0) { + tmp5 = -tmp1; + } + if (tmp5 <= 0x1ffdu) { + gMenu.unk10.i = tmp2; + } else { + gMenu.column_idx = 1; + tmp2 = sub_08000E44(tmp1); + tmp1 /= 0x20000; + if (tmp1 < 0) { + tmp1 = -tmp1; + } + if (tmp1 > 5) { + tmp1 = 5; + } + gMenu.unk10.i += gUnk_081280EE[tmp1] * 0x666 * tmp2; + } + if (gMenu.unk29 != gMenu.unk10.i / 0x10000) { + gMenu.unk29 = gMenu.unk10.i / 0x10000; + SoundReq(SFX_TEXTBOX_CHOICE); + } + if ((gInput.newKeys & 0x20a) != 0) { + sub_080A7114(2); + SoundReq(SFX_MENU_CANCEL); + return; + } + tmp3 = gMenu.unk28; + switch (gInput.unk4) { + case 0x20: + case 0x40: + tmp3 -= 1; + break; + case 0x10: + case 0x80: + tmp3 += 1; + break; + case 1: + if (gMenu.column_idx == 2) { + tmp3 = gMenu.unk10.i / 0x10000; + gMenu.unk2a = gSave.unk118[tmp3]; + sub_080A7114(3); + } + break; + } + tmp4 = sub_080A3B48(); + if (tmp4 <= tmp3) { + tmp3 = tmp4 - 1; + } + if (tmp4 < 2) { + tmp3 = 0; + } + if (tmp3 < 0) { + tmp3 = 0; + } + if (gMenu.unk28 != tmp3) { + gMenu.unk28 = tmp3; + } +} +END_NONMATCH + +void sub_080A3DB8(void) { + const struct_080C9CBC* ptr; + if (gMenu.column_idx == 6) { + gFuseInfo._0 = 6; + ptr = &gUnk_080C9CBC[gFuseInfo._3]; + if (ptr->unk3 != 0) { + MenuFadeIn(ptr->unk3, ptr->unk4); + } else { + Subtask_Exit(); + } + } else { + gFuseInfo._0 = 5; + Subtask_Exit(); + } +} + +void sub_080A3E00(void) { + gMenu.column_idx = 3; + gUnk_081280F4[gMenu.overlayType](); +} + +void sub_080A3E20(void) { + gMenu.unk18 = 0; + gMenu.unk2c += 2; + if (0x45 < gMenu.unk2c) { + gMenu.unk2c = 0x46; + gMenu.overlayType = 1; + } +} + +void sub_080A3E48(void) { + u32 temp = gUnk_080C9CBC[gMenu.unk2a].unk5; + if (temp != gUnk_080C9CBC[gFuseInfo._3].unk5) { + SoundReq(SFX_ITEM_SHIELD_BOUNCE); + sub_080A7114(4); + } else { + gMenu.overlayType = 2; + gMenu.transitionTimer = 0x14; + gScreen.lcd.displayControl |= 0x2000; + gScreen.controls.window0HorizontalDimensions = 0x6887; + gScreen.controls.window0VerticalDimensions = 0x405f; + gScreen.controls.windowInsideControl = 0x3f; + gScreen.controls.windowOutsideControl = 0x1f; + gScreen.controls.layerFXControl = 0x3f90; + gScreen.controls.layerBrightness = 0; + SoundReq(SFX_FA); + } +} + +void sub_080A3EDC(void) { + if (++gScreen.controls.layerBrightness > 14) { + gScreen.controls.layerBrightness = 0; + gScreen.lcd.displayControl &= 0xdfff; + sub_080A7114(5); + } +} + +void sub_080A3F10(void) { + gMenu.column_idx = 4; + gMenu.unk2c -= 3; + gMenu.unk18 += 0x100; + if (gMenu.unk2c < 0) { + gMenu.unk18 = 0; + gMenu.unk2c = 0; + sub_080A7114(1); + SoundReq(SFX_MENU_ERROR); + } +} + +void sub_080A3F4C(void) { + extern void (*const gUnk_08128100[])(void); + gUnk_08128100[gMenu.overlayType](); +} + +void sub_080A3F68(void) { + gMenu.column_idx = 5; + WriteBit((u32*)gUnk_02002C81, gFuseInfo._3); + if (99 < ++gUnk_02002C81[-298]) { + gUnk_02002C81[-299] = 1; + } + sub_080A4468(); + SoundReq(SFX_TASK_COMPLETE); + MessageAtHeight(0x702, 0xe); + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; +} + +void sub_080A3FCC(void) { + if ((gMessage.doTextBox & 0x7f) == 0) { + gMenu.overlayType = 2; + SoundReq(SFX_147); + } +} + +void sub_080A3FF4(void) { + gMenu.transitionTimer -= 1; + if (gMenu.transitionTimer != 0) { + gMenu.unk18 += gMenu.unk1a.HWORD; + gMenu.unk1a.HWORD += 0x20; + } else { + gMenu.column_idx = 6; + gMenu.overlayType = 3; + gMenu.transitionTimer = 0x4f; + CreateObject(OBJECT_B3, 1, 0); + SoundReq(SFX_1CA); + } +} + +void sub_080A4038(void) { + // TODO figure out why in some place s16 is needed and u16 in others + if (--(s16)gMenu.transitionTimer < 0) { + sub_080A7114(2); + } +} + +void sub_080A4054(void) { + u32 uVar2; + sub_080A422C(); + sub_080A414C(); + sub_080A4080(); + for (uVar2 = 0; uVar2 < 0x10; uVar2++) { + if (gUnk_02019EE0[uVar2].unk_01 != 0) { + gUnk_02019EE0[uVar2].unk_01 -= 1; + } + } +} + +extern u8 gUnk_08128110[]; +void sub_080A4080(void) { + u32 uVar1; + s32 iVar2; + s32 iVar3; + u8* temp; + + u32 t; + + gOamCmd._4 = 0; + gOamCmd._6 = 0; + gOamCmd.y = 0x10 - (s8)gMenu.unk2e.HALF.HI; + gOamCmd.x = 0x40; + gOamCmd._8 = 0x400; +#ifdef EU + DrawDirect(0x1fa, 0); +#else + DrawDirect(0x1fb, 0); +#endif + gOamCmd.y = 0x94; + gOamCmd.x = 0x50; + gOamCmd._8 = 0x480; +#ifdef EU + t = 0x1f9; +#else + t = 0x1fa; +#endif + DrawDirect(t, 0); + gOamCmd.x = 0xb8; + gOamCmd._8 = 0x4a0; + DrawDirect(t, 1); + uVar1 = gMain.ticks.HWORD >> 2 & 0xe; + temp = &gUnk_08128110[uVar1]; + gOamCmd.x = 10 - temp[0]; + gOamCmd._8 = 0x4e0; + iVar2 = sub_080A3B48() - 1; + if (0 < iVar2) { + iVar3 = gMenu.unk10.i; + if (iVar3 < 0) { + iVar3 = gMenu.unk10.i + 0xffff; + } + if (iVar3 >> 0x10 != iVar2) { + gOamCmd.y = temp[1] + 0x77; + DrawDirect(t, 3); + } + if (iVar3 >> 0x10 != 0) { + gOamCmd.y = 0x27 - temp[1]; + DrawDirect(t, 2); + } + } +} + +NONMATCH("asm/non_matching/subtask/sub_080A414C.inc", void sub_080A414C(void)) { + s32 uVar1; + s32 iVar2; + s32 uVar3; + + s32 i; + + gOamCmd._4 = 0; + gOamCmd._6 = 0; + uVar1 = gMenu.unk10.h[0] / 0xb21; + for (i = -3, uVar1 = -uVar1 - 0x45; i < 4; uVar1 += 0x17, i++) { + gOamCmd.y = ((gSineTable[uVar1 & 0xff] * 0x44) / 0x100) + 0x4f; + gOamCmd.x = ((gSineTable[(uVar1 + 0x40) & 0xff] * 0x42) / 0x100) - 0x10; + iVar2 = gMenu.unk10.i / 0x10000 + i; + if (iVar2 >= 0) { + uVar3 = gSave.unk12B[iVar2]; + if (i == 0) { + switch (gMenu.column_idx) { + case 3: + case 4: + uVar3 -= 1; + break; + default: + break; + } + } + if (0 < uVar3) { + sub_080A42E0(gSave.unk118[iVar2], uVar3); + } + } + } +} +END_NONMATCH + +void sub_080A422C(void) { + s32 uVar2; + s32 t, t2; + u16 t3; + + uVar2 = gMenu.unk18 / 256; + uVar2 %= 27; + t3 = uVar2; + sub_0805ECEC(0, gUnk_08128120[t3] << 4, 0x100, 0); + gOamCmd._4 = 0x100; + gOamCmd._6 = 0; + gOamCmd.y = 0x4f; + t = gMenu.unk2a; + t2 = 0x180; + switch (gMenu.column_idx) { + case 5: + gOamCmd.x = 0x78; + sub_080A42E0(t, 0xff); + break; + case 3: + case 4: + gOamCmd.x = gMenu.unk2c + 0x32; + sub_080A42E0(t, 0); + t2 = 0x8a - (gMenu.unk2c * 0x12 / 0x46); + break; + case 6: + break; + default: + t2 = 0x8a; + break; + } + + gOamCmd.x = t2; + sub_080A42E0(gFuseInfo._3, 0); +} + +void sub_080A42E0(u32 param_1, u32 param_2) { + u8 uVar1; + s32 sVar2; + s32 sVar3; + s32 iVar4; + + const struct_080C9CBC* ptr = &gUnk_080C9CBC[param_1]; + + if (param_2 == 0xff) { + uVar1 = ptr->unk2; + } else { + uVar1 = ptr->unk1; + } + iVar4 = sub_080A43A8(uVar1); + if ((param_2 != 0) && (param_2 != 0xff)) { + int index = iVar4 * 4; + if (param_2 != gUnk_02019EE0[iVar4].unk_02[0]) { + gUnk_02019EE0[iVar4].unk_02[0] = param_2; + sub_0801C2F0(iVar4 * 2 + 0x2e0, param_2); + } + gOamCmd._8 = (s16)(iVar4 * 2) + 0x3ae0; + sVar2 = gOamCmd.x; + sVar3 = gOamCmd.y; + if (gMenu.column_idx == 0) { + gOamCmd.x += 0x10; + gOamCmd.y += 9; + } else { + gOamCmd.x += 8; + gOamCmd.y += 10; + } + DrawDirect(0, 5); + gOamCmd.x = sVar2; + gOamCmd.y = sVar3; + } + { + int t; + t = ptr->unk0; + t <<= 0xc; + t |= 0x800; + t |= (iVar4 << 4) + 0x300; + gOamCmd._8 = t; + } + DrawDirect(0, 3); +} + +void sub_080A4398(void) { + MemClear(&gUnk_02019EE0, 0x40); +} + +u32 sub_080A43A8(u32 param_1) { + u32 uVar1; + + uVar1 = sub_080A43DC(param_1); + if (0xf < uVar1) { + uVar1 &= 0xf; + sub_080A4418(param_1, uVar1 * 0x10 + 0x300); + } + { int index = uVar1 * 4; } + gUnk_02019EE0[uVar1].unk_00[0] = param_1; + gUnk_02019EE0[uVar1].unk_01 = 2; + return uVar1; +} + +u32 sub_080A43DC(u32 unk1) { + u32 i; + for (i = 0; i < 16; i++) { + if (unk1 == gUnk_02019EE0[i].unk_00[0]) { + return i; + } + } + for (i = 0; i < 16; i++) { + if (gUnk_02019EE0[i].unk_01 == 0) { + return i + 0x10; + } + } + return 0; +} + +u32 sub_080A4418(u32 param_1, u32 param_2) { + void* src; + u32 t, t2; + void* dest; + + dest = (void*)(param_2 * 0x20 + 0x6010000); + t = gUnk_080CA06C[param_1]; + t2 = t & 0x80000000; + src = (void*)&gGlobalGfxAndPalettes[~t2 & t]; + if (t2) { + LZ77UnCompVram(src, dest); + } else { + DMA3->sourceAddress = src; + DMA3->destinationAddress = dest; + DMA3->control.word = 0x84000080; + return DMA3->control.word; + } +} + +void sub_080A4468(void) { + gUnk_03003DF0[0].unk[2] = 0; + gUnk_03003DF0[0].unk2[3] = 0; + sub_0801E6C8(gFuseInfo._3); + sub_0801E798(gMenu.unk2a); +} + +NONMATCH("asm/non_matching/subtask/sub_080A4494.inc", u32 sub_080A4494(void)) { + struct_02036540* psVar1; + u32 ret; + + psVar1 = sub_0805F2C8(); + if (psVar1 != NULL) { + psVar1->unk8 = gTextGfxBuffer; + psVar1->charColor = 0; + psVar1->bgColor = 5; + psVar1->unk1 = 0; + sub_080A44E0(psVar1, gUnk_02002AC0, 0x80); + sub_08002632(gFuseInfo.ent); + ret = sub_080A44E0(psVar1, gUnk_02002AC0, 0xa0); + sub_0805F300(psVar1); + } + return ret; +} +END_NONMATCH + +u32 sub_080A44E0(struct_02036540* param_1, u8* param_2, u32 param_3) { + u32 uVar1; + u32 size; + + param_1->unk6 = 0; + param_1->unk4 = 0x60; + size = 0x300; + MemClear(param_1->unk8, size); + uVar1 = sub_0805F76C(param_2, param_1); + MemCopy(param_1->unk8, (void*)(param_3 * 0x20 + 0x6010000), size); + return uVar1; +} + +void sub_080A4528(void) { + Entity* entity; + + if (gFuseInfo.ent->kind == NPC) { + entity = CreateNPC(gFuseInfo.ent->id, gFuseInfo.ent->type, gFuseInfo.ent->type2); + } else { + if (gFuseInfo.ent->kind != ENEMY) { + return; + } + entity = CreateEnemy(gFuseInfo.ent->id, gFuseInfo.ent->type); + } + if (entity != NULL) { + if (entity->kind == NPC) { + NPCInit(entity); + entity->field_0xf = entity->id; + entity->id = 0x56; + } else { + EnemyInit(entity); + entity->field_0xf = entity->id; + entity->id = 0x66; + } + entity->x.HALF.HI = 0xcc; + entity->y.HALF.HI = 0x60; + entity->spritePriority.b1 = 2; + entity->spriteSettings.draw = 1; + entity->hitbox = NULL; + } +} diff --git a/src/subtask2.c b/src/subtask2.c index dffcbab0..4218e8c9 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -11,7 +11,7 @@ u32 sub_080A554C(u32 arg0) { if (arg0 != 0) { for (i = 0; i < 17; i++) { - if (arg0 == gMenu.focusCoords[i]) + if (arg0 == gMenu.unk10.a[i]) return i; } }