summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-12-30 02:11:23 -0800
committertheo3 <arisstephenson2@gmail.com>2021-01-16 16:57:51 -0800
commitb9e07c12024895de9abde045cc1d1421a5bc2139 (patch)
tree6d0dbe6efad3a2da40701f2dec739fea9dac30c4
parent303a89da03549eb3dd383cfd4bcf93466b6a0871 (diff)
begin player.c and new nonmatching macro
merge fix
-rw-r--r--asm/code_08070698.s1675
-rw-r--r--asm/non_matching/player/sub_08070794.s544
-rw-r--r--asm/non_matching/player/sub_08070DC4.s87
-rw-r--r--include/functions.h15
-rw-r--r--include/global.h22
-rw-r--r--include/room.h1
-rw-r--r--linker.ld2
-rw-r--r--src/code_0808091C.c2
-rw-r--r--src/npc/carlov.c1
-rw-r--r--src/player.c546
-rw-r--r--src/sub_08070680.c60
11 files changed, 1214 insertions, 1741 deletions
diff --git a/asm/code_08070698.s b/asm/code_08070698.s
index ce1b6779..0b19e971 100644
--- a/asm/code_08070698.s
+++ b/asm/code_08070698.s
@@ -6,1681 +6,6 @@
.text
- thumb_func_start sub_08070794
-sub_08070794: @ 0x08070794
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- ldr r6, _080707F0 @ =gPlayerState
- adds r3, r6, #0
- adds r3, #0xa8
- movs r4, #0
- strb r4, [r3]
- ldr r1, [r6, #0x30]
- movs r7, #0x10
- adds r0, r1, #0
- ands r0, r7
- mov ip, r6
- cmp r0, #0
- beq _08070818
- adds r2, r5, #0
- adds r2, #0x29
- ldrb r1, [r2]
- movs r0, #0x39
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x42
- strb r4, [r0]
- movs r0, #0xa0
- lsls r0, r0, #1
- strh r0, [r5, #0x24]
- movs r0, #0x80
- strb r0, [r6, #6]
- strb r7, [r3]
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- adds r0, #0x5c
- adds r1, r5, #0
- adds r1, #0x58
- ldrb r1, [r1]
- cmp r0, r1
- bne _080707F8
- ldrh r0, [r5, #0x12]
- cmp r0, #2
- bne _080707F8
- ldr r0, _080707F4 @ =gPlayerEntity
- bl UpdateAnimationSingleFrame
- b _08070800
- .align 2, 0
-_080707F0: .4byte gPlayerState
-_080707F4: .4byte gPlayerEntity
-_080707F8:
- movs r0, #0x97
- lsls r0, r0, #2
- mov r1, ip
- strh r0, [r1, #8]
-_08070800:
- ldr r0, _08070814 @ =gPlayerEntity
- bl sub_0806F948
- bl ResetPlayer
- adds r0, r5, #0
- bl sub_08077698
- b _08070BE4
- .align 2, 0
-_08070814: .4byte gPlayerEntity
-_08070818:
- movs r0, #0x80
- lsls r0, r0, #5
- ands r0, r1
- cmp r0, #0
- beq _08070842
- adds r1, r5, #0
- adds r1, #0x40
- movs r0, #0x1e
- strb r0, [r1]
- movs r0, #0xc
- strb r0, [r3]
- movs r1, #0
- movs r2, #0x24
- ldrsh r0, [r5, r2]
- cmp r0, #0
- bne _0807083A
- movs r1, #1
-_0807083A:
- adds r0, r5, #0
- bl sub_08070BEC
- b _08070BE4
-_08070842:
- movs r4, #0x80
- lsls r4, r4, #0xc
- ands r4, r1
- cmp r4, #0
- beq _08070852
- bl sub_08079938
- b _08070BE4
-_08070852:
- adds r0, r5, #0
- bl sub_080085B0
- adds r0, r5, #0
- adds r0, #0x40
- strb r4, [r0]
- bl sub_08078EFC
- cmp r0, #0
- beq _08070868
- b _08070BE4
-_08070868:
- adds r0, r6, #0
- adds r0, #0x26
- ldrb r0, [r0]
- cmp r0, #0
- bne _080708AC
- ldrb r1, [r6, #2]
- movs r2, #0xc0
- adds r0, r2, #0
- ands r0, r1
- cmp r0, #0
- bne _080708AC
- ldrb r0, [r6, #3]
- cmp r0, #0
- bne _0807088E
- adds r0, r6, #0
- adds r0, #0x21
- ldrb r0, [r0]
- cmp r0, #0
- beq _08070892
-_0807088E:
- strh r2, [r5, #0x24]
- b _080708AC
-_08070892:
- ldrb r0, [r6, #0x1b]
- cmp r0, #0
- beq _0807089C
- movs r0, #0xe0
- b _080708AA
-_0807089C:
- ldrb r0, [r6, #0x1c]
- cmp r0, #0
- beq _080708A6
- movs r0, #0x80
- b _080708AA
-_080708A6:
- movs r0, #0xa0
- lsls r0, r0, #1
-_080708AA:
- strh r0, [r5, #0x24]
-_080708AC:
- ldr r4, _08070918 @ =gPlayerState
- ldrb r0, [r4, #6]
- movs r1, #0x80
- orrs r1, r0
- strb r1, [r4, #6]
- ldr r0, [r4, #0x30]
- ldr r6, _0807091C @ =0x10000002
- ands r0, r6
- cmp r0, #0
- bne _080708C4
- bl sub_0807A1B8
-_080708C4:
- bl sub_08078EFC
- cmp r0, #0
- beq _080708CE
- b _08070BE4
-_080708CE:
- ldrb r0, [r4, #2]
- cmp r0, #0
- beq _080708D6
- b _080709D8
-_080708D6:
- ldr r0, [r4, #0x30]
- movs r1, #0x80
- lsls r1, r1, #3
- ands r0, r1
- cmp r0, #0
- beq _080708E4
- b _080709D8
-_080708E4:
- adds r0, r5, #0
- adds r0, #0x42
- ldrb r0, [r0]
- cmp r0, #0
- bne _08070924
- bl sub_080782C0
- cmp r0, #0
- beq _08070924
- ldr r0, _08070920 @ =gRoomVars
- ldrb r0, [r0, #6]
- cmp r0, #0
- bne _08070902
- bl ResetPlayer
-_08070902:
- ldr r0, [r4, #0x30]
- ands r0, r6
- cmp r0, #0
- beq _0807090C
- b _08070BE4
-_0807090C:
- bl sub_0807A1B8
- bl sub_08078EFC
- b _08070BE4
- .align 2, 0
-_08070918: .4byte gPlayerState
-_0807091C: .4byte 0x10000002
-_08070920: .4byte gRoomVars
-_08070924:
- ldr r0, _0807094C @ =gPlayerState
- ldr r1, [r0, #0x30]
- ldr r2, _08070950 @ =0x00041635
- ands r1, r2
- adds r0, #0xaa
- ldrb r0, [r0]
- orrs r1, r0
- cmp r1, #0
- bne _080709D8
- bl sub_08019840
- cmp r0, #0xf
- bls _08070940
- b _08070BE4
-_08070940:
- lsls r0, r0, #2
- ldr r1, _08070954 @ =_08070958
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807094C: .4byte gPlayerState
-_08070950: .4byte 0x00041635
-_08070954: .4byte _08070958
-_08070958: @ jump table
- .4byte _08070998 @ case 0
- .4byte _08070BE4 @ case 1
- .4byte _08070BE4 @ case 2
- .4byte _080709A8 @ case 3
- .4byte _080709C2 @ case 4
- .4byte _08070BE4 @ case 5
- .4byte _08070BE4 @ case 6
- .4byte _08070BE4 @ case 7
- .4byte _08070BE4 @ case 8
- .4byte _08070BE4 @ case 9
- .4byte _08070BE4 @ case 10
- .4byte _08070BE4 @ case 11
- .4byte _08070BE4 @ case 12
- .4byte _08070BE4 @ case 13
- .4byte _08070BE4 @ case 14
- .4byte _080709B4 @ case 15
-_08070998:
- ldr r0, _080709A4 @ =gPlayerState
- ldrb r1, [r0, #6]
- movs r2, #0x80
- eors r1, r2
- strb r1, [r0, #6]
- b _080709D8
- .align 2, 0
-_080709A4: .4byte gPlayerState
-_080709A8:
- ldr r1, _080709B0 @ =gPlayerState
- movs r0, #0x80
- strb r0, [r1, #6]
- b _080709D8
- .align 2, 0
-_080709B0: .4byte gPlayerState
-_080709B4:
- ldrb r1, [r5, #0x10]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r5, #0x10]
- bl sub_080797EC
- b _08070BE4
-_080709C2:
- ldr r0, _080709D4 @ =gPlayerState
- ldrb r1, [r0, #6]
- movs r2, #0x80
- eors r1, r2
- strb r1, [r0, #6]
- bl sub_080797EC
- b _08070BE4
- .align 2, 0
-_080709D4: .4byte gPlayerState
-_080709D8:
- adds r1, r5, #0
- adds r1, #0x3c
- movs r0, #0
- strb r0, [r1]
- adds r6, r5, #0
- adds r6, #0x29
- ldrb r1, [r6]
- subs r0, #8
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strb r0, [r6]
- adds r0, r5, #0
- bl sub_0807AC54
- cmp r0, #0
- beq _080709FC
- b _08070BE4
-_080709FC:
- adds r0, r5, #0
- bl sub_08077698
- bl sub_08078EFC
- cmp r0, #0
- beq _08070A0C
- b _08070BE4
-_08070A0C:
- bl sub_080792D8
- ldr r4, _08070A78 @ =gPlayerState
- ldrb r1, [r4, #2]
- ldrb r0, [r4, #0xa]
- orrs r0, r1
- cmp r0, #0
- bne _08070A32
- bl sub_08079550
- cmp r0, #0
- beq _08070A26
- b _08070BE4
-_08070A26:
- adds r0, r5, #0
- bl sub_08078F74
- cmp r0, #0
- beq _08070A32
- b _08070BE4
-_08070A32:
- adds r0, r5, #0
- bl sub_08073904
- bl sub_08078EFC
- cmp r0, #0
- beq _08070A42
- b _08070BE4
-_08070A42:
- ldrb r2, [r4, #2]
- cmp r2, #0
- beq _08070AAC
- adds r1, r4, #0
- adds r1, #0xa8
- movs r0, #0x14
- strb r0, [r1]
- movs r0, #0xc0
- ands r0, r2
- cmp r0, #0
- bne _08070A80
- movs r0, #7
- ands r0, r2
- cmp r0, #3
- beq _08070A7C
- movs r0, #0x20
- ands r0, r2
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0
- bne _08070A7C
- strh r0, [r5, #0x24]
- adds r0, r5, #0
- bl sub_08008926
- b _08070A80
- .align 2, 0
-_08070A78: .4byte gPlayerState
-_08070A7C:
- movs r0, #0xff
- strb r0, [r5, #0x15]
-_08070A80:
- bl sub_08079E08
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _08070A94
- b _08070BE4
-_08070A94:
- ldr r0, _08070AA8 @ =gPlayerState
- ldrb r0, [r0, #4]
- cmp r0, #0
- beq _08070A9E
- b _08070BE4
-_08070A9E:
- adds r0, r5, #0
- bl UpdateAnimationSingleFrame
- b _08070BE4
- .align 2, 0
-_08070AA8: .4byte gPlayerState
-_08070AAC:
- adds r0, r5, #0
- adds r0, #0x42
- ldrb r1, [r0]
- adds r7, r0, #0
- cmp r1, #0
- beq _08070ABA
- b _08070BBC
-_08070ABA:
- adds r0, r4, #0
- adds r0, #0x26
- ldrb r0, [r0]
- cmp r0, #0
- beq _08070AD4
- adds r1, r4, #0
- adds r1, #0xa8
- movs r0, #7
- strb r0, [r1]
- adds r0, r5, #0
- bl sub_0807ACCC
- b _08070B56
-_08070AD4:
- ldr r0, [r4, #0x30]
- movs r1, #0x80
- lsls r1, r1, #0x12
- ands r0, r1
- cmp r0, #0
- bne _08070AEE
- ldrb r0, [r6]
- movs r1, #0x39
- rsbs r1, r1, #0
- ands r1, r0
- movs r0, #8
- orrs r1, r0
- strb r1, [r6]
-_08070AEE:
- ldrb r1, [r4, #0x1e]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- beq _08070B00
- adds r0, r5, #0
- bl sub_08008AA0
- b _08070B1E
-_08070B00:
- ldrb r0, [r4, #0x12]
- cmp r0, #0x17
- bne _08070B0E
- adds r0, r5, #0
- bl sub_08008926
- b _08070B1E
-_08070B0E:
- cmp r0, #1
- bne _08070B18
- bl sub_08078F60
- b _08070B1E
-_08070B18:
- adds r0, r5, #0
- bl sub_08008AA0
-_08070B1E:
- ldr r2, _08070BB8 @ =gPlayerState
- ldrb r1, [r2, #0x1b]
- movs r0, #0x10
- ands r0, r1
- cmp r0, #0
- bne _08070B56
- ldrb r3, [r2, #0xd]
- strb r3, [r5, #0x15]
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- lsls r1, r1, #3
- ands r0, r1
- cmp r0, #0
- beq _08070B56
- movs r0, #0xc0
- lsls r0, r0, #2
- strh r0, [r5, #0x24]
- movs r0, #0x80
- ands r0, r3
- cmp r0, #0
- beq _08070B52
- ldrb r1, [r5, #0x14]
- movs r0, #0xe
- ands r0, r1
- lsls r0, r0, #2
- strb r0, [r5, #0x15]
-_08070B52:
- bl sub_0807A108
-_08070B56:
- movs r4, #0
- ldr r3, _08070BB8 @ =gPlayerState
- ldrb r2, [r3, #7]
- ldrb r0, [r5, #0x15]
- orrs r0, r2
- movs r1, #0x80
- ands r0, r1
- ldrb r1, [r3, #0xa]
- orrs r0, r1
- cmp r0, #0
- bne _08070B8E
- movs r0, #0x10
- ands r0, r2
- cmp r0, #0
- bne _08070B8E
- movs r4, #1
- ldrb r0, [r7]
- cmp r0, #0
- bne _08070B8E
- ldrb r1, [r3, #0x1e]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- bne _08070B8C
- ldrb r0, [r3, #0x12]
- cmp r0, #0x17
- beq _08070B8E
-_08070B8C:
- movs r4, #3
-_08070B8E:
- adds r0, r5, #0
- adds r1, r4, #0
- bl sub_08070BEC
- adds r0, r5, #0
- bl sub_08008AC6
- ldrb r0, [r7]
- cmp r0, #0
- bne _08070BE4
- ldr r1, _08070BB8 @ =gPlayerState
- ldrb r0, [r1, #0xb]
- cmp r0, #0
- bne _08070BE4
- ldrb r0, [r1, #0x12]
- cmp r0, #0x1e
- beq _08070BE4
- adds r0, r5, #0
- bl sub_0806F948
- b _08070BE4
- .align 2, 0
-_08070BB8: .4byte gPlayerState
-_08070BBC:
- ldr r0, [r4, #0x2c]
- cmp r0, #0
- bne _08070BC8
- adds r0, r5, #0
- bl UpdateAnimationSingleFrame
-_08070BC8:
- adds r0, r4, #0
- adds r0, #0x26
- ldrb r0, [r0]
- cmp r0, #0
- beq _08070BE4
- ldr r0, _08070BE8 @ =gScreenTransition
- ldr r0, [r0]
- movs r1, #7
- ands r0, r1
- cmp r0, #0
- bne _08070BE4
- adds r0, r5, #0
- bl CreateWaterTrace
-_08070BE4:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08070BE8: .4byte gScreenTransition
-
- thumb_func_start sub_08070BEC
-sub_08070BEC: @ 0x08070BEC
- push {r4, lr}
- adds r4, r1, #0
- movs r0, #1
- ands r0, r4
- cmp r0, #0
- beq _08070BFE
- bl sub_080797EC
- b _08070C02
-_08070BFE:
- bl sub_08079938
-_08070C02:
- movs r0, #2
- ands r0, r4
- cmp r0, #0
- beq _08070C0E
- bl sub_08079E08
-_08070C0E:
- pop {r4, pc}
-
- thumb_func_start sub_08070C10
-sub_08070C10: @ 0x08070C10
- push {lr}
- ldr r2, _08070C34 @ =gPlayerState
- movs r1, #0xff
- strb r1, [r2, #0xd]
- movs r1, #0x80
- strb r1, [r2, #6]
- adds r2, #0xa8
- movs r1, #0xa
- strb r1, [r2]
- ldr r2, _08070C38 @ =gUnk_0811BA60
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08070C34: .4byte gPlayerState
-_08070C38: .4byte gUnk_0811BA60
-
- thumb_func_start sub_08070C3C
-sub_08070C3C: @ 0x08070C3C
- push {r4, lr}
- adds r4, r0, #0
- bl sub_08004168
- ldr r2, _08070C64 @ =gPlayerState
- ldr r1, [r2, #0x30]
- movs r0, #5
- orrs r1, r0
- ldr r0, _08070C68 @ =0xFFFFFBFF
- ands r1, r0
- str r1, [r2, #0x30]
- movs r0, #0
- strb r0, [r2, #2]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08070C6C
- movs r0, #0xdd
- lsls r0, r0, #1
- b _08070C7E
- .align 2, 0
-_08070C64: .4byte gPlayerState
-_08070C68: .4byte 0xFFFFFBFF
-_08070C6C:
- movs r0, #8
- ands r1, r0
- cmp r1, #0
- beq _08070C7A
- movs r0, #0x8b
- lsls r0, r0, #3
- b _08070C7E
-_08070C7A:
- movs r0, #0xdc
- lsls r0, r0, #1
-_08070C7E:
- strh r0, [r2, #8]
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- ldrb r1, [r4, #0x10]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r4, #0x10]
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r1, [r2]
- movs r0, #0x39
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r2]
- bl ResetPlayer
- bl sub_0807A108
- movs r0, #0x7b
- bl PlaySFX
- movs r0, #0x85
- bl PlaySFX
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08070CB4
-sub_08070CB4: @ 0x08070CB4
- push {r4, r5, lr}
- adds r5, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08070D1A
- ldr r0, _08070CF4 @ =gUnk_02002A40
- adds r0, #0xaa
- ldrb r0, [r0]
- ldr r4, _08070CF8 @ =gPlayerState
- cmp r0, #0
- beq _08070CFC
- ldr r1, [r4, #0x30]
- movs r0, #0x80
- lsls r0, r0, #8
- ands r0, r1
- cmp r0, #0
- beq _08070CFC
- movs r0, #6
- rsbs r0, r0, #0
- ands r1, r0
- str r1, [r4, #0x30]
- ldrb r1, [r5, #0x18]
- adds r0, #2
- ands r0, r1
- strb r0, [r5, #0x18]
- b _08070D1A
- .align 2, 0
-_08070CF4: .4byte gUnk_02002A40
-_08070CF8: .4byte gPlayerState
-_08070CFC:
- ldr r0, [r4, #0x30]
- ldr r1, _08070D1C @ =0xFFFF7FFB
- ands r0, r1
- str r0, [r4, #0x30]
- bl sub_08079458
- movs r0, #0
- strb r0, [r4, #0xa]
- adds r1, r5, #0
- adds r1, #0x3d
- movs r0, #0x20
- strb r0, [r1]
- subs r0, #0x22
- bl ModHealth
-_08070D1A:
- pop {r4, r5, pc}
- .align 2, 0
-_08070D1C: .4byte 0xFFFF7FFB
-
- thumb_func_start sub_08070D20
-sub_08070D20: @ 0x08070D20
- push {lr}
- ldr r2, _08070D34 @ =gUnk_0811BA68
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08070D34: .4byte gUnk_0811BA68
-
- thumb_func_start sub_08070D38
-sub_08070D38: @ 0x08070D38
- push {r4, lr}
- adds r2, r0, #0
- ldrb r1, [r2, #0x10]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r2, #0x10]
- ldrb r1, [r2, #0x14]
- movs r0, #0xe
- ands r0, r1
- lsls r0, r0, #2
- movs r1, #0x10
- eors r0, r1
- strb r0, [r2, #0x15]
- movs r4, #0
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r2, #0x24]
- adds r0, r2, #0
- adds r0, #0x42
- strb r4, [r0]
- ldrb r0, [r2, #0xd]
- adds r0, #1
- strb r0, [r2, #0xd]
- ldr r3, _08070D94 @ =gPlayerState
- adds r0, r3, #0
- adds r0, #0x38
- ldrb r0, [r0]
- strb r0, [r2, #0xe]
- movs r0, #1
- strh r0, [r2, #0x12]
- ldr r0, [r3, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08070D98
- movs r0, #0x80
- lsls r0, r0, #0xa
- str r0, [r2, #0x20]
- movs r0, #0x8a
- lsls r0, r0, #1
- strh r0, [r3, #8]
- movs r0, #0x10
- movs r1, #0
- bl sub_08080964
- b _08070DA2
- .align 2, 0
-_08070D94: .4byte gPlayerState
-_08070D98:
- ldr r0, _08070DBC @ =0x00000C18
- strh r0, [r3, #8]
- movs r0, #0xc0
- lsls r0, r0, #9
- str r0, [r2, #0x20]
-_08070DA2:
- ldr r0, _08070DC0 @ =gPlayerState
- movs r1, #0x80
- strb r1, [r0, #2]
- movs r0, #0xa6
- lsls r0, r0, #1
- bl PlaySFX
- bl ResetPlayer
- bl sub_08078F60
- pop {r4, pc}
- .align 2, 0
-_08070DBC: .4byte 0x00000C18
-_08070DC0: .4byte gPlayerState
-
- thumb_func_start sub_08070DC4
-sub_08070DC4: @ 0x08070DC4
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl sub_080085B0
- bl sub_08079E08
- bl sub_0807A1B8
- bl sub_08078EFC
- cmp r0, #0
- bne _08070E76
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _08070E76
- ldr r6, _08070E18 @ =gPlayerState
- strb r0, [r6, #2]
- bl sub_08078EFC
- adds r5, r0, #0
- cmp r5, #0
- bne _08070E76
- bl sub_08079D48
- cmp r0, #0
- bne _08070E10
- adds r0, r6, #0
- adds r0, #0x26
- ldrb r0, [r0]
- cmp r0, #0
- beq _08070E1C
-_08070E10:
- strb r5, [r6, #2]
- bl sub_080791D0
- b _08070E76
- .align 2, 0
-_08070E18: .4byte gPlayerState
-_08070E1C:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0xff
- beq _08070E32
- movs r0, #0x80
- lsls r0, r0, #9
- str r0, [r4, #0x20]
- b _08070E76
-_08070E32:
- ldrb r0, [r4, #0x10]
- movs r1, #0x80
- orrs r0, r1
- strb r0, [r4, #0x10]
- ldrb r0, [r6, #0x14]
- cmp r0, #0
- bne _08070E56
- bl sub_08008B22
- cmp r0, #0
- beq _08070E56
- movs r0, #7
- strb r0, [r6, #0x11]
- bl sub_08079938
- bl sub_080791BC
- b _08070E76
-_08070E56:
- movs r0, #1
- strh r0, [r4, #0x12]
- movs r0, #8
- strb r0, [r4, #0xe]
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- ldr r2, _08070E78 @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08070E76
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r2, #8]
-_08070E76:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_08070E78: .4byte gPlayerState
-
- thumb_func_start sub_08070E7C
-sub_08070E7C: @ 0x08070E7C
- push {lr}
- ldrb r1, [r0, #0xe]
- subs r1, #1
- strb r1, [r0, #0xe]
- lsls r1, r1, #0x18
- lsrs r1, r1, #0x18
- cmp r1, #0
- bne _08070E94
- ldr r0, _08070E98 @ =gPlayerState
- strb r1, [r0, #2]
- bl sub_080791D0
-_08070E94:
- pop {pc}
- .align 2, 0
-_08070E98: .4byte gPlayerState
-
- thumb_func_start sub_08070E9C
-sub_08070E9C: @ 0x08070E9C
- push {r4, lr}
- adds r4, r0, #0
- bl sub_08078EFC
- cmp r0, #0
- beq _08070EAE
- bl sub_08056360
- b _08070ED2
-_08070EAE:
- ldr r1, _08070ED4 @ =gPlayerState
- adds r2, r1, #0
- adds r2, #0x27
- movs r0, #4
- strb r0, [r2]
- adds r1, #0xa8
- movs r0, #0x13
- strb r0, [r1]
- bl sub_0807A1B8
- ldr r1, _08070ED8 @ =gUnk_0811BA74
- ldrb r0, [r4, #0xd]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
-_08070ED2:
- pop {r4, pc}
- .align 2, 0
-_08070ED4: .4byte gPlayerState
-_08070ED8: .4byte gUnk_0811BA74
-
- thumb_func_start sub_08070EDC
-sub_08070EDC: @ 0x08070EDC
- push {lr}
- adds r2, r0, #0
- ldrb r1, [r2, #0x11]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #2
- orrs r0, r1
- strb r0, [r2, #0x11]
- ldr r0, _08070F10 @ =gTextBox
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- beq _08070EFE
- movs r0, #1
- strb r0, [r2, #0xd]
-_08070EFE:
- ldr r2, _08070F14 @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08070F18
- bl sub_08079938
- b _08070F1C
- .align 2, 0
-_08070F10: .4byte gTextBox
-_08070F14: .4byte gPlayerState
-_08070F18:
- ldr r0, _08070F20 @ =0x00000C18
- strh r0, [r2, #8]
-_08070F1C:
- pop {pc}
- .align 2, 0
-_08070F20: .4byte 0x00000C18
-
- thumb_func_start sub_08070F24
-sub_08070F24: @ 0x08070F24
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- ldr r0, _08070F4C @ =gTextBox
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _08070F4A
- ldrb r0, [r4, #0x11]
- lsrs r2, r0, #4
- movs r1, #0x10
- rsbs r1, r1, #0
- ands r1, r0
- orrs r1, r2
- strb r1, [r4, #0x11]
- bl sub_080791D0
-_08070F4A:
- pop {r4, pc}
- .align 2, 0
-_08070F4C: .4byte gTextBox
-
- thumb_func_start sub_08070F50
-sub_08070F50: @ 0x08070F50
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r0, _08070F9C @ =gPlayerState
- adds r0, #0xa8
- movs r1, #0x15
- strb r1, [r0]
- ldrb r1, [r4, #0x10]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r4, #0x10]
- ldr r1, _08070FA0 @ =gUnk_0811BA7C
- ldrb r0, [r4, #0xd]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
- ldr r5, [r4, #0x54]
- cmp r5, #0
- beq _08070F9A
- adds r0, r4, #0
- adds r1, r5, #0
- bl PositionEntityOnTop
- ldrh r0, [r4, #0x12]
- ldrb r1, [r4, #0x1e]
- bl GetSpriteSubEntryOffsetDataPointer
- ldrb r1, [r0]
- adds r2, r5, #0
- adds r2, #0x62
- strb r1, [r2]
- ldrb r1, [r0, #1]
- adds r0, r5, #0
- adds r0, #0x63
- strb r1, [r0]
-_08070F9A:
- pop {r4, r5, pc}
- .align 2, 0
-_08070F9C: .4byte gPlayerState
-_08070FA0: .4byte gUnk_0811BA7C
-
- thumb_func_start sub_08070FA4
-sub_08070FA4: @ 0x08070FA4
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x18]
- movs r0, #0x41
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4, #0x18]
- movs r1, #0
- movs r0, #4
- strb r0, [r4, #0x14]
- ldr r3, _08070FE8 @ =gPlayerState
- ldr r2, [r3, #0x30]
- movs r0, #1
- orrs r2, r0
- str r2, [r3, #0x30]
- strb r1, [r3, #2]
- movs r0, #0x80
- ands r0, r2
- cmp r0, #0
- bne _08071008
- movs r0, #8
- ands r2, r0
- cmp r2, #0
- beq _08070FF0
- adds r0, r3, #0
- adds r0, #0x38
- ldrb r0, [r0]
- bl sub_080542AC
- ldr r1, _08070FEC @ =0x0000045B
- cmp r0, #0
- beq _08071004
- adds r1, #3
- b _08071004
- .align 2, 0
-_08070FE8: .4byte gPlayerState
-_08070FEC: .4byte 0x0000045B
-_08070FF0:
- adds r0, r3, #0
- adds r0, #0x38
- ldrb r0, [r0]
- bl sub_080542AC
- ldr r1, _08071018 @ =0x000001B9
- cmp r0, #0
- beq _08071004
- movs r1, #0xb8
- lsls r1, r1, #2
-_08071004:
- ldr r0, _0807101C @ =gPlayerState
- strh r1, [r0, #8]
-_08071008:
- movs r0, #1
- strb r0, [r4, #0xd]
- bl ResetPlayer
- bl sub_08078F60
- pop {r4, pc}
- .align 2, 0
-_08071018: .4byte 0x000001B9
-_0807101C: .4byte gPlayerState
-
- thumb_func_start sub_08071020
-sub_08071020: @ 0x08071020
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r0, [r0]
- cmp r0, #0
- beq _08071036
- movs r0, #2
- strb r0, [r4, #0xd]
-_08071036:
- pop {r4, pc}
-
- thumb_func_start sub_08071038
-sub_08071038: @ 0x08071038
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- bl sub_08078EFC
- cmp r0, #0
- bne _08071078
- ldr r0, _0807107C @ =gTextBox
- ldrb r0, [r0]
- movs r2, #0x7f
- ands r2, r0
- cmp r2, #0
- bne _08071078
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08071078
- str r2, [r4, #0x54]
- adds r0, r4, #0
- adds r0, #0x42
- strb r2, [r0]
- subs r0, #5
- movs r1, #0xf8
- strb r1, [r0]
- ldr r0, _08071080 @ =gPlayerState
- strb r2, [r0, #2]
- bl sub_080791D0
-_08071078:
- pop {r4, pc}
- .align 2, 0
-_0807107C: .4byte gTextBox
-_08071080: .4byte gPlayerState
-
- thumb_func_start sub_08071084
-sub_08071084: @ 0x08071084
- push {lr}
- ldr r1, _080710A0 @ =gPlayerState
- adds r1, #0xa8
- movs r2, #0xb
- strb r2, [r1]
- ldr r2, _080710A4 @ =gUnk_0811BA88
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_080710A0: .4byte gPlayerState
-_080710A4: .4byte gUnk_0811BA88
-
- thumb_func_start sub_080710A8
-sub_080710A8: @ 0x080710A8
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xd]
- adds r0, #1
- movs r2, #0
- strb r0, [r4, #0xd]
- ldr r1, _080710EC @ =gPlayerState
- ldr r3, [r1, #0x30]
- movs r0, #1
- orrs r3, r0
- ldr r0, _080710F0 @ =0xFFFFF3FF
- ands r3, r0
- str r3, [r1, #0x30]
- strb r2, [r1, #0xc]
- ldrb r2, [r1, #5]
- ldrb r0, [r1, #0x1b]
- orrs r0, r2
- adds r5, r1, #0
- cmp r0, #0
- bne _080710FA
- movs r0, #0x80
- ands r3, r0
- cmp r3, #0
- bne _080710FA
- bl ResetPlayer
- ldr r0, [r5, #0x30]
- movs r1, #8
- ands r0, r1
- cmp r0, #0
- beq _080710F4
- movs r0, #0x84
- lsls r0, r0, #3
- b _080710F8
- .align 2, 0
-_080710EC: .4byte gPlayerState
-_080710F0: .4byte 0xFFFFF3FF
-_080710F4:
- movs r0, #0x81
- lsls r0, r0, #4
-_080710F8:
- strh r0, [r5, #8]
-_080710FA:
- movs r0, #0
- strb r0, [r5, #0x1e]
- ldrb r1, [r4, #0x14]
- movs r0, #0xe
- ands r0, r1
- lsls r0, r0, #2
- strb r0, [r4, #0x15]
- movs r0, #1
- bl sub_08079FC4
- lsls r0, r0, #4
- subs r0, #4
- lsls r0, r0, #0xc
- str r0, [r4, #0x20]
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- bl sub_0807A108
- movs r0, #0x7c
- bl PlaySFX
- movs r0, #0x78
- bl PlaySFX
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_08071130
-sub_08071130: @ 0x08071130
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- bl sub_08078EFC
- cmp r0, #0
- bne _08071206
- ldr r6, _080711B4 @ =gPlayerState
- ldrb r0, [r6, #0x1b]
- cmp r0, #0
- bne _08071158
- adds r0, r5, #0
- bl UpdateAnimationSingleFrame
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _08071206
-_08071158:
- adds r0, r5, #0
- bl sub_0806F69C
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r5, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _08071206
- strb r0, [r6, #2]
- adds r0, r5, #0
- bl sub_0800455E
- ldr r0, [r5, #0x74]
- cmp r0, #0
- beq _0807117E
- bl sub_0800455E
-_0807117E:
- adds r0, r5, #0
- movs r1, #7
- bl sub_08008790
- ldrb r0, [r6, #0x14]
- cmp r0, #0
- bne _08071206
- bl sub_0807A1B8
- bl sub_08078EFC
- adds r4, r0, #0
- cmp r4, #0
- bne _08071206
- bl sub_08079D48
- cmp r0, #0
- beq _080711AC
- adds r0, r6, #0
- adds r0, #0x26
- ldrb r0, [r0]
- cmp r0, #0
- beq _080711B8
-_080711AC:
- strb r4, [r6, #2]
- bl sub_080791D0
- b _08071206
- .align 2, 0
-_080711B4: .4byte gPlayerState
-_080711B8:
- movs r0, #6
- strb r0, [r5, #0xe]
- ldrb r1, [r6, #5]
- ldrb r0, [r6, #0xb]
- orrs r0, r1
- cmp r0, #0
- bne _080711EE
- ldr r1, [r6, #0x30]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080711EE
- movs r0, #8
- ands r1, r0
- cmp r1, #0
- beq _080711E0
- ldr r0, _080711DC @ =0x00000424
- b _080711E4
- .align 2, 0
-_080711DC: .4byte 0x00000424
-_080711E0:
- movs r0, #0x82
- lsls r0, r0, #4
-_080711E4:
- strh r0, [r6, #8]
- adds r1, r5, #0
- adds r1, #0x58
- movs r0, #0xff
- strb r0, [r1]
-_080711EE:
- ldrb r0, [r5, #0xd]
- adds r0, #1
- movs r4, #0
- strb r0, [r5, #0xd]
- bl sub_08078F60
- adds r0, r5, #0
- adds r0, #0x42
- strb r4, [r0]
- movs r0, #0x7d
- bl PlaySFX
-_08071206:
- pop {r4, r5, r6, pc}
-
- thumb_func_start sub_08071208
-sub_08071208: @ 0x08071208
- push {r4, lr}
- adds r4, r0, #0
- ldr r2, _08071244 @ =gPlayerState
- ldrb r1, [r2, #5]
- ldrb r0, [r2, #0xb]
- orrs r0, r1
- cmp r0, #0
- bne _08071228
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08071228
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
-_08071228:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0xff
- bne _08071240
- ldr r1, _08071244 @ =gPlayerState
- movs r0, #0
- strb r0, [r1, #2]
- bl sub_080791D0
-_08071240:
- pop {r4, pc}
- .align 2, 0
-_08071244: .4byte gPlayerState
-
- thumb_func_start sub_08071248
-sub_08071248: @ 0x08071248
- push {lr}
- ldr r3, _08071274 @ =gPlayerState
- adds r2, r3, #0
- adds r2, #0xa8
- movs r1, #0x16
- strb r1, [r2]
- ldr r1, [r3, #0x30]
- movs r2, #4
- orrs r1, r2
- str r1, [r3, #0x30]
- ldrb r2, [r0, #0x10]
- movs r1, #0x7f
- ands r1, r2
- strb r1, [r0, #0x10]
- ldr r2, _08071278 @ =gUnk_0811BA94
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08071274: .4byte gPlayerState
-_08071278: .4byte gUnk_0811BA94
-
- thumb_func_start sub_0807127C
-sub_0807127C: @ 0x0807127C
- push {r4, r5, lr}
- adds r4, r0, #0
- movs r0, #1
- strb r0, [r4, #0xd]
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r1, [r2]
- subs r0, #0x3a
- ands r0, r1
- strb r0, [r2]
- ldr r5, _080712AC @ =gPlayerState
- ldr r1, [r5, #0x30]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _080712B4
- movs r0, #0x3c
- strb r0, [r4, #0xe]
- ldr r0, _080712B0 @ =0x00000C19
- strh r0, [r5, #8]
- movs r0, #0x84
- bl PlaySFX
- b _080712E4
- .align 2, 0
-_080712AC: .4byte gPlayerState
-_080712B0: .4byte 0x00000C19
-_080712B4:
- movs r0, #0x80
- lsls r0, r0, #9
- ands r1, r0
- cmp r1, #0
- bne _080712C4
- adds r0, r4, #0
- bl sub_08004168
-_080712C4:
- adds r0, r4, #0
- movs r1, #0xb
- movs r2, #0
- bl CreateFx
- ldr r0, [r5, #0x30]
- movs r1, #8
- ands r0, r1
- cmp r0, #0
- bne _080712E0
- ldr r0, _080712DC @ =0x0000072C
- b _080712E2
- .align 2, 0
-_080712DC: .4byte 0x0000072C
-_080712E0:
- ldr r0, _080712EC @ =0x0000044C
-_080712E2:
- strh r0, [r5, #8]
-_080712E4:
- bl ResetPlayer
- pop {r4, r5, pc}
- .align 2, 0
-_080712EC: .4byte 0x0000044C
-
- thumb_func_start sub_080712F0
-sub_080712F0: @ 0x080712F0
- push {r4, r5, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- movs r5, #0
- ldr r3, _08071314 @ =gPlayerState
- ldr r0, [r3, #0x30]
- movs r2, #0x80
- ands r0, r2
- cmp r0, #0
- beq _08071318
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0807133E
- b _08071342
- .align 2, 0
-_08071314: .4byte gPlayerState
-_08071318:
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- adds r0, r2, #0
- ands r0, r1
- cmp r0, #0
- beq _0807133E
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- cmp r0, #0xce
- beq _0807133C
- ldr r0, _08071338 @ =0x000002CE
- strh r0, [r3, #8]
- b _0807133E
- .align 2, 0
-_08071338: .4byte 0x000002CE
-_0807133C:
- movs r5, #1
-_0807133E:
- cmp r5, #0
- beq _0807137A
-_08071342:
- adds r1, r4, #0
- adds r1, #0x42
- movs r0, #0
- strb r0, [r1]
- subs r1, #5
- movs r0, #0x20
- strb r0, [r1]
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r1, [r2]
- subs r0, #0x59
- ands r0, r1
- movs r1, #8
- orrs r0, r1
- strb r0, [r2]
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4, #0x18]
- ldr r2, _0807137C @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #5
- rsbs r1, r1, #0
- ands r0, r1
- str r0, [r2, #0x30]
- bl sub_08079458
-_0807137A:
- pop {r4, r5, pc}
- .align 2, 0
-_0807137C: .4byte gPlayerState
-
- thumb_func_start sub_08071380
-sub_08071380: @ 0x08071380
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r5, _080713E8 @ =gPlayerState
- adds r1, r5, #0
- adds r1, #0xa8
- movs r0, #0xe
- strb r0, [r1]
- ldr r1, _080713EC @ =gUnk_0811BA9C
- ldrb r0, [r4, #0xd]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
- ldrb r0, [r4, #0xd]
- cmp r0, #7
- beq _080713FC
- cmp r0, #2
- bls _080713FC
- ldr r0, [r5, #0x30]
- movs r1, #0x20
- ands r0, r1
- cmp r0, #0
- beq _080713FC
- ldr r0, _080713F0 @ =gUnk_03000FF0
- ldrh r1, [r0, #2]
- movs r0, #0x81
- lsls r0, r0, #1
- ands r0, r1
- cmp r0, #0
- beq _080713FC
- bl CheckIsDungeon
- cmp r0, #0
- bne _080713D0
- ldr r0, _080713F4 @ =gArea
- ldrb r0, [r0, #0x17]
- cmp r0, #3
- bne _080713F8
-_080713D0:
- movs r0, #7
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- movs r0, #7
- movs r1, #0x10
- bl DoFade
- movs r0, #0xf8
- bl PlaySFX
- b _080713FC
- .align 2, 0
-_080713E8: .4byte gPlayerState
-_080713EC: .4byte gUnk_0811BA9C
-_080713F0: .4byte gUnk_03000FF0
-_080713F4: .4byte gArea
-_080713F8:
- bl sub_0804ACF8
-_080713FC:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_08071400
-sub_08071400: @ 0x08071400
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x10]
- movs r0, #0x7f
- ands r0, r1
- movs r1, #0
- strb r0, [r4, #0x10]
- adds r0, r4, #0
- adds r0, #0x42
- strb r1, [r0]
- ldr r0, _0807149C @ =gArea
- ldrh r3, [r0, #0x12]
- ldrh r5, [r0, #0x14]
- movs r0, #0x2e
- ldrsh r2, [r4, r0]
- cmp r2, r3
- bne _0807142A
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- cmp r0, r5
- beq _08071444
-_0807142A:
- movs r0, #0x32
- ldrsh r1, [r4, r0]
- adds r0, r2, #0
- adds r2, r3, #0
- adds r3, r5, #0
- bl sub_080045D4
- strb r0, [r4, #0x15]
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- bl sub_08079E08
-_08071444:
- adds r0, r4, #0
- bl sub_08073904
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- ldr r2, _080714A0 @ =gPlayerState
- ldrb r0, [r2, #2]
- cmp r0, #0
- bne _0807147C
- ldr r0, [r2, #0x30]
- movs r1, #0x20
- orrs r0, r1
- str r0, [r2, #0x30]
- movs r0, #1
- strb r0, [r4, #0xd]
- movs r0, #4
- strb r0, [r4, #0x14]
- ldrb r1, [r4, #0x18]
- subs r0, #0x45
- ands r0, r1
- strb r0, [r4, #0x18]
- ldr r0, _0807149C @ =gArea
- ldrb r0, [r0, #0x17]
- cmp r0, #4
- bne _0807147C
- ldr r0, _080714A4 @ =0x0000052C
- strh r0, [r2, #8]
-_0807147C:
- movs r0, #8
- strb r0, [r4, #0xe]
- ldr r0, _0807149C @ =gArea
- ldrb r0, [r0, #0x17]
- cmp r0, #3
- beq _0807149A
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r1, [r2]
- movs r0, #8
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #3
- orrs r0, r1
- strb r0, [r2]
-_0807149A:
- pop {r4, r5, pc}
- .align 2, 0
-_0807149C: .4byte gArea
-_080714A0: .4byte gPlayerState
-_080714A4: .4byte 0x0000052C
-
thumb_func_start sub_080714A8
sub_080714A8: @ 0x080714A8
push {r4, lr}
diff --git a/asm/non_matching/player/sub_08070794.s b/asm/non_matching/player/sub_08070794.s
new file mode 100644
index 00000000..a1555771
--- /dev/null
+++ b/asm/non_matching/player/sub_08070794.s
@@ -0,0 +1,544 @@
+ .syntax unified
+
+ .text
+
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ ldr r6, _080707F0 @ =gPlayerState
+ adds r3, r6, #0
+ adds r3, #0xa8
+ movs r4, #0
+ strb r4, [r3]
+ ldr r1, [r6, #0x30]
+ movs r7, #0x10
+ adds r0, r1, #0
+ ands r0, r7
+ mov ip, r6
+ cmp r0, #0
+ beq _08070818
+ adds r2, r5, #0
+ adds r2, #0x29
+ ldrb r1, [r2]
+ movs r0, #0x39
+ rsbs r0, r0, #0
+ ands r0, r1
+ strb r0, [r2]
+ adds r0, r5, #0
+ adds r0, #0x42
+ strb r4, [r0]
+ movs r0, #0xa0
+ lsls r0, r0, #1
+ strh r0, [r5, #0x24]
+ movs r0, #0x80
+ strb r0, [r6, #6]
+ strb r7, [r3]
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ adds r0, #0x5c
+ adds r1, r5, #0
+ adds r1, #0x58
+ ldrb r1, [r1]
+ cmp r0, r1
+ bne _080707F8
+ ldrh r0, [r5, #0x12]
+ cmp r0, #2
+ bne _080707F8
+ ldr r0, _080707F4 @ =gPlayerEntity
+ bl UpdateAnimationSingleFrame
+ b _08070800
+ .align 2, 0
+_080707F0: .4byte gPlayerState
+_080707F4: .4byte gPlayerEntity
+_080707F8:
+ movs r0, #0x97
+ lsls r0, r0, #2
+ mov r1, ip
+ strh r0, [r1, #8]
+_08070800:
+ ldr r0, _08070814 @ =gPlayerEntity
+ bl sub_0806F948
+ bl ResetPlayer
+ adds r0, r5, #0
+ bl sub_08077698
+ b _08070BE4
+ .align 2, 0
+_08070814: .4byte gPlayerEntity
+_08070818:
+ movs r0, #0x80
+ lsls r0, r0, #5
+ ands r0, r1
+ cmp r0, #0
+ beq _08070842
+ adds r1, r5, #0
+ adds r1, #0x40
+ movs r0, #0x1e
+ strb r0, [r1]
+ movs r0, #0xc
+ strb r0, [r3]
+ movs r1, #0
+ movs r2, #0x24
+ ldrsh r0, [r5, r2]
+ cmp r0, #0
+ bne _0807083A
+ movs r1, #1
+_0807083A:
+ adds r0, r5, #0
+ bl sub_08070BEC
+ b _08070BE4
+_08070842:
+ movs r4, #0x80
+ lsls r4, r4, #0xc
+ ands r4, r1
+ cmp r4, #0
+ beq _08070852
+ bl sub_08079938
+ b _08070BE4
+_08070852:
+ adds r0, r5, #0
+ bl sub_080085B0
+ adds r0, r5, #0
+ adds r0, #0x40
+ strb r4, [r0]
+ bl sub_08078EFC
+ cmp r0, #0
+ beq _08070868
+ b _08070BE4
+_08070868:
+ adds r0, r6, #0
+ adds r0, #0x26
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _080708AC
+ ldrb r1, [r6, #2]
+ movs r2, #0xc0
+ adds r0, r2, #0
+ ands r0, r1
+ cmp r0, #0
+ bne _080708AC
+ ldrb r0, [r6, #3]
+ cmp r0, #0
+ bne _0807088E
+ adds r0, r6, #0
+ adds r0, #0x21
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _08070892
+_0807088E:
+ strh r2, [r5, #0x24]
+ b _080708AC
+_08070892:
+ ldrb r0, [r6, #0x1b]
+ cmp r0, #0
+ beq _0807089C
+ movs r0, #0xe0
+ b _080708AA
+_0807089C:
+ ldrb r0, [r6, #0x1c]
+ cmp r0, #0
+ beq _080708A6
+ movs r0, #0x80
+ b _080708AA
+_080708A6:
+ movs r0, #0xa0
+ lsls r0, r0, #1
+_080708AA:
+ strh r0, [r5, #0x24]
+_080708AC:
+ ldr r4, _08070918 @ =gPlayerState
+ ldrb r0, [r4, #6]
+ movs r1, #0x80
+ orrs r1, r0
+ strb r1, [r4, #6]
+ ldr r0, [r4, #0x30]
+ ldr r6, _0807091C @ =0x10000002
+ ands r0, r6
+ cmp r0, #0
+ bne _080708C4
+ bl sub_0807A1B8
+_080708C4:
+ bl sub_08078EFC
+ cmp r0, #0
+ beq _080708CE
+ b _08070BE4
+_080708CE:
+ ldrb r0, [r4, #2]
+ cmp r0, #0
+ beq _080708D6
+ b _080709D8
+_080708D6:
+ ldr r0, [r4, #0x30]
+ movs r1, #0x80
+ lsls r1, r1, #3
+ ands r0, r1
+ cmp r0, #0
+ beq _080708E4
+ b _080709D8
+_080708E4:
+ adds r0, r5, #0
+ adds r0, #0x42
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _08070924
+ bl sub_080782C0
+ cmp r0, #0
+ beq _08070924
+ ldr r0, _08070920 @ =gRoomVars
+ ldrb r0, [r0, #6]
+ cmp r0, #0
+ bne _08070902
+ bl ResetPlayer
+_08070902:
+ ldr r0, [r4, #0x30]
+ ands r0, r6
+ cmp r0, #0
+ beq _0807090C
+ b _08070BE4
+_0807090C:
+ bl sub_0807A1B8
+ bl sub_08078EFC
+ b _08070BE4
+ .align 2, 0
+_08070918: .4byte gPlayerState
+_0807091C: .4byte 0x10000002
+_08070920: .4byte gRoomVars
+_08070924:
+ ldr r0, _0807094C @ =gPlayerState
+ ldr r1, [r0, #0x30]
+ ldr r2, _08070950 @ =0x00041635
+ ands r1, r2
+ adds r0, #0xaa
+ ldrb r0, [r0]
+ orrs r1, r0
+ cmp r1, #0
+ bne _080709D8
+ bl sub_08019840
+ cmp r0, #0xf
+ bls _08070940
+ b _08070BE4
+_08070940:
+ lsls r0, r0, #2
+ ldr r1, _08070954 @ =_08070958
+ adds r0, r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0807094C: .4byte gPlayerState
+_08070950: .4byte 0x00041635
+_08070954: .4byte _08070958
+_08070958: @ jump table
+ .4byte _08070998 @ case 0
+ .4byte _08070BE4 @ case 1
+ .4byte _08070BE4 @ case 2
+ .4byte _080709A8 @ case 3
+ .4byte _080709C2 @ case 4
+ .4byte _08070BE4 @ case 5
+ .4byte _08070BE4 @ case 6
+ .4byte _08070BE4 @ case 7
+ .4byte _08070BE4 @ case 8
+ .4byte _08070BE4 @ case 9
+ .4byte _08070BE4 @ case 10
+ .4byte _08070BE4 @ case 11
+ .4byte _08070BE4 @ case 12
+ .4byte _08070BE4 @ case 13
+ .4byte _08070BE4 @ case 14
+ .4byte _080709B4 @ case 15
+_08070998:
+ ldr r0, _080709A4 @ =gPlayerState
+ ldrb r1, [r0, #6]
+ movs r2, #0x80
+ eors r1, r2
+ strb r1, [r0, #6]
+ b _080709D8
+ .align 2, 0
+_080709A4: .4byte gPlayerState
+_080709A8:
+ ldr r1, _080709B0 @ =gPlayerState
+ movs r0, #0x80
+ strb r0, [r1, #6]
+ b _080709D8
+ .align 2, 0
+_080709B0: .4byte gPlayerState
+_080709B4:
+ ldrb r1, [r5, #0x10]
+ movs r0, #0x7f
+ ands r0, r1
+ strb r0, [r5, #0x10]
+ bl sub_080797EC
+ b _08070BE4
+_080709C2:
+ ldr r0, _080709D4 @ =gPlayerState
+ ldrb r1, [r0, #6]
+ movs r2, #0x80
+ eors r1, r2
+ strb r1, [r0, #6]
+ bl sub_080797EC
+ b _08070BE4
+ .align 2, 0
+_080709D4: .4byte gPlayerState
+_080709D8:
+ adds r1, r5, #0
+ adds r1, #0x3c
+ movs r0, #0
+ strb r0, [r1]
+ adds r6, r5, #0
+ adds r6, #0x29
+ ldrb r1, [r6]
+ subs r0, #8
+ ands r0, r1
+ movs r1, #4
+ orrs r0, r1
+ strb r0, [r6]
+ adds r0, r5, #0
+ bl sub_0807AC54
+ cmp r0, #0
+ beq _080709FC
+ b _08070BE4
+_080709FC:
+ adds r0, r5, #0
+ bl sub_08077698
+ bl sub_08078EFC
+ cmp r0, #0
+ beq _08070A0C
+ b _08070BE4
+_08070A0C:
+ bl sub_080792D8
+ ldr r4, _08070A78 @ =gPlayerState
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4, #0xa]
+ orrs r0, r1
+ cmp r0, #0
+ bne _08070A32
+ bl sub_08079550
+ cmp r0, #0
+ beq _08070A26
+ b _08070BE4
+_08070A26:
+ adds r0, r5, #0
+ bl sub_08078F74
+ cmp r0, #0
+ beq _08070A32
+ b _08070BE4
+_08070A32:
+ adds r0, r5, #0
+ bl sub_08073904
+ bl sub_08078EFC
+ cmp r0, #0
+ beq _08070A42
+ b _08070BE4
+_08070A42:
+ ldrb r2, [r4, #2]
+ cmp r2, #0
+ beq _08070AAC
+ adds r1, r4, #0
+ adds r1, #0xa8
+ movs r0, #0x14
+ strb r0, [r1]
+ movs r0, #0xc0
+ ands r0, r2
+ cmp r0, #0
+ bne _08070A80
+ movs r0, #7
+ ands r0, r2
+ cmp r0, #3
+ beq _08070A7C
+ movs r0, #0x20
+ ands r0, r2
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #0
+ bne _08070A7C
+ strh r0, [r5, #0x24]
+ adds r0, r5, #0
+ bl sub_08008926
+ b _08070A80
+ .align 2, 0
+_08070A78: .4byte gPlayerState
+_08070A7C:
+ movs r0, #0xff
+ strb r0, [r5, #0x15]
+_08070A80:
+ bl sub_08079E08
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #2
+ ands r0, r1
+ cmp r0, #0
+ beq _08070A94
+ b _08070BE4
+_08070A94:
+ ldr r0, _08070AA8 @ =gPlayerState
+ ldrb r0, [r0, #4]
+ cmp r0, #0
+ beq _08070A9E
+ b _08070BE4
+_08070A9E:
+ adds r0, r5, #0
+ bl UpdateAnimationSingleFrame
+ b _08070BE4
+ .align 2, 0
+_08070AA8: .4byte gPlayerState
+_08070AAC:
+ adds r0, r5, #0
+ adds r0, #0x42
+ ldrb r1, [r0]
+ adds r7, r0, #0
+ cmp r1, #0
+ beq _08070ABA
+ b _08070BBC
+_08070ABA:
+ adds r0, r4, #0
+ adds r0, #0x26
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _08070AD4
+ adds r1, r4, #0
+ adds r1, #0xa8
+ movs r0, #7
+ strb r0, [r1]
+ adds r0, r5, #0
+ bl sub_0807ACCC
+ b _08070B56
+_08070AD4:
+ ldr r0, [r4, #0x30]
+ movs r1, #0x80
+ lsls r1, r1, #0x12
+ ands r0, r1
+ cmp r0, #0
+ bne _08070AEE
+ ldrb r0, [r6]
+ movs r1, #0x39
+ rsbs r1, r1, #0
+ ands r1, r0
+ movs r0, #8
+ orrs r1, r0
+ strb r1, [r6]
+_08070AEE:
+ ldrb r1, [r4, #0x1e]
+ movs r0, #0x40
+ ands r0, r1
+ cmp r0, #0
+ beq _08070B00
+ adds r0, r5, #0
+ bl sub_08008AA0
+ b _08070B1E
+_08070B00:
+ ldrb r0, [r4, #0x12]
+ cmp r0, #0x17
+ bne _08070B0E
+ adds r0, r5, #0
+ bl sub_08008926
+ b _08070B1E
+_08070B0E:
+ cmp r0, #1
+ bne _08070B18
+ bl sub_08078F60
+ b _08070B1E
+_08070B18:
+ adds r0, r5, #0
+ bl sub_08008AA0
+_08070B1E:
+ ldr r2, _08070BB8 @ =gPlayerState
+ ldrb r1, [r2, #0x1b]
+ movs r0, #0x10
+ ands r0, r1
+ cmp r0, #0
+ bne _08070B56
+ ldrb r3, [r2, #0xd]
+ strb r3, [r5, #0x15]
+ ldr r0, [r2, #0x30]
+ movs r1, #0x80
+ lsls r1, r1, #3
+ ands r0, r1
+ cmp r0, #0
+ beq _08070B56
+ movs r0, #0xc0
+ lsls r0, r0, #2
+ strh r0, [r5, #0x24]
+ movs r0, #0x80
+ ands r0, r3
+ cmp r0, #0
+ beq _08070B52
+ ldrb r1, [r5, #0x14]
+ movs r0, #0xe
+ ands r0, r1
+ lsls r0, r0, #2
+ strb r0, [r5, #0x15]
+_08070B52:
+ bl sub_0807A108
+_08070B56:
+ movs r4, #0
+ ldr r3, _08070BB8 @ =gPlayerState
+ ldrb r2, [r3, #7]
+ ldrb r0, [r5, #0x15]
+ orrs r0, r2
+ movs r1, #0x80
+ ands r0, r1
+ ldrb r1, [r3, #0xa]
+ orrs r0, r1
+ cmp r0, #0
+ bne _08070B8E
+ movs r0, #0x10
+ ands r0, r2
+ cmp r0, #0
+ bne _08070B8E
+ movs r4, #1
+ ldrb r0, [r7]
+ cmp r0, #0
+ bne _08070B8E
+ ldrb r1, [r3, #0x1e]
+ movs r0, #0x40
+ ands r0, r1
+ cmp r0, #0
+ bne _08070B8C
+ ldrb r0, [r3, #0x12]
+ cmp r0, #0x17
+ beq _08070B8E
+_08070B8C:
+ movs r4, #3
+_08070B8E:
+ adds r0, r5, #0
+ adds r1, r4, #0
+ bl sub_08070BEC
+ adds r0, r5, #0
+ bl sub_08008AC6
+ ldrb r0, [r7]
+ cmp r0, #0
+ bne _08070BE4
+ ldr r1, _08070BB8 @ =gPlayerState
+ ldrb r0, [r1, #0xb]
+ cmp r0, #0
+ bne _08070BE4
+ ldrb r0, [r1, #0x12]
+ cmp r0, #0x1e
+ beq _08070BE4
+ adds r0, r5, #0
+ bl sub_0806F948
+ b _08070BE4
+ .align 2, 0
+_08070BB8: .4byte gPlayerState
+_08070BBC:
+ ldr r0, [r4, #0x2c]
+ cmp r0, #0
+ bne _08070BC8
+ adds r0, r5, #0
+ bl UpdateAnimationSingleFrame
+_08070BC8:
+ adds r0, r4, #0
+ adds r0, #0x26
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _08070BE4
+ ldr r0, _08070BE8 @ =gScreenTransition
+ ldr r0, [r0]
+ movs r1, #7
+ ands r0, r1
+ cmp r0, #0
+ bne _08070BE4
+ adds r0, r5, #0
+ bl CreateWaterTrace
+_08070BE4:
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_08070BE8: .4byte gScreenTransition
+ .syntax divided
diff --git a/asm/non_matching/player/sub_08070DC4.s b/asm/non_matching/player/sub_08070DC4.s
new file mode 100644
index 00000000..0b73a553
--- /dev/null
+++ b/asm/non_matching/player/sub_08070DC4.s
@@ -0,0 +1,87 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r4, r0, #0
+ bl UpdateAnimationSingleFrame
+ adds r0, r4, #0
+ bl sub_080085B0
+ bl sub_08079E08
+ bl sub_0807A1B8
+ bl sub_08078EFC
+ cmp r0, #0
+ bne _08070E76
+ movs r1, #0x80
+ lsls r1, r1, #6
+ adds r0, r4, #0
+ bl sub_08003FC4
+ cmp r0, #0
+ bne _08070E76
+ ldr r6, _08070E18 @ =gPlayerState
+ strb r0, [r6, #2]
+ bl sub_08078EFC
+ adds r5, r0, #0
+ cmp r5, #0
+ bne _08070E76
+ bl sub_08079D48
+ cmp r0, #0
+ bne _08070E10
+ adds r0, r6, #0
+ adds r0, #0x26
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _08070E1C
+_08070E10:
+ strb r5, [r6, #2]
+ bl sub_080791D0
+ b _08070E76
+ .align 2, 0
+_08070E18: .4byte gPlayerState
+_08070E1C:
+ ldrb r0, [r4, #0xe]
+ subs r0, #1
+ strb r0, [r4, #0xe]
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #0xff
+ beq _08070E32
+ movs r0, #0x80
+ lsls r0, r0, #9
+ str r0, [r4, #0x20]
+ b _08070E76
+_08070E32:
+ ldrb r0, [r4, #0x10]
+ movs r1, #0x80
+ orrs r0, r1
+ strb r0, [r4, #0x10]
+ ldrb r0, [r6, #0x14]
+ cmp r0, #0
+ bne _08070E56
+ bl sub_08008B22
+ cmp r0, #0
+ beq _08070E56
+ movs r0, #7
+ strb r0, [r6, #0x11]
+ bl sub_08079938
+ bl sub_080791BC
+ b _08070E76
+_08070E56:
+ movs r0, #1
+ strh r0, [r4, #0x12]
+ movs r0, #8
+ strb r0, [r4, #0xe]
+ ldrb r0, [r4, #0xd]
+ adds r0, #1
+ strb r0, [r4, #0xd]
+ ldr r2, _08070E78 @ =gPlayerState
+ ldr r0, [r2, #0x30]
+ movs r1, #0x80
+ ands r0, r1
+ cmp r0, #0
+ bne _08070E76
+ movs r0, #0x80
+ lsls r0, r0, #1
+ strh r0, [r2, #8]
+_08070E76:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_08070E78: .4byte gPlayerState
+ .syntax divided
diff --git a/include/functions.h b/include/functions.h
index abb22ffb..b2f73c87 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -307,5 +307,18 @@ extern void sub_08078AA8(u32, u32);
extern void sub_08078B48(void);
extern void sub_0807919C();
extern void sub_0807CAA0(u32, u32);
-extern void sub_08080964(u16, u32);
+extern void sub_080085B0(Entity*);
+extern u32 sub_08079D48();
+extern u32 sub_08008B22();
+extern void sub_080791BC9();
+extern void sub_080791BC();
+extern void sub_08056360();
+extern u32 sub_080542AC(u32);
+extern void sub_0807A108();
+extern u32 sub_08079FC4(u32);
+extern void sub_0800455E(Entity*);
+extern void sub_08008790(Entity*, u32);
+extern u32 CheckIsDungeon();
+extern void sub_0804ACF8();
+extern void sub_08073904(Entity*);
#endif
diff --git a/include/global.h b/include/global.h
index 3b2e0446..146dfc14 100644
--- a/include/global.h
+++ b/include/global.h
@@ -49,6 +49,26 @@
#define static_assert(cond) extern char assertion[(cond) ? 1 : -1]
+#if NON_MATCHING
+#define asmfunc(prologue, path)
+#else
+#define asmfunc(prologue, path) \
+ NAKED prologue { \
+ asm(".include " #path); \
+ }
+#endif
+
+#if NON_MATCHING
+#define NONMATCH(prologue, path) prologue
+#define END_NONMATCH
+#else
+#define NONMATCH(path, prologue) \
+ NAKED prologue { \
+ asm(".include " #path); \
+ if (0)
+#define END_NONMATCH }
+#endif
+
typedef union {
s32 WORD;
struct {
@@ -76,6 +96,4 @@ union SplitHWord {
} PACKED HALF;
} PACKED;
-
-
#endif // GUARD_GLOBAL_H
diff --git a/include/room.h b/include/room.h
index f0cbd8db..8b869d69 100644
--- a/include/room.h
+++ b/include/room.h
@@ -79,5 +79,6 @@ extern RoomControls gRoomControls;
extern RoomVars gRoomVars;
extern void SetTileType(u32, u32, u32);
+extern void sub_08080964(u32 time, u32 magnitude); // shake screen
#endif
diff --git a/linker.ld b/linker.ld
index c785e9bc..2c9e5126 100644
--- a/linker.ld
+++ b/linker.ld
@@ -648,7 +648,7 @@ SECTIONS {
src/sub_0806FA04.o(.text);
src/position.o(.text);
asm/code_0806FA6C.o(.text);
- src/sub_08070680.o(.text);
+ src/player.o(.text);
asm/code_08070698.o(.text);
asm/stairsInteract.o(.text);
asm/code_080732D0.o(.text);
diff --git a/src/code_0808091C.c b/src/code_0808091C.c
index cdd7504a..74caf177 100644
--- a/src/code_0808091C.c
+++ b/src/code_0808091C.c
@@ -62,7 +62,7 @@ u32* GetLayerByIndex(u32 param_1) {
}
}
-void sub_08080964(u16 time, u32 magnitude) {
+void sub_08080964(u32 time, u32 magnitude) {
gRoomControls.screenShakeTime = time;
gRoomControls.screenShakeMagnitude = magnitude & 7;
return;
diff --git a/src/npc/carlov.c b/src/npc/carlov.c
index 1d17ee4c..d3824e78 100644
--- a/src/npc/carlov.c
+++ b/src/npc/carlov.c
@@ -11,7 +11,6 @@
extern void sub_0807DD50(Entity*);
extern void sub_0807DD94(Entity*, u32);
extern void EnqueueSFX(u32);
-extern void sub_08080964(u32, u32);
void Carlov(Entity* this) {
if (this->action == 0) {
diff --git a/src/player.c b/src/player.c
new file mode 100644
index 00000000..1192f6be
--- /dev/null
+++ b/src/player.c
@@ -0,0 +1,546 @@
+#include "global.h"
+#include "entity.h"
+#include "player.h"
+#include "textbox.h"
+#include "functions.h"
+#include "readKeyInput.h"
+#include "area.h"
+
+extern const void (*const gUnk_0811B9E0[])(Entity*);
+extern const void (*const gUnk_0811BA60[])(Entity*);
+extern const void (*const gUnk_0811BA68[])(Entity*);
+extern const void (*const gUnk_0811BA74[])(Entity*);
+extern const void (*const gUnk_0811BA7C[])(Entity*);
+extern const void (*const gUnk_0811BA88[])(Entity*);
+extern const void (*const gUnk_0811BA94[])(Entity*);
+extern const void (*const gUnk_0811BA9C[])(Entity*);
+
+extern void sub_08079458();
+extern void sub_080797EC();
+extern void sub_08079E08();
+extern void sub_08078F60();
+
+extern BoundingBox gUnk_08114F88;
+
+// inject
+void sub_08070680(Entity* this) {
+ gUnk_0811B9E0[this->action](this);
+}
+
+void sub_08070698(Entity* this) {
+ Entity* ent;
+
+ gPlayerState.field_0x0[0] = 0xff;
+ gPlayerState.field_0x16[0] = gPlayerEntity.x.HALF.HI;
+ gPlayerState.field_0x16[1] = gPlayerEntity.y.HALF.HI;
+ this->flags = this->flags | 0x80;
+ this->spritePriority.b0 = 0xc;
+ this->spritePriority.b1 = 1;
+ this->spriteSettings.b.shadow = 1;
+ this->field_0x16 = 0x20;
+ this->flags2 = 8;
+ this->damageType = 0x79;
+ this->boundingBox = &gUnk_08114F88;
+ this->spriteIndex = 1;
+ gPlayerState.field_0x8 = 0x100;
+ sub_0806FDA0(this);
+ sub_080AE008(this, 1, 2);
+ InitAnimationForceUpdate(this, 2);
+ if (this->collisionLayer == 0) {
+ sub_08016A30(this);
+ }
+
+ if (IsItemEquipped(0x10) != 2) {
+ sub_08077728();
+ }
+ sub_0807A108();
+ sub_0807AEE4();
+
+ if (sub_08078EFC() == 0) {
+ sub_0807921C();
+ sub_0807A1B8();
+ if (gPlayerState.swimState != 0) {
+ gPlayerState.swimState = 1;
+ sub_08079938();
+ gPlayerState.field_0xa8 = 7;
+ sub_0807ACCC(this);
+ ent = FindEntityInListByForm(0x6, 0xf, 0x6, 0xb, 0x0);
+ if (ent != NULL) {
+ DeleteEntity(ent);
+ }
+ }
+ }
+}
+
+// PlayerState.flags need to be 100% before this one can reasonably be done
+NONMATCH("asm/non_matching/player/sub_08070794.s", void sub_08070794(Entity* this)) {
+}
+END_NONMATCH
+
+void sub_08070BEC(Entity* this, u32 r0) {
+ if (r0 & 1)
+ sub_080797EC();
+ else
+ sub_08079938();
+
+ if (r0 & 2)
+ sub_08079E08();
+}
+
+void sub_08070C10(Entity* this) {
+ gPlayerState.field_0xd[0] = 0xFF;
+ gPlayerState.pushedObject = 0x80;
+ gPlayerState.field_0xa8 = 10;
+
+ gUnk_0811BA60[this->previousActionFlag](this);
+}
+
+void sub_08070C3C(Entity* this) {
+ sub_08004168(this);
+
+ gPlayerState.flags.all |= 0x1 | 0x4;
+ gPlayerState.flags.all &= ~0x400;
+
+ gPlayerState.jumpStatus = 0;
+
+ if ((gPlayerState.flags.all & 0x80) != 0)
+ gPlayerState.field_0x8 = 0x1ba;
+ else if ((gPlayerState.flags.all & 8) != 0)
+ gPlayerState.field_0x8 = 0x458;
+ else
+ gPlayerState.field_0x8 = 0x1b8;
+
+ this->previousActionFlag++;
+ this->flags &= ~0x80;
+ this->spritePriority.b1 = 0;
+ ResetPlayer();
+ sub_0807A108();
+ PlaySFX(0x7b);
+ PlaySFX(0x85);
+}
+
+void sub_08070CB4(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.all & 0x80) != 0) {
+ if ((gUnk_02002A40.stats.health != 0) && ((gPlayerState.flags.all & 0x8000) != 0)) {
+ gPlayerState.flags.all &= ~(0x1 | 0x4);
+ this->spriteSettings.b.draw = 0;
+ } else {
+ gPlayerState.flags.all &= ~(0x4 | 0x8000);
+ sub_08079458();
+ gPlayerState.field_0xa = 0;
+ this->hurtBlinkTime = 0x20;
+ ModHealth(-2);
+ }
+ }
+}
+
+void sub_08070D20(Entity* this) {
+ gUnk_0811BA68[this->previousActionFlag](this);
+}
+
+void sub_08070D38(Entity* this) {
+ this->flags &= ~0x80;
+ this->direction = ((this->animationState & 0xe) << 2) ^ 0x10;
+ this->nonPlanarMovement = 0x100;
+ this->field_0x42 = 0;
+ this->previousActionFlag++;
+ this->actionDelay = gPlayerState.field_0x38;
+ this->spriteIndex = 1;
+
+ if ((gPlayerState.flags.all & 0x80) == 0) {
+ this->field_0x20 = 0x20000;
+ gPlayerState.field_0x8 = 0x114;
+ sub_08080964(16, 0);
+ } else {
+ gPlayerState.field_0x8 = 0xc18;
+ this->field_0x20 = 0x18000;
+ }
+
+ gPlayerState.jumpStatus = 0x80;
+ PlaySFX(0x14c);
+ ResetPlayer();
+ sub_08078F60();
+}
+
+// minor regalloc
+NONMATCH("asm/non_matching/player/sub_08070DC4.s", void sub_08070DC4(Entity* this)) {
+ UpdateAnimationSingleFrame(this);
+ sub_080085B0(this);
+ sub_08079E08();
+ sub_0807A1B8();
+
+ if (sub_08078EFC() || sub_08003FC4(this, 0x2000))
+ return;
+
+ gPlayerState.jumpStatus = 0;
+
+ if (sub_08078EFC() || sub_08079D48())
+ return;
+
+ if (gPlayerState.swimState != 0) {
+ gPlayerState.jumpStatus = 0;
+ sub_080791D0();
+ return;
+ }
+
+ if (--this->actionDelay != 0xFF) {
+ this->field_0x20 = 0x10000;
+ return;
+ }
+
+ this->flags |= 0x80;
+
+ if ((gPlayerState.field_0x14 == 0) && sub_08008B22()) {
+ gPlayerState.field_0x10[1] = 7;
+ sub_08079938();
+ sub_080791BC();
+ return;
+ }
+
+ this->spriteIndex = 1;
+ this->actionDelay = 8;
+ this->previousActionFlag++;
+
+ if ((gPlayerState.flags.all & 0x80) == 0)
+ gPlayerState.field_0x8 = 0x100;
+}
+END_NONMATCH
+
+void sub_08070E7C(Entity* this) {
+ u8 timer = --this->actionDelay;
+
+ if (timer == 0) {
+ gPlayerState.jumpStatus = timer;
+ sub_080791D0();
+ }
+}
+
+void sub_08070E9C(Entity* this) {
+ if (sub_08078EFC() != 0) {
+ sub_08056360();
+ } else {
+ gPlayerState.field_0x27[0] = 4;
+ gPlayerState.field_0xa8 = 0x13;
+ sub_0807A1B8();
+ gUnk_0811BA74[this->previousActionFlag](this);
+ }
+}
+
+void sub_08070EDC(Entity* this) {
+ this->scriptedScene = 2;
+
+ if ((gTextBox.doTextBox & 0x7f) != 0)
+ this->previousActionFlag = 1;
+
+ if ((gPlayerState.flags.all & 0x80) == 0)
+ sub_08079938();
+ else
+ gPlayerState.field_0x8 = 0xc18;
+}
+
+void sub_08070f24(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if ((gTextBox.doTextBox & 0x7f) == 0) {
+ this->scriptedScene = this->scriptedScene2;
+ sub_080791D0();
+ }
+}
+
+void sub_08070F50(Entity* this) {
+ Entity* child;
+ u8* temp; // todo: retype
+
+ gPlayerState.field_0xa8 = 0x15;
+ this->flags &= ~(0x80);
+ gUnk_0811BA7C[this->previousActionFlag](this);
+
+ child = this->attachedEntity;
+ if (child != NULL) {
+ PositionEntityOnTop(this, child);
+ temp = GetSpriteSubEntryOffsetDataPointer((u16)this->spriteIndex, this->frameIndex);
+ child->spriteOffsetX = *temp;
+ child->spriteOffsetY = temp[1];
+ }
+}
+
+void sub_08070FA4(Entity* this) {
+ u16 temp;
+
+ this->spriteSettings.b.flipX = FALSE;
+ this->animationState = 4;
+
+ gPlayerState.flags.all |= 1;
+ gPlayerState.jumpStatus = 0;
+
+ if ((gPlayerState.flags.all & 0x80) == 0) {
+ if ((gPlayerState.flags.all & 0x8) != 0) {
+ if (sub_080542AC(gPlayerState.field_0x38)) {
+ temp = 0x45e;
+ } else {
+ temp = 0x45b;
+ }
+ } else {
+ if (sub_080542AC(gPlayerState.field_0x38)) {
+ temp = 0x2e0;
+ } else {
+ temp = 0x1b9;
+ }
+ }
+ gPlayerState.field_0x8 = temp;
+ }
+
+ this->previousActionFlag = 1;
+ ResetPlayer();
+ sub_08078F60();
+}
+
+void sub_08071020(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if (this->frames.all != 0) {
+ this->previousActionFlag = 2;
+ }
+}
+
+void sub_08071038(Entity* this) {
+
+ UpdateAnimationSingleFrame(this);
+
+ if (sub_08078EFC() || (gTextBox.doTextBox & 0x7f))
+ return;
+
+ if ((this->frames.all & 0x80) != 0) {
+ this->attachedEntity = 0;
+ this->field_0x42 = 0;
+ this->hurtBlinkTime = 0xf8;
+ gPlayerState.jumpStatus = 0;
+ sub_080791D0();
+ }
+}
+
+void sub_08071084(Entity* this) {
+ gPlayerState.field_0xa8 = 0xb;
+ gUnk_0811BA88[this->previousActionFlag](this);
+}
+
+void sub_080710A8(Entity* this) {
+ u32 temp;
+
+ this->previousActionFlag++;
+
+ gPlayerState.flags.all |= 1;
+ gPlayerState.flags.all &= ~(0x400 | 0x800);
+
+ gPlayerState.playerAction = 0;
+
+ if ((gPlayerState.heldObject | gPlayerState.field_0x1a[1]) == 0) {
+ if ((gPlayerState.flags.all & 0x80) == 0) {
+ ResetPlayer();
+
+ if ((gPlayerState.flags.all & 0x8) != 0) {
+ gPlayerState.field_0x8 = 0x420;
+ } else {
+ gPlayerState.field_0x8 = 0x810;
+ }
+ }
+ }
+
+ gPlayerState.field_0x1d[1] = 0;
+ this->direction = ((this->animationState & 0xe) << 2);
+
+ temp = sub_08079FC4(1);
+ asm("lsl r0, r0, #0x4");
+ this->field_0x20 = (temp - 4) * 64 * 64;
+
+ this->nonPlanarMovement = 0x100;
+ sub_0807A108();
+ PlaySFX(0x7c);
+ PlaySFX(0x78);
+}
+
+void sub_08071130(Entity* this) {
+
+ if (sub_08078EFC(this))
+ return;
+
+ if (gPlayerState.field_0x1a[1] == 0) {
+ UpdateAnimationSingleFrame(this);
+
+ if ((this->frames.all & 1))
+ return;
+ }
+
+ sub_0806F69C(this);
+
+ if (sub_08003FC4(this, 0x2000))
+ return;
+
+ gPlayerState.jumpStatus = 0;
+ sub_0800455E(this);
+
+ if (*(Entity**)&this->field_0x74 != NULL)
+ sub_0800455E(*(Entity**)&this->field_0x74);
+
+ sub_08008790(this, 7);
+
+ if (gPlayerState.field_0x14)
+ return;
+
+ sub_0807A1B8();
+
+ if (sub_08078EFC())
+ return;
+
+ if ((sub_08079D48() == 0) || (gPlayerState.swimState != 0)) {
+ gPlayerState.jumpStatus = 0;
+ sub_080791D0();
+ return;
+ }
+
+ this->actionDelay = 6;
+
+ if (((gPlayerState.heldObject | gPlayerState.keepFacing) == 0) && ((gPlayerState.flags.all & 0x80) == 0)) {
+ if ((gPlayerState.flags.all & 0x8) != 0) {
+ gPlayerState.field_0x8 = 0x424;
+ } else {
+ gPlayerState.field_0x8 = 0x820;
+ }
+ this->animIndex = 0xff;
+ }
+
+ this->previousActionFlag++;
+ sub_08078F60();
+ this->field_0x42 = 0;
+ PlaySFX(0x7d);
+}
+
+void sub_08071208(Entity* this) {
+ if ((gPlayerState.heldObject | gPlayerState.keepFacing) == 0) {
+ if ((gPlayerState.flags.all & 0x80) == 0) {
+ UpdateAnimationSingleFrame(this);
+ }
+ }
+
+ if (--this->actionDelay == 0xff) {
+ gPlayerState.jumpStatus = 0;
+ sub_080791D0();
+ }
+}
+
+void sub_08071248(Entity* this) {
+ gPlayerState.field_0xa8 = 0x16;
+ gPlayerState.flags.all |= 4;
+ this->flags &= ~0x80;
+ gUnk_0811BA94[this->previousActionFlag](this);
+}
+
+void sub_0807127C(Entity* this) {
+ this->previousActionFlag = 1;
+ this->spritePriority.b1 = 0;
+
+ if ((gPlayerState.flags.all & 0x80) != 0) {
+ this->actionDelay = 0x3c;
+ gPlayerState.field_0x8 = 0xc19;
+ PlaySFX(0x84);
+ } else {
+ if ((gPlayerState.flags.all & 0x10000) == 0) {
+ sub_08004168(this);
+ }
+
+ CreateFx(this, 11, 0);
+
+ if ((gPlayerState.flags.all & 8) == 0) {
+ gPlayerState.field_0x8 = 0x72c;
+ } else {
+ gPlayerState.field_0x8 = 0x44c;
+ }
+ }
+ ResetPlayer();
+}
+
+void sub_080712F0(Entity* this) {
+ u32 temp;
+
+ UpdateAnimationSingleFrame(this);
+
+ temp = FALSE;
+
+ if ((gPlayerState.flags.all & 0x80) != 0) {
+ if (--this->actionDelay == 0)
+ temp = TRUE;
+ } else if ((this->frames.all & 0x80) != 0) {
+ if (this->animIndex != 0xce)
+ gPlayerState.field_0x8 = 0x2ce;
+ else
+ temp = TRUE;
+ }
+
+ if (temp == FALSE)
+ return;
+
+ this->field_0x42 = 0;
+ this->hurtBlinkTime = 0x20;
+ this->spritePriority.b1 = 1;
+ this->spriteSettings.b.draw = FALSE;
+ gPlayerState.flags.all &= ~(0x4);
+ sub_08079458();
+}
+
+void sub_08071380(Entity *this) {
+ gPlayerState.field_0xa8 = 0xe;
+ gUnk_0811BA9C[this->previousActionFlag](this);
+
+ if ((this->previousActionFlag == 7) || (this->previousActionFlag < 3))
+ return;
+
+ if ((gPlayerState.flags.all & 0x20) == 0)
+ return;
+
+ if ((gUnk_03000FF0.newKeys & 0x102) == 0)
+ return;
+
+ if (CheckIsDungeon() || gArea.field_0x17 == 3) {
+ this->previousActionFlag = 7;
+ this->actionDelay = 30;
+ DoFade(7, 16);
+ PlaySFX(0xf8);
+ } else {
+ sub_0804ACF8();
+ }
+}
+
+void sub_08071400(Entity* this) {
+ u16 x;
+ u16 y;
+
+ this->flags &= ~(0x80);
+ this->field_0x42 = 0;
+
+ x = gArea.field_0x12;
+ y = gArea.field_0x14;
+
+ if ((this->x.HALF.HI != x) || (this->y.HALF.HI != y)) {
+ this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.field_0x12, gArea.field_0x14);
+ this->nonPlanarMovement = 0x100;
+ sub_08079E08();
+ }
+
+ sub_08073904(this);
+ UpdateAnimationSingleFrame(this);
+
+ if (gPlayerState.jumpStatus == 0) {
+ gPlayerState.flags.all |= 0x20;
+ this->previousActionFlag = 1;
+ this->animationState = 4;
+ this->spriteSettings.b.flipX = FALSE;
+ if (gArea.field_0x17 == 4) {
+ gPlayerState.field_0x8 = 0x52c;
+ }
+ }
+
+ this->actionDelay = 8;
+
+ if (gArea.field_0x17 != 3) {
+ this->spritePriority.b0 = 3;
+ }
+}
diff --git a/src/sub_08070680.c b/src/sub_08070680.c
deleted file mode 100644
index a7717ff3..00000000
--- a/src/sub_08070680.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "global.h"
-#include "entity.h"
-#include "player.h"
-#include "functions.h"
-
-extern void (*gUnk_0811B9E0[])(Entity*);
-
-extern BoundingBox gUnk_08114F88;
-
-// inject
-void sub_08070680(Entity* this) {
- gUnk_0811B9E0[this->action](this);
-}
-
-void sub_08070698(Entity* this) {
- u32 uVar1;
- int iVar2;
- Entity* ent;
-
- gPlayerState.field_0x0[0] = 0xff;
- gPlayerState.field_0x16[0] = gPlayerEntity.x.HALF.HI;
- gPlayerState.field_0x16[1] = gPlayerEntity.y.HALF.HI;
- this->flags = this->flags | 0x80;
- this->spritePriority.b0 = 0xc;
- this->spritePriority.b1 = 1;
- this->spriteSettings.b.shadow = 1;
- this->field_0x16 = 0x20;
- this->flags2 = 8;
- this->damageType = 0x79;
- this->boundingBox = &gUnk_08114F88;
- this->spriteIndex = 1;
- gPlayerState.field_0x8 = 0x100;
- sub_0806FDA0(this);
- sub_080AE008(this, 1, 2);
- InitAnimationForceUpdate(this, 2);
- if (this->collisionLayer == 0) {
- sub_08016A30(this);
- }
- uVar1 = IsItemEquipped(0x10);
- if (uVar1 != 2) {
- sub_08077728();
- }
- sub_0807A108();
- sub_0807AEE4();
- iVar2 = sub_08078EFC();
- if (iVar2 == 0) {
- sub_0807921C();
- sub_0807A1B8();
- if (gPlayerState.swimState != 0) {
- gPlayerState.swimState = 1;
- sub_08079938();
- gPlayerState.field_0xa8 = 7;
- sub_0807ACCC(this);
- ent = FindEntityInListByForm(0x6, 0xf, 0x6, 0xb, 0x0);
- if (ent != NULL) {
- DeleteEntity(ent);
- }
- }
- }
-}