summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2020-12-15 21:01:50 -0800
committerGitHub <noreply@github.com>2020-12-15 21:01:50 -0800
commitbf60d346653e2ea42b660e05ec2effea8060fe9a (patch)
tree7485b8ca4e2efce9a08b7cff691118def7daf2c0
parentb876bbc28e3b5804ddda433238e9dac46f11809b (diff)
parente7a185298c8833d9124b8d02719cb76b134e81f5 (diff)
Merge pull request #105 from Ibot02:managerC
managerC.c: ok
-rw-r--r--asm/managerC.s712
-rw-r--r--asm/non_matching/managerC/sub_08058D34.inc66
-rw-r--r--data/data_08108308.s (renamed from data/data_0810821C.s)21
-rw-r--r--linker.ld5
-rw-r--r--src/manager/managerC.c336
5 files changed, 405 insertions, 735 deletions
diff --git a/asm/managerC.s b/asm/managerC.s
deleted file mode 100644
index ef613cdd..00000000
--- a/asm/managerC.s
+++ /dev/null
@@ -1,712 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0805884C
-sub_0805884C: @ 0x0805884C
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _08058880 @ =gUnk_0810821C
- ldrb r0, [r4, #0xc]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
- adds r0, r4, #0
- bl sub_08058BC8
- ldr r0, _08058884 @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _08058888 @ =gUnk_02017AA0
- adds r0, r0, r1
- ldr r1, _0805888C @ =0x04000020
- ldr r2, _08058890 @ =0xA2600008
- bl sub_0805622C
- pop {r4, pc}
- .align 2, 0
-_08058880: .4byte gUnk_0810821C
-_08058884: .4byte gUnk_03003DE4
-_08058888: .4byte gUnk_02017AA0
-_0805888C: .4byte 0x04000020
-_08058890: .4byte 0xA2600008
-
- thumb_func_start sub_08058894
-sub_08058894: @ 0x08058894
- push {r4, lr}
- adds r4, r0, #0
- movs r0, #1
- strb r0, [r4, #0xc]
- ldr r0, _080588C4 @ =0x00001234
- str r0, [r4, #0x28]
- movs r0, #0x15
- movs r1, #2
- bl CheckLocalFlags
- rsbs r1, r0, #0
- orrs r1, r0
- lsrs r1, r1, #0x1f
- strb r1, [r4, #0xe]
- adds r0, r4, #0
- bl sub_08058CB0
- ldr r1, _080588C8 @ =sub_08058D34
- adds r0, r4, #0
- movs r2, #0
- bl sub_08052D74
- pop {r4, pc}
- .align 2, 0
-_080588C4: .4byte 0x00001234
-_080588C8: .4byte sub_08058D34
-
- thumb_func_start sub_080588CC
-sub_080588CC: @ 0x080588CC
- push {r4, lr}
- adds r4, r0, #0
- bl sub_08058CFC
- adds r0, r4, #0
- bl sub_08058A04
- ldr r0, _080588E8 @ =gScreenTransition
- ldrb r0, [r0, #8]
- cmp r0, #0
- beq _080588EC
- movs r0, #2
- strb r0, [r4, #0xc]
- b _080588F2
- .align 2, 0
-_080588E8: .4byte gScreenTransition
-_080588EC:
- adds r0, r4, #0
- bl sub_080588F8
-_080588F2:
- pop {r4, pc}
-
- thumb_func_start nullsub_108
-nullsub_108: @ 0x080588F4
- bx lr
- .align 2, 0
-
- thumb_func_start sub_080588F8
-sub_080588F8: @ 0x080588F8
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xf]
- cmp r0, #0
- bne _08058952
- movs r0, #0x26
- ldrsh r2, [r4, r0]
- ldr r0, [r4, #0x28]
- subs r1, r0, r2
- cmp r1, #0
- blt _08058914
- cmp r1, #8
- bhi _0805891A
- b _08058968
-_08058914:
- subs r0, r2, r0
- cmp r0, #8
- bls _08058968
-_0805891A:
- ldr r0, _08058934 @ =0x00001234
- str r0, [r4, #0x28]
- movs r2, #0x26
- ldrsh r1, [r4, r2]
- ldr r0, _08058938 @ =0x0000FFFE
- ands r1, r0
- cmp r1, #0xa0
- beq _08058940
- cmp r1, #0xa0
- bgt _0805893C
- cmp r1, #0x48
- beq _08058940
- b _08058968
- .align 2, 0
-_08058934: .4byte 0x00001234
-_08058938: .4byte 0x0000FFFE
-_0805893C:
- cmp r1, #0xf0
- bne _08058968
-_08058940:
- movs r3, #0x26
- ldrsh r0, [r4, r3]
- str r0, [r4, #0x28]
- movs r0, #0x2d
- strb r0, [r4, #0xf]
- movs r0, #0x8c
- bl PlaySFX
- b _08058968
-_08058952:
- subs r0, #1
- strb r0, [r4, #0xf]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0x29
- bls _08058964
- ldr r0, [r4, #0x28]
- subs r0, #2
- b _08058966
-_08058964:
- ldr r0, [r4, #0x28]
-_08058966:
- strh r0, [r4, #0x26]
-_08058968:
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- beq _080589DE
- ldr r0, _080589A4 @ =gPlayerEntity
- movs r2, #0x32
- ldrsh r1, [r0, r2]
- ldr r0, _080589A8 @ =gRoomControls
- ldrh r0, [r0, #8]
- subs r2, r1, r0
- adds r1, r2, #0
- subs r1, #0x50
- cmp r1, #0
- bge _08058986
- movs r1, #0x50
- subs r1, r1, r2
-_08058986:
- lsrs r1, r1, #3
- lsls r0, r1, #1
- adds r0, r0, r1
- lsls r0, r0, #0xc
- movs r3, #0x80
- lsls r3, r3, #7
- adds r1, r0, r3
- ldrb r0, [r4, #0xf]
- cmp r0, #0
- bne _080589DE
- cmp r2, #0x48
- bgt _080589AC
- ldr r0, [r4, #0x24]
- subs r0, r0, r1
- b _080589B4
- .align 2, 0
-_080589A4: .4byte gPlayerEntity
-_080589A8: .4byte gRoomControls
-_080589AC:
- cmp r2, #0x57
- ble _080589B6
- ldr r0, [r4, #0x24]
- adds r0, r0, r1
-_080589B4:
- str r0, [r4, #0x24]
-_080589B6:
- ldr r2, [r4, #0x2c]
- ldr r0, [r4, #0x24]
- subs r1, r2, r0
- adds r3, r0, #0
- cmp r1, #0
- blt _080589CC
- movs r0, #0x80
- lsls r0, r0, #0xd
- cmp r1, r0
- bhi _080589D6
- b _080589DE
-_080589CC:
- subs r1, r3, r2
- movs r0, #0x80
- lsls r0, r0, #0xd
- cmp r1, r0
- bls _080589DE
-_080589D6:
- str r3, [r4, #0x2c]
- movs r0, #0x8b
- bl PlaySFX
-_080589DE:
- movs r0, #0x26
- ldrsh r1, [r4, r0]
- str r1, [r4, #0x20]
- cmp r1, #0
- bge _080589F0
- ldr r0, _080589EC @ =0x000001FF
- b _080589F8
- .align 2, 0
-_080589EC: .4byte 0x000001FF
-_080589F0:
- ldr r0, _08058A00 @ =0x000001FF
- cmp r1, r0
- ble _080589FC
- movs r0, #0
-_080589F8:
- str r0, [r4, #0x20]
- strh r0, [r4, #0x26]
-_080589FC:
- pop {r4, pc}
- .align 2, 0
-_08058A00: .4byte 0x000001FF
-
- thumb_func_start sub_08058A04
-sub_08058A04: @ 0x08058A04
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r4, r0, #0
- ldr r6, _08058A68 @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r1, [r6, r0]
- ldr r7, _08058A6C @ =gRoomControls
- ldrh r0, [r7, #6]
- subs r1, r1, r0
- mov r8, r1
- movs r0, #0x32
- ldrsh r1, [r6, r0]
- ldrh r0, [r7, #8]
- subs r5, r1, r0
- ldr r0, [r4, #0x20]
- ldr r1, _08058A70 @ =0xFFFFFEE8
- adds r0, r0, r1
- cmp r0, #0xc
- bhi _08058A78
- movs r0, #0x17
- bl CheckGlobalFlag
- cmp r0, #0
- beq _08058A78
- mov r0, r8
- subs r0, #0x6d
- cmp r0, #0x16
- bhi _08058A78
- adds r0, r5, #0
- subs r0, #0x45
- cmp r0, #0x16
- bhi _08058A78
- movs r0, #0x36
- ldrsh r2, [r6, r0]
- cmp r2, #0
- bne _08058A78
- ldr r0, _08058A74 @ =gPlayerState
- movs r1, #3
- strb r1, [r0, #0xc]
- adds r0, #0x38
- strb r2, [r0]
- ldrh r0, [r7, #6]
- adds r0, #0x78
- strh r0, [r6, #0x2e]
- ldrh r0, [r7, #8]
- adds r0, #0x50
- strh r0, [r6, #0x32]
- b _08058AFC
- .align 2, 0
-_08058A68: .4byte gPlayerEntity
-_08058A6C: .4byte gRoomControls
-_08058A70: .4byte 0xFFFFFEE8
-_08058A74: .4byte gPlayerState
-_08058A78:
- mov r1, r8
- cmp r1, #0x77
- bgt _08058AC0
- cmp r5, #0x4f
- bgt _08058AA0
- ldr r3, _08058A9C @ =gUnk_08108228
- adds r0, r4, #0
- movs r1, #0x88
- movs r2, #0xb0
- bl sub_08058B08
- cmp r0, #0
- beq _08058AFC
- adds r0, r4, #0
- movs r1, #0
- bl sub_08058B5C
- b _08058AFC
- .align 2, 0
-_08058A9C: .4byte gUnk_08108228
-_08058AA0:
- ldr r3, _08058ABC @ =gUnk_08108258
- adds r0, r4, #0
- movs r1, #0x38
- movs r2, #0x60
- bl sub_08058B08
- cmp r0, #0
- beq _08058AFC
- adds r0, r4, #0
- movs r1, #1
- bl sub_08058B5C
- b _08058AFC
- .align 2, 0
-_08058ABC: .4byte gUnk_08108258
-_08058AC0:
- cmp r5, #0x4f
- bgt _08058AE4
- movs r2, #0x84
- lsls r2, r2, #1
- ldr r3, _08058AE0 @ =gUnk_08108288
- adds r0, r4, #0
- movs r1, #0xe0
- bl sub_08058B08
- cmp r0, #0
- beq _08058AFC
- adds r0, r4, #0
- movs r1, #2
- bl sub_08058B5C
- b _08058AFC
- .align 2, 0
-_08058AE0: .4byte gUnk_08108288
-_08058AE4:
- ldr r3, _08058B04 @ =gUnk_081082B8
- adds r0, r4, #0
- movs r1, #0x90
- movs r2, #0xb8
- bl sub_08058B08
- cmp r0, #0
- beq _08058AFC
- adds r0, r4, #0
- movs r1, #3
- bl sub_08058B5C
-_08058AFC:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08058B04: .4byte gUnk_081082B8
-
- thumb_func_start sub_08058B08
-sub_08058B08: @ 0x08058B08
- push {r4, r5, lr}
- adds r4, r3, #0
- ldr r0, [r0, #0x20]
- cmp r0, r1
- blo _08058B16
- cmp r0, r2
- bls _08058B1A
-_08058B16:
- movs r0, #0
- b _08058B50
-_08058B1A:
- subs r0, r0, r1
- lsrs r0, r0, #3
- lsls r0, r0, #3
- adds r4, r4, r0
- ldr r3, _08058B54 @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r2, [r3, r0]
- ldr r1, _08058B58 @ =gRoomControls
- ldrh r0, [r1, #6]
- subs r2, r2, r0
- ldrh r0, [r4]
- subs r2, r2, r0
- movs r5, #0x32
- ldrsh r0, [r3, r5]
- ldrh r1, [r1, #8]
- subs r0, r0, r1
- ldrh r1, [r4, #2]
- subs r0, r0, r1
- movs r1, #0
- ldrh r3, [r4, #4]
- cmp r2, r3
- bhs _08058B4E
- ldrh r4, [r4, #6]
- cmp r0, r4
- bhs _08058B4E
- movs r1, #1
-_08058B4E:
- adds r0, r1, #0
-_08058B50:
- pop {r4, r5, pc}
- .align 2, 0
-_08058B54: .4byte gPlayerEntity
-_08058B58: .4byte gRoomControls
-
- thumb_func_start sub_08058B5C
-sub_08058B5C: @ 0x08058B5C
- push {r4, r5, lr}
- ldr r3, _08058BB4 @ =gScreenTransition
- movs r0, #0
- movs r4, #1
- strb r4, [r3, #8]
- strb r0, [r3, #9]
- movs r5, #4
- movs r0, #4
- strb r0, [r3, #0xf]
- ldr r0, _08058BB8 @ =gRoomControls
- ldrb r0, [r0, #4]
- strb r0, [r3, #0xc]
- movs r0, #6
- strb r0, [r3, #0xd]
- adds r2, r1, #0
- ands r2, r4
- rsbs r0, r2, #0
- orrs r0, r2
- asrs r0, r0, #0x1f
- ands r0, r5
- strb r0, [r3, #0xe]
- ldr r4, _08058BBC @ =gUnk_081082E8
- lsls r2, r1, #1
- adds r2, r2, r1
- lsls r0, r2, #1
- adds r0, r0, r4
- ldrh r0, [r0]
- strh r0, [r3, #0x10]
- adds r0, r2, #1
- lsls r0, r0, #1
- adds r0, r0, r4
- ldrh r0, [r0]
- strh r0, [r3, #0x12]
- ldr r1, _08058BC0 @ =gUnk_02002A40
- adds r2, #2
- lsls r2, r2, #1
- adds r2, r2, r4
- ldrh r0, [r2]
- strb r0, [r1, #7]
- ldr r0, _08058BC4 @ =0x00000121
- bl PlaySFX
- pop {r4, r5, pc}
- .align 2, 0
-_08058BB4: .4byte gScreenTransition
-_08058BB8: .4byte gRoomControls
-_08058BBC: .4byte gUnk_081082E8
-_08058BC0: .4byte gUnk_02002A40
-_08058BC4: .4byte 0x00000121
-
- thumb_func_start sub_08058BC8
-sub_08058BC8: @ 0x08058BC8
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- sub sp, #0x14
- mov sb, r0
- ldr r0, _08058C9C @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _08058CA0 @ =gUnk_02017AA0
- adds r4, r0, r1
- movs r0, #0x80
- lsls r0, r0, #9
- str r0, [sp]
- mov r1, sp
- movs r2, #0
- movs r0, #0x78
- strh r0, [r1, #8]
- movs r0, #0x80
- strh r0, [r1, #0xa]
- mov r0, sp
- strh r2, [r0, #0x10]
- movs r1, #0x80
- lsls r1, r1, #1
- strh r1, [r0, #0xe]
- strh r1, [r0, #0xc]
- movs r5, #0
- mov r6, sp
- ldr r0, _08058CA4 @ =gSineTable
- mov r8, r0
- adds r7, r1, #0
-_08058C0A:
- lsls r0, r5, #7
- movs r1, #0xa0
- bl __divsi3
- movs r1, #0xff
- ands r0, r1
- lsls r1, r0, #1
- add r1, r8
- movs r3, #0
- ldrsh r2, [r1, r3]
- lsls r1, r2, #1
- adds r1, r1, r2
- asrs r1, r1, #2
- adds r1, r1, r7
- strh r1, [r6, #0xc]
- lsls r0, r0, #2
- add r0, r8
- movs r1, #0
- ldrsh r0, [r0, r1]
- asrs r0, r0, #4
- subs r0, r7, r0
- strh r0, [r6, #0xe]
- mov r3, sb
- ldr r0, [r3, #0x20]
- adds r0, r0, r5
- lsls r0, r0, #8
- str r0, [sp, #4]
- mov r0, sp
- adds r1, r4, #0
- movs r2, #1
- bl BgAffineSet
- adds r4, #0x10
- adds r5, #1
- cmp r5, #0x9f
- bls _08058C0A
- ldr r0, _08058C9C @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _08058CA8 @ =gUnk_02017BA0
- adds r4, r0, r1
- ldr r2, _08058CAC @ =gScreen
- ldrh r0, [r4]
- strh r0, [r2, #0x38]
- ldrh r0, [r4, #2]
- strh r0, [r2, #0x3a]
- ldrh r0, [r4, #4]
- strh r0, [r2, #0x3c]
- ldrh r0, [r4, #6]
- strh r0, [r2, #0x3e]
- ldrh r1, [r4, #8]
- adds r0, r2, #0
- adds r0, #0x40
- strh r1, [r0]
- ldrh r0, [r4, #0xa]
- adds r1, r2, #0
- adds r1, #0x42
- strh r0, [r1]
- ldrh r1, [r4, #0xc]
- adds r0, r2, #0
- adds r0, #0x44
- strh r1, [r0]
- ldrh r1, [r4, #0xe]
- adds r0, #2
- strh r1, [r0]
- add sp, #0x14
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08058C9C: .4byte gUnk_03003DE4
-_08058CA0: .4byte gUnk_02017AA0
-_08058CA4: .4byte gSineTable
-_08058CA8: .4byte gUnk_02017BA0
-_08058CAC: .4byte gScreen
-
- thumb_func_start sub_08058CB0
-sub_08058CB0: @ 0x08058CB0
- push {r4, lr}
- adds r4, r0, #0
- ldr r2, _08058CD8 @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r1, [r2, r0]
- ldr r3, _08058CDC @ =gRoomControls
- ldrh r0, [r3, #6]
- subs r1, r1, r0
- movs r0, #0x32
- ldrsh r2, [r2, r0]
- ldrh r0, [r3, #8]
- subs r2, r2, r0
- cmp r1, #0x77
- bhi _08058CE0
- movs r1, #1
- cmp r2, #0x4f
- bhi _08058CE8
- movs r1, #0
- b _08058CE8
- .align 2, 0
-_08058CD8: .4byte gPlayerEntity
-_08058CDC: .4byte gRoomControls
-_08058CE0:
- movs r1, #3
- cmp r2, #0x4f
- bhi _08058CE8
- movs r1, #2
-_08058CE8:
- ldr r0, _08058CF8 @ =gUnk_08108300
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- str r0, [r4, #0x20]
- strh r0, [r4, #0x26]
- pop {r4, pc}
- .align 2, 0
-_08058CF8: .4byte gUnk_08108300
-
- thumb_func_start sub_08058CFC
-sub_08058CFC: @ 0x08058CFC
- push {r4, r5, lr}
- ldr r5, _08058D2C @ =gPlayerEntity
- movs r1, #0x32
- ldrsh r0, [r5, r1]
- ldr r1, _08058D30 @ =gRoomControls
- movs r2, #0xc
- ldrsh r1, [r1, r2]
- subs r4, r0, r1
- cmp r4, #0x4b
- bhi _08058D1A
- adds r0, r5, #0
- movs r1, #0xc0
- movs r2, #0x10
- bl sub_080044AE
-_08058D1A:
- cmp r4, #0x54
- bls _08058D28
- adds r0, r5, #0
- movs r1, #0xc0
- movs r2, #0
- bl sub_080044AE
-_08058D28:
- pop {r4, r5, pc}
- .align 2, 0
-_08058D2C: .4byte gPlayerEntity
-_08058D30: .4byte gRoomControls
-
- thumb_func_start sub_08058D34
-sub_08058D34: @ 0x08058D34
- push {r4, lr}
- movs r0, #0x28
- bl LoadPaletteGroup
- ldr r0, _08058DAC @ =gUnk_02017700
- movs r2, #0x90
- lsls r2, r2, #2
- adds r1, r0, r2
- movs r2, #0x20
- bl _DmaCopy
- ldr r2, _08058DB0 @ =gUsedPalettes
- ldr r0, [r2]
- movs r1, #0x80
- lsls r1, r1, #0xe
- orrs r0, r1
- str r0, [r2]
- movs r0, #0x16
- bl LoadGfxGroup
- ldr r1, _08058DB4 @ =gScreen
- ldrh r0, [r1]
- movs r3, #0
- movs r2, #1
- movs r4, #0
- orrs r0, r2
- strh r0, [r1]
- ldr r0, _08058DB8 @ =0x0000BC82
- strh r0, [r1, #0x20]
- ldr r0, _08058DBC @ =0x00005E86
- strh r0, [r1, #0x14]
- strh r3, [r1, #0x16]
- strh r3, [r1, #0x18]
- adds r2, r1, #0
- adds r2, #0x66
- ldr r0, _08058DC0 @ =0x00003456
- strh r0, [r2]
- adds r1, #0x68
- ldr r0, _08058DC4 @ =0x00000909
- strh r0, [r1]
- ldr r0, _08058DC8 @ =gArea
- movs r2, #0x86
- lsls r2, r2, #4
- adds r1, r0, r2
- adds r2, #4
- adds r0, r0, r2
- ldr r0, [r0]
- str r0, [r1]
- ldr r0, _08058DCC @ =gUnk_02000070
- strb r4, [r0]
- movs r0, #0x17
- bl CheckGlobalFlag
- cmp r0, #0
- beq _08058DA8
- movs r0, #0x4a
- bl LoadGfxGroup
-_08058DA8:
- pop {r4, pc}
- .align 2, 0
-_08058DAC: .4byte gUnk_02017700
-_08058DB0: .4byte gUsedPalettes
-_08058DB4: .4byte gScreen
-_08058DB8: .4byte 0x0000BC82
-_08058DBC: .4byte 0x00005E86
-_08058DC0: .4byte 0x00003456
-_08058DC4: .4byte 0x00000909
-_08058DC8: .4byte gArea
-_08058DCC: .4byte gUnk_02000070
diff --git a/asm/non_matching/managerC/sub_08058D34.inc b/asm/non_matching/managerC/sub_08058D34.inc
new file mode 100644
index 00000000..9749bb14
--- /dev/null
+++ b/asm/non_matching/managerC/sub_08058D34.inc
@@ -0,0 +1,66 @@
+sub_08058D34: @ 0x08058D34
+ push {r4, lr}
+ mov r0, #0x28
+ bl LoadPaletteGroup
+ ldr r0, _08058DAC @ =gUnk_02017700
+ mov r2, #0x90
+ lsl r2, r2, #0x2
+ add r1, r0, r2
+ mov r2, #0x20
+ bl _DmaCopy
+ ldr r2, _08058DB0 @ =gUsedPalettes
+ ldr r0, [r2]
+ mov r1, #0x80
+ lsl r1, r1, #0xe
+ orr r0, r0, r1
+ str r0, [r2]
+ mov r0, #0x16
+ bl LoadGfxGroup
+ ldr r1, _08058DB4 @ =gScreen
+ ldrh r0, [r1]
+ mov r3, #0
+ mov r2, #0x1
+ mov r4, #0
+ orr r0, r0, r2
+ strh r0, [r1]
+ ldr r0, _08058DB8 @ =0x0000BC82
+ strh r0, [r1, #0x20]
+ ldr r0, _08058DBC @ =0x00005E86
+ strh r0, [r1, #0x14]
+ strh r3, [r1, #0x16]
+ strh r3, [r1, #0x18]
+ add r2, r1, #0
+ add r2, r2, #0x66
+ ldr r0, _08058DC0 @ =0x00003456
+ strh r0, [r2]
+ add r1, r1, #0x68
+ ldr r0, _08058DC4 @ =0x00000909
+ strh r0, [r1]
+ ldr r0, _08058DC8 @ =gArea
+ mov r2, #0x86
+ lsl r2, r2, #0x4
+ add r1, r0, r2
+ add r2, r2, #0x4
+ add r0, r0, r2
+ ldr r0, [r0]
+ str r0, [r1]
+ ldr r0, _08058DCC @ =gUnk_02000070
+ strb r4, [r0]
+ mov r0, #0x17
+ bl CheckGlobalFlag
+ cmp r0, #0
+ beq _08058DA8
+ mov r0, #0x4a
+ bl LoadGfxGroup
+_08058DA8:
+ pop {r4, pc}
+.align 2,0
+_08058DAC: .4byte gUnk_02017700
+_08058DB0: .4byte gUsedPalettes
+_08058DB4: .4byte gScreen
+_08058DB8: .4byte 0x0000BC82
+_08058DBC: .4byte 0x00005E86
+_08058DC0: .4byte 0x00003456
+_08058DC4: .4byte 0x00000909
+_08058DC8: .4byte gArea
+_08058DCC: .4byte gUnk_02000070
diff --git a/data/data_0810821C.s b/data/data_08108308.s
index c0cae962..2b089c8a 100644
--- a/data/data_0810821C.s
+++ b/data/data_08108308.s
@@ -4,27 +4,6 @@
.section .rodata
.align 2
-gUnk_0810821C:: @ 0810821C
- .incbin "baserom.gba", 0x10821C, 0x000000C
-
-gUnk_08108228:: @ 08108228
- .incbin "baserom.gba", 0x108228, 0x0000030
-
-gUnk_08108258:: @ 08108258
- .incbin "baserom.gba", 0x108258, 0x0000030
-
-gUnk_08108288:: @ 08108288
- .incbin "baserom.gba", 0x108288, 0x0000030
-
-gUnk_081082B8:: @ 081082B8
- .incbin "baserom.gba", 0x1082B8, 0x0000030
-
-gUnk_081082E8:: @ 081082E8
- .incbin "baserom.gba", 0x1082E8, 0x0000018
-
-gUnk_08108300:: @ 08108300
- .incbin "baserom.gba", 0x108300, 0x0000008
-
gUnk_08108308:: @ 08108308
.incbin "baserom.gba", 0x108308, 0x000000C
diff --git a/linker.ld b/linker.ld
index 096fd008..c4f356a6 100644
--- a/linker.ld
+++ b/linker.ld
@@ -482,7 +482,7 @@ SECTIONS {
src/manager/manager9.o(.text);
src/manager/managerA.o(.text);
src/manager/managerB.o(.text);
- asm/managerC.o(.text);
+ src/manager/managerC.o(.text);
asm/managerD.o(.text);
src/manager/managerE.o(.text);
asm/managerF.o(.text);
@@ -1002,7 +1002,8 @@ SECTIONS {
src/manager/manager9.o(.rodata);
src/manager/managerA.o(.rodata);
src/manager/managerB.o(.rodata);
- data/data_0810821C.o(.rodata);
+ src/manager/managerC.o(.rodata);
+ data/data_08108308.o(.rodata);
src/item.o(.rodata);
data/data_0811BD44.o(.rodata);
data/room_headers.o(.rodata);
diff --git a/src/manager/managerC.c b/src/manager/managerC.c
new file mode 100644
index 00000000..b2571591
--- /dev/null
+++ b/src/manager/managerC.c
@@ -0,0 +1,336 @@
+#include "global.h"
+#include "manager.h"
+#include "flags.h"
+#include "structures.h"
+#include "room.h"
+#include "area.h"
+#include "screen.h"
+#include "trig.h"
+#include "functions.h"
+
+
+typedef struct {
+ Manager manager;
+ s32 unk_20;
+ union SplitWord unk_24;
+ u32 unk_28;
+ u32 unk_2c;
+ u8 unk_30[0x10];
+} ManagerC;
+
+typedef struct {
+ u16 unk_0;
+ u16 unk_2;
+ u16 unk_4;
+ u16 unk_6;
+} struct_08108228;
+
+void (* const gUnk_0810821C[])(ManagerC*);
+const struct_08108228 gUnk_08108228[6];
+const struct_08108228 gUnk_08108258[6];
+const struct_08108228 gUnk_08108288[6];
+const struct_08108228 gUnk_081082B8[6];
+const u16 gUnk_081082E8[0xC];
+const u16 gUnk_08108300[4];
+
+void sub_08058BC8(ManagerC*);
+void sub_08058CB0(ManagerC*);
+void sub_08058CFC(void);
+void sub_08058A04(ManagerC*);
+void sub_080588F8(ManagerC*);
+u32 sub_08058B08(ManagerC*, u32, u32, const struct_08108228*);
+void sub_08058B5C(ManagerC*, u32);
+void sub_08058D34(void);
+
+extern void sub_0805622C(struct BgAffineDstData*, u32, u32);
+extern void sub_08052D74(void*, void*, void*);
+extern void sub_080044AE(Entity*, u32, u32);
+extern void _DmaCopy(const void* src, void* dest, u32 size);
+
+extern u8 gUnk_03003DE4[0xC];
+
+extern struct BgAffineDstData gUnk_02017AA0[];
+extern struct BgAffineDstData gUnk_02017BA0[];
+extern u8 gUnk_02017700[];
+extern u8 gUnk_02000070;
+extern u32 gUsedPalettes;
+
+void sub_08058894(ManagerC*);
+void sub_080588CC(ManagerC*);
+void nullsub_108(ManagerC*);
+
+void (* const gUnk_0810821C[])(ManagerC*) = {
+ sub_08058894,
+ sub_080588CC,
+ nullsub_108
+};
+
+void sub_0805884C(ManagerC* this) {
+ u32 tmp;
+ gUnk_0810821C[this->manager.action](this);
+ sub_08058BC8(this);
+ sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4[0] * 0xA0], 0x04000020, 0xA2600008);
+}
+void sub_08058894(ManagerC* this) {
+ this->manager.action = 1;
+ this->unk_28 = 0x1234;
+ this->manager.unk_0e = CheckLocalFlags(0x15, 0x2) != 0;
+ sub_08058CB0(this);
+ sub_08052D74(this, sub_08058D34, 0);
+}
+
+void sub_080588CC(ManagerC* this) {
+ sub_08058CFC();
+ sub_08058A04(this);
+ if (gScreenTransition.transitioningOut) {
+ this->manager.action = 2;
+ } else {
+ sub_080588F8(this);
+ }
+}
+
+void nullsub_108(ManagerC* this) {}
+
+#define ABS_DIFF_GT(a, b, c) (signed) a - b >= 0 ? a - b > c : b - a > c
+
+void sub_080588F8(ManagerC* this) {
+ if (this->manager.unk_0f == 0) {
+ if (ABS_DIFF_GT(this->unk_28, this->unk_24.HALF.HI, 8)) {
+ this->unk_28 = 0x1234;
+ switch (this->unk_24.HALF.HI & 0xFFFE) {
+ case 0x48:
+ case 0xa0:
+ case 0xf0:
+ this->unk_28 = this->unk_24.HALF.HI;
+ this->manager.unk_0f = 0x2D;
+ PlaySFX(0x8c);
+ }
+ }
+ } else {
+ this->manager.unk_0f--;
+ if (this->manager.unk_0f > 0x29) {
+ this->unk_24.HALF.HI = this->unk_28 - 2;
+ } else {
+ this->unk_24.HALF.HI = this->unk_28;
+ }
+ }
+ if (this->manager.unk_0e) {
+ s32 tmp = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY;
+ u32 tmp2;
+ tmp2 = (((unsigned)(tmp - 0x50 < 0 ? 0x50 - tmp : tmp - 0x50) >> 3) * 0x3000) + 0x4000;
+ if (this->manager.unk_0f == 0) {
+ if (tmp < 0x49) {
+ this->unk_24.WORD -= tmp2;
+ } else if (tmp > 0x57) {
+ this->unk_24.WORD += tmp2;
+ }
+ if (ABS_DIFF_GT(this->unk_2c, this->unk_24.WORD, 0x100000)) {
+ this->unk_2c = this->unk_24.WORD;
+ PlaySFX(0x8b);
+ }
+ }
+ }
+ if ((this->unk_20 = this->unk_24.HALF.HI) < 0) {
+ this->unk_20 = 0x1FF;
+ this->unk_24.HALF.HI = 0x1FF;
+ } else if (this->unk_20 > 0x1FF) {
+ this->unk_20 = 0;
+ this->unk_24.HALF.HI = 0;
+ }
+}
+
+const struct_08108228 gUnk_08108228[6] = {
+ {0x40, 0x2A, 0x1C, 0x10},
+ {0x3C, 0x24, 0x1C, 0x12},
+ {0x3C, 0x1C, 0x1A, 0x18},
+ {0x38, 0x16, 0x1C, 0x16},
+ {0x34, 0x16, 0x1E, 0x0E},
+ {0x30, 0x16, 0x20, 0x0A}
+};
+
+const struct_08108228 gUnk_08108258[6] = {
+ {0x30, 0x88, 0x20, 0x0A},
+ {0x34, 0x7E, 0x1E, 0x12},
+ {0x38, 0x78, 0x1A, 0x16},
+ {0x3A, 0x70, 0x1A, 0x18},
+ {0x3C, 0x64, 0x1E, 0x1E},
+ {0x3E, 0x6A, 0x1C, 0x10}
+};
+
+const struct_08108228 gUnk_08108288[6] = {
+ {0x98, 0x2A, 0x1C, 0x10},
+ {0x98, 0x24, 0x1C, 0x12},
+ {0x9C, 0x1C, 0x1A, 0x18},
+ {0x9C, 0x16, 0x1C, 0x16},
+ {0xA0, 0x16, 0x1E, 0x0E},
+ {0xA0, 0x16, 0x20, 0x0A}
+};
+
+const struct_08108228 gUnk_081082B8[6] = {
+ {0xA0, 0x88, 0x20, 0x0A},
+ {0x9E, 0x7E, 0x1E, 0x12},
+ {0x9C, 0x78, 0x1A, 0x16},
+ {0x9A, 0x70, 0x1A, 0x18},
+ {0x98, 0x64, 0x1E, 0x1E},
+ {0x98, 0x6A, 0x1C, 0x10}
+};
+
+void sub_08058A04(ManagerC* this) {
+ s32 tmp = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX;
+ s32 tmp2 = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY;
+ if ((this->unk_20 - 0x118 < 0xDu) &&
+ CheckGlobalFlag(LV1TARU_OPEN) &&
+ (tmp - 0x6d < 0x17u) &&
+ (tmp2 - 0x45 < 0x17u) &&
+ (gPlayerEntity.height.HALF.HI == 0)) {
+ gPlayerState.playerAction = 3;
+ gPlayerState.field_0x38 = 0;
+ gPlayerEntity.x.HALF.HI = gRoomControls.roomOriginX + 0x78;
+ gPlayerEntity.y.HALF.HI = gRoomControls.roomOriginY + 0x50;
+ return;
+ }
+ if (tmp < 0x78) {
+ if (tmp2 < 0x50) {
+ if (sub_08058B08(this, 0x88, 0xB0, gUnk_08108228)) {
+ sub_08058B5C(this, 0);
+ }
+ } else {
+ if (sub_08058B08(this, 0x38, 0x60, gUnk_08108258)) {
+ sub_08058B5C(this, 1);
+ }
+ }
+ } else {
+ if (tmp2 < 0x50) {
+ if (sub_08058B08(this, 0xE0, 0x108, gUnk_08108288)) {
+ sub_08058B5C(this, 2);
+ }
+ } else {
+ if (sub_08058B08(this, 0x90, 0xB8, gUnk_081082B8)) {
+ sub_08058B5C(this, 3);
+ }
+ }
+ }
+}
+
+u32 sub_08058B08(ManagerC* this, u32 unk1, u32 unk2, const struct_08108228* unk3) {
+ u32 tmp = this->unk_20;
+ if (tmp < unk1 || tmp > unk2) {
+ return 0;
+ } else {
+ u32 tmp2, tmp3;
+ tmp -= unk1;
+ tmp >>= 3;
+ unk3 += tmp;
+ tmp2 = (gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX - unk3->unk_0);
+ tmp3 = (gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY - unk3->unk_2);
+ return ((tmp2 < unk3->unk_4) && (tmp3 < unk3->unk_6));
+ }
+}
+
+const u16 gUnk_081082E8[0xC] = {
+ 0xB8, 0x80, 0x0,
+ 0xB8, 0x110, 0x2,
+ 0x118, 0x80, 0x2,
+ 0x118, 0x110, 0x0
+};
+
+void sub_08058B5C(ManagerC* this, u32 unk1) {
+ gScreenTransition.transitioningOut = 1;
+ gScreenTransition.transitionType = 0;
+ gScreenTransition.field_0xf = 4;
+ gScreenTransition.areaID = gRoomControls.areaID;
+ gScreenTransition.roomID = 6;
+ gScreenTransition.playerState = unk1 & 1 ? 4 : 0;
+ gScreenTransition.playerStartPos.HALF.x = gUnk_081082E8[unk1*3];
+ gScreenTransition.playerStartPos.HALF.y = gUnk_081082E8[unk1*3+1];
+ gUnk_02002A40.unk7 = gUnk_081082E8[unk1*3+2];
+ PlaySFX(0x121);
+}
+
+void sub_08058BC8(ManagerC* this) {
+ struct BgAffineDstData * tmp = &gUnk_02017AA0[gUnk_03003DE4[0]*0xA0];
+ struct BgAffineSrcData tmp2;
+ s32 tmp3;
+ tmp2.texX = 0x10000;
+ tmp2.scrX = 0x78;
+ tmp2.scrY = 0x80;
+ tmp2.alpha = 0;
+ tmp2.sy = 0x100;
+ tmp2.sx = 0x100;
+ tmp3 = 0;
+ do {
+ u32 indx = ((tmp3 << 7) / 0xA0) & 0xFF;
+ tmp2.sx = 0x100 + ((gSineTable[indx] * 3) >> 2);
+ tmp2.sy = 0x100 - ((gSineTable[indx * 2] * 2) >> 5);//yes, it makes no sense to multiply first and then shift right, but it's matching this way
+ tmp2.texY = (this->unk_20 + tmp3) << 8;
+ BgAffineSet(&tmp2, tmp, 1);
+ tmp++;
+ } while (++tmp3<0xA0u);
+ tmp = &gUnk_02017BA0[gUnk_03003DE4[0]*0xA0];
+ gScreen.controls.bg2dx = tmp->pa;
+ gScreen.controls.bg2dmx = tmp->pb;
+ gScreen.controls.bg2dy = tmp->pc;
+ gScreen.controls.bg2dmy = tmp->pd;
+ gScreen.controls.bg2xPointLeastSig = ((union SplitWord *) &tmp->dx)->HALF.LO;
+ gScreen.controls.bg2xPointMostSig = ((union SplitWord *) &tmp->dx)->HALF.HI;
+ gScreen.controls.bg2yPointLeastSig = ((union SplitWord *) &tmp->dy)->HALF.LO;
+ gScreen.controls.bg2yPointMostSig = ((union SplitWord *) &tmp->dy)->HALF.HI;
+}
+
+const u16 gUnk_08108300[4] = {
+ 0xA4, 0x4C, 0xF4, 0x9C
+};
+
+void sub_08058CB0(ManagerC* this) {
+ u32 tmp = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX;
+ u32 tmp2 = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY;
+ u32 tmp3;
+ if (tmp < 0x78) {
+ tmp3 = 1;
+ if (tmp2 < 0x50) {
+ tmp3 = 0;
+ }
+ } else {
+ tmp3 = 3;
+ if (tmp2 < 0x50) {
+ tmp3 = 2;
+ }
+ }
+ this->unk_24.HALF.HI = this->unk_20 = gUnk_08108300[tmp3];
+}
+
+void sub_08058CFC() {
+ u32 tmp = gPlayerEntity.y.HALF.HI - gRoomControls.roomScrollY;
+ if (tmp < 0x4C) {
+ sub_080044AE(&gPlayerEntity, 0xC0, 0x10);
+ }
+ if (tmp > 0x54) {
+ sub_080044AE(&gPlayerEntity, 0xC0, 0);
+ }
+}
+
+#ifdef NON_MATCHING
+void sub_08058D34() {
+ LoadPaletteGroup(0x28);
+ _DmaCopy(gUnk_02017700, gUnk_02017700 + 0x240, 0x20);
+ gUsedPalettes |= 0x200000;
+ LoadGfxGroup(0x16);
+ gScreen.lcd.displayControl |= 1;
+ gScreen.affine.bg2Control = 0xBC82;
+ gScreen.bg.bg1xOffset = 0x5E86;
+ gScreen.bg.bg1yOffset = 0;
+ gScreen.bg.bg2xOffset = 0;
+ gScreen.controls.layerFXControl = 0x3456;
+ gScreen.controls.alphaBlend = 0x909;
+ gArea.musicIndex = gArea.pMusicIndex;
+ gUnk_02000070 = 0;
+ if (CheckGlobalFlag(LV1TARU_OPEN)) {
+ LoadGfxGroup(0x4A);
+ }
+}
+#else
+NAKED
+void sub_08058D34() {
+ asm(".include \"asm/non_matching/managerC/sub_08058D34.inc\"");
+}
+#endif