Merge pull request #500 from octorock/playerUtils

Decompile some playerUtils
This commit is contained in:
notyourav
2022-04-21 18:51:15 -07:00
committed by GitHub
21 changed files with 455 additions and 1440 deletions
@@ -1,118 +0,0 @@
.syntax unified
push {r4, lr}
ldr r3, _080777D0 @ =gPlayerState
adds r0, r3, #0
adds r0, #0x92
ldrh r1, [r0]
movs r4, #0x80
adds r0, r4, #0
ands r0, r1
cmp r0, #0
beq _08077870
ldr r1, [r3, #0x30]
movs r0, #0x80
lsls r0, r0, #0xf
ands r0, r1
cmp r0, #0
beq _080777D4
adds r1, r3, #0
adds r1, #0xa0
movs r0, #1
strb r0, [r1]
bl DeleteClones
_080777CC:
movs r0, #1
b _0807787C
.align 2, 0
_080777D0: .4byte gPlayerState
_080777D4:
ldr r2, _080777F4 @ =gArea
ldrb r0, [r2, #0x18]
cmp r0, #2
beq _080777FC
cmp r0, #3
beq _08077810
ldr r0, _080777F8 @ =gUnk_0200AF00
adds r0, #0x2c
ldrb r0, [r0]
cmp r0, #0xc
bne _0807787A
adds r2, r3, #0
ldrb r0, [r2, #0x1c]
cmp r0, #0
bne _0807787A
b _08077838
.align 2, 0
_080777F4: .4byte gArea
_080777F8: .4byte gUnk_0200AF00
_080777FC:
ldrb r0, [r2, #0x1a]
cmp r0, #0
bne _080777CC
ldr r1, _0807780C @ =gPlayerEntity
ldrb r0, [r1, #0xd]
adds r0, #1
strb r0, [r1, #0xd]
b _080777CC
.align 2, 0
_0807780C: .4byte gPlayerEntity
_08077810:
ldrb r0, [r2, #0x1a]
cmp r0, #0
bne _0807787A
ands r1, r4
cmp r1, #0
beq _0807787A
ldr r0, _08077834 @ =gPlayerEntity
ldrb r1, [r0, #0xd]
adds r1, #1
strb r1, [r0, #0xd]
ldrb r2, [r0, #0x10]
movs r1, #0x7f
ands r1, r2
strb r1, [r0, #0x10]
movs r1, #0xb4
bl RequestPriorityDuration
b _080777CC
.align 2, 0
_08077834: .4byte gPlayerEntity
_08077838:
ldrb r0, [r2, #0x12]
cmp r0, #0x11
beq _0807787A
adds r0, r2, #0
adds r0, #0x90
ldrh r1, [r0]
movs r0, #0xf0
lsls r0, r0, #4
ands r0, r1
cmp r0, #0
beq _0807787A
ldr r0, [r2, #0x30]
ldr r1, _0807786C @ =0x00040400
ands r0, r1
cmp r0, #0
bne _0807787A
ldrb r0, [r2, #2]
cmp r0, #0
bne _0807787A
ldrb r0, [r2, #4]
cmp r0, #0
bne _0807787A
movs r0, #0x18
strb r0, [r2, #0xc]
b _0807787A
.align 2, 0
_0807786C: .4byte 0x00040400
_08077870:
ldr r0, [r3, #0x30]
movs r1, #0x20
ands r0, r1
cmp r0, #0
bne _080777CC
_0807787A:
movs r0, #0
_0807787C:
pop {r4, pc}
.align 2, 0
.syntax divided
@@ -1,64 +0,0 @@
.syntax unified
push {lr}
ldr r2, _08077920 @ =gPlayerState
ldr r0, [r2, #0x30]
ldr r1, _08077924 @ =0x000400A0
ands r0, r1
cmp r0, #0
bne _0807791C
ldr r0, _08077928 @ =gPlayerEntity
adds r0, #0x79
ldrb r0, [r0]
cmp r0, #0
bne _080778FA
ldrb r0, [r2, #5]
cmp r0, #0
bne _080778FA
adds r0, r2, #0
adds r0, #0x92
ldrh r1, [r0]
movs r0, #0x80
lsls r0, r0, #8
ands r0, r1
cmp r0, #0
beq _0807791C
_080778FA:
bl sub_080789A8
cmp r0, #0
bne _08077910
ldr r0, _08077920 @ =gPlayerState
adds r0, #0x90
ldrh r1, [r0]
ldr r0, _0807792C @ =0x00000F03
ands r0, r1
cmp r0, #0
bne _0807791C
_08077910:
movs r0, #0x1b
bl sub_0807794C
adds r1, r0, #0
cmp r1, #0
bne _08077930
_0807791C:
movs r0, #0
b _08077940
.align 2, 0
_08077920: .4byte gPlayerState
_08077924: .4byte 0x000400A0
_08077928: .4byte gPlayerEntity
_0807792C: .4byte 0x00000F03
_08077930:
movs r0, #0x1b
strb r0, [r1, #1]
ldr r0, _08077944 @ =gUnk_0811BE48
ldr r2, _08077948 @ =0x00000145
adds r0, r0, r2
ldrb r0, [r0]
strb r0, [r1, #9]
movs r0, #1
_08077940:
pop {pc}
.align 2, 0
_08077944: .4byte gUnk_0811BE48
_08077948: .4byte 0x00000145
.syntax divided
@@ -1,98 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
mov sb, r0
ldr r1, _08079EBC @ =gPlayerEntity
ldrb r2, [r1, #0x15]
movs r0, #8
ands r0, r2
adds r7, r1, #0
cmp r0, #0
beq _08079ECA
movs r0, #0x10
ands r0, r2
cmp r0, #0
beq _08079EC0
ldr r0, [r7, #0x48]
ldrb r0, [r0, #2]
rsbs r0, r0, #0
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
b _08079EC4
.align 2, 0
_08079EBC: .4byte gPlayerEntity
_08079EC0:
ldr r0, [r7, #0x48]
ldrb r5, [r0, #2]
_08079EC4:
ldr r0, [r7, #0x48]
ldrb r4, [r0, #3]
b _08079EDE
_08079ECA:
ldr r0, [r7, #0x48]
ldrb r5, [r0, #4]
cmp r2, #0
beq _08079ED6
ldrb r4, [r0, #5]
b _08079EDE
_08079ED6:
ldrb r0, [r0, #5]
rsbs r0, r0, #0
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
_08079EDE:
lsls r0, r5, #0x10
asrs r0, r0, #0x10
mov r8, r0
lsls r0, r4, #0x10
asrs r6, r0, #0x10
adds r0, r7, #0
mov r1, r8
adds r2, r6, #0
bl sub_080B1AF0
adds r1, r0, #0
mov r0, sb
bl sub_08079F48
cmp r0, #0
bne _08079F3C
ldrb r1, [r7, #0x15]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _08079F10
rsbs r0, r6, #0
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
b _08079F18
_08079F10:
mov r1, r8
rsbs r0, r1, #0
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
_08079F18:
ldr r0, _08079F38 @ =gPlayerEntity
lsls r1, r5, #0x10
asrs r1, r1, #0x10
lsls r2, r4, #0x10
asrs r2, r2, #0x10
bl sub_080B1AF0
adds r1, r0, #0
mov r0, sb
bl sub_08079F48
cmp r0, #0
bne _08079F3C
movs r0, #0
b _08079F3E
.align 2, 0
_08079F38: .4byte gPlayerEntity
_08079F3C:
movs r0, #1
_08079F3E:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,66 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r3, r0, #0
movs r2, #0x16
ldr r0, _0807A0AC @ =gPlayerState
ldrb r0, [r0, #0xf]
cmp r0, #0
beq _0807A0B0
movs r2, #0x1b
cmp r0, #0x78
bls _0807A104
movs r2, #0x1a
b _0807A104
.align 2, 0
_0807A0AC: .4byte gPlayerState
_0807A0B0:
ldr r0, _0807A0F0 @ =gSave
adds r1, r0, #0
adds r1, #0xb2
ldrb r1, [r1]
adds r5, r0, #0
cmp r1, #0
beq _0807A104
movs r4, #1
cmp r3, #0
bne _0807A0D6
adds r0, #0xc4
ldrh r1, [r0]
cmp r1, #0xb3
bhi _0807A0D6
movs r0, #8
ands r0, r1
cmp r0, #0
beq _0807A0D6
movs r4, #0
_0807A0D6:
cmp r4, #0
beq _0807A104
adds r0, r5, #0
adds r0, #0xb2
ldrb r0, [r0]
cmp r0, #0x30
beq _0807A102
cmp r0, #0x30
bgt _0807A0F4
cmp r0, #0x2f
beq _0807A0FA
b _0807A102
.align 2, 0
_0807A0F0: .4byte gSave
_0807A0F4:
cmp r0, #0x31
beq _0807A0FE
b _0807A102
_0807A0FA:
movs r2, #0x18
b _0807A104
_0807A0FE:
movs r2, #0x17
b _0807A104
_0807A102:
movs r2, #0x19
_0807A104:
adds r0, r2, #0
pop {r4, r5, pc}
.syntax divided
@@ -1,41 +0,0 @@
.syntax unified
push {lr}
ldrb r1, [r0, #0x15]
cmp r1, #8
beq _0807A8BA
cmp r1, #8
bgt _0807A8A6
cmp r1, #0
beq _0807A8B0
b _0807A8C8
_0807A8A6:
cmp r1, #0x10
beq _0807A8B6
cmp r1, #0x18
beq _0807A8C0
b _0807A8C8
_0807A8B0:
movs r2, #8
rsbs r2, r2, #0
b _0807A8CA
_0807A8B6:
movs r2, #5
b _0807A8CA
_0807A8BA:
movs r2, #0
movs r1, #8
b _0807A8CC
_0807A8C0:
movs r2, #0
movs r1, #8
rsbs r1, r1, #0
b _0807A8CC
_0807A8C8:
movs r2, #0
_0807A8CA:
movs r1, #0
_0807A8CC:
bl GetRelativeCollisionTile
pop {pc}
.align 2, 0
.syntax divided
@@ -1,42 +0,0 @@
.syntax unified
push {r4, lr}
adds r3, r0, #0
adds r2, r1, #0
movs r1, #0x36
ldrsh r0, [r3, r1]
cmp r0, #0
bne _0807AB3C
adds r0, r3, #0
adds r0, #0x38
ldrb r0, [r0]
lsls r0, r0, #0x1e
orrs r2, r0
movs r3, #0
ldr r0, _0807AB40 @ =gPlayerState
ldr r1, [r0, #0x40]
adds r4, r0, #0
cmp r1, r2
beq _0807AB32
adds r1, r4, #0
adds r1, #0x40
_0807AB20:
ldr r0, [r1]
stm r1!, {r2}
adds r2, r0, #0
adds r3, #1
cmp r3, #0xe
bhi _0807AB32
ldr r0, [r1]
cmp r0, r2
bne _0807AB20
_0807AB32:
lsls r0, r3, #2
adds r1, r4, #0
adds r1, #0x40
adds r0, r0, r1
str r2, [r0]
_0807AB3C:
pop {r4, pc}
.align 2, 0
_0807AB40: .4byte gPlayerState
.syntax divided
@@ -1,129 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r6, r0, #0
adds r7, r1, #0
mov r8, r2
movs r1, #0x2e
ldrsh r0, [r6, r1]
adds r0, r0, r7
ldr r2, _0807ABF0 @ =gRoomControls
mov sb, r2
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r0, r0, #4
movs r3, #0x3f
mov sl, r3
ands r0, r3
movs r5, #0x32
ldrsh r1, [r6, r5]
add r1, r8
ldrh r2, [r2, #8]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r3
lsls r1, r1, #6
orrs r0, r1
adds r1, r6, #0
adds r1, #0x38
ldrb r1, [r1]
bl GetTileType
movs r1, #0xb
bl sub_0806FC50
adds r5, r0, #0
cmp r5, #0
beq _0807AC44
ldrh r0, [r5, #6]
cmp r0, #0x76
bne _0807ABF4
movs r0, #0x2a
movs r1, #1
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _0807AC44
lsls r2, r7, #0x10
mov r0, r8
lsls r3, r0, #0x10
adds r0, r6, #0
adds r1, r4, #0
bl PositionRelative
adds r0, r4, #0
bl sub_08004168
ldrh r0, [r5, #6]
movs r2, #0x2e
ldrsh r1, [r4, r2]
mov r3, sb
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
mov r5, sl
ands r1, r5
movs r3, #0x32
ldrsh r2, [r4, r3]
mov r5, sb
ldrh r3, [r5, #8]
subs r2, r2, r3
asrs r2, r2, #4
mov r3, sl
ands r2, r3
lsls r2, r2, #6
orrs r1, r2
adds r2, r4, #0
adds r2, #0x38
ldrb r2, [r2]
bl sub_0807B7D8
b _0807AC44
.align 2, 0
_0807ABF0: .4byte gRoomControls
_0807ABF4:
movs r0, #0x2a
movs r1, #2
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _0807AC44
lsls r2, r7, #0x10
mov r0, r8
lsls r3, r0, #0x10
adds r0, r6, #0
adds r1, r4, #0
bl PositionRelative
str r5, [r4, #0x54]
ldr r0, _0807AC50 @ =0x0000404F
movs r2, #0x2e
ldrsh r1, [r4, r2]
mov r3, sb
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
mov r5, sl
ands r1, r5
movs r3, #0x32
ldrsh r2, [r4, r3]
mov r5, sb
ldrh r3, [r5, #8]
subs r2, r2, r3
asrs r2, r2, #4
mov r3, sl
ands r2, r3
lsls r2, r2, #6
orrs r1, r2
adds r2, r4, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
_0807AC44:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0807AC50: .4byte 0x0000404F
.syntax divided
@@ -1,67 +0,0 @@
.syntax unified
push {lr}
adds r2, r0, #0
ldr r0, _0807AC74 @ =gPlayerState
ldrb r1, [r0, #0x11]
adds r3, r0, #0
cmp r1, #0
beq _0807ACC6
ldrb r0, [r3, #0x12]
cmp r0, #0x2a
beq _0807ACA8
cmp r0, #0x2a
bgt _0807AC78
cmp r0, #0x1e
beq _0807AC82
b _0807ACC6
.align 2, 0
_0807AC74: .4byte gPlayerState
_0807AC78:
cmp r0, #0x2b
beq _0807AC90
cmp r0, #0x2c
beq _0807ACB6
b _0807ACC6
_0807AC82:
ldrh r0, [r2, #0x2e]
movs r1, #0x10
rsbs r1, r1, #0
ands r1, r0
movs r0, #8
orrs r1, r0
strh r1, [r2, #0x2e]
_0807AC90:
movs r0, #0
movs r1, #0x1d
strb r1, [r2, #0xc]
strb r0, [r2, #0xd]
strh r0, [r2, #0x30]
ldr r0, _0807ACA4 @ =0x000002CF
strh r0, [r3, #8]
movs r0, #1
b _0807ACC8
.align 2, 0
_0807ACA4: .4byte 0x000002CF
_0807ACA8:
ldrh r0, [r2, #0x2e]
movs r1, #0x10
rsbs r1, r1, #0
ands r1, r0
movs r0, #8
orrs r1, r0
strh r1, [r2, #0x2e]
_0807ACB6:
movs r0, #0
movs r1, #0x1d
strb r1, [r2, #0xc]
movs r1, #1
strb r1, [r2, #0xd]
strh r0, [r2, #0x30]
movs r0, #1
b _0807ACC8
_0807ACC6:
movs r0, #0
_0807ACC8:
pop {pc}
.align 2, 0
.syntax divided
@@ -1,121 +0,0 @@
.syntax unified
push {r4, lr}
adds r4, r0, #0
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #0x39
rsbs r0, r0, #0
ands r0, r1
strb r0, [r2]
adds r1, r4, #0
adds r1, #0x42
movs r0, #0
strb r0, [r1]
movs r0, #0x72
bl GetInventoryValue
movs r1, #0xc0
cmp r0, #1
bne _0807ACF4
adds r1, #0x40
_0807ACF4:
movs r2, #0x24
ldrsh r0, [r4, r2]
cmp r1, r0
ble _0807AD18
strh r1, [r4, #0x24]
ldr r0, _0807AD14 @ =gPlayerState
ldrb r1, [r0, #0xd]
strb r1, [r4, #0x15]
adds r0, #0x26
ldrb r1, [r0]
movs r0, #0xf
ands r0, r1
cmp r0, #1
bne _0807ADB4
b _0807AD1E
.align 2, 0
_0807AD14: .4byte gPlayerState
_0807AD18:
ldrh r0, [r4, #0x24]
subs r0, #4
strh r0, [r4, #0x24]
_0807AD1E:
ldr r2, _0807AD3C @ =gPlayerState
adds r1, r2, #0
adds r1, #0x89
ldrb r0, [r1]
cmp r0, #0
bne _0807AD40
adds r0, r4, #0
bl sub_0807ADB8
cmp r0, #0
bne _0807AD74
adds r0, r4, #0
bl sub_0807AE20
b _0807AD74
.align 2, 0
_0807AD3C: .4byte gPlayerState
_0807AD40:
subs r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
cmp r0, #0
beq _0807AD52
adds r0, r4, #0
bl sub_0807ADB8
b _0807AD74
_0807AD52:
adds r2, #0x26
ldrb r1, [r2]
movs r0, #0x7f
ands r0, r1
strb r0, [r2]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #4
orrs r0, r1
strb r0, [r2]
ldr r0, _0807ADA0 @ =0x00000163
bl SoundReq
_0807AD74:
ldr r0, _0807ADA4 @ =gPlayerState
adds r0, #0x26
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _0807ADA8
adds r2, r4, #0
adds r2, #0x3c
ldrb r1, [r2]
movs r0, #4
orrs r0, r1
strb r0, [r2]
subs r2, #0x13
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #6
orrs r0, r1
b _0807ADB2
.align 2, 0
_0807ADA0: .4byte 0x00000163
_0807ADA4: .4byte gPlayerState
_0807ADA8:
adds r2, r4, #0
adds r2, #0x3c
ldrb r1, [r2]
movs r0, #0xfb
ands r0, r1
_0807ADB2:
strb r0, [r2]
_0807ADB4:
pop {r4, pc}
.align 2, 0
.syntax divided
@@ -1,56 +0,0 @@
.syntax unified
push {r4, lr}
adds r2, r0, #0
ldr r3, _0807ADF4 @ =gPlayerState
adds r0, r3, #0
adds r0, #0x92
ldrh r1, [r0]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _0807AE1C
movs r0, #0x26
adds r0, r0, r3
mov ip, r0
ldrb r0, [r0]
movs r1, #0x80
eors r0, r1
mov r1, ip
strb r0, [r1]
movs r1, #0x80
ands r0, r1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #0
beq _0807ADF8
adds r1, r3, #0
adds r1, #0x89
movs r0, #0x78
strb r0, [r1]
b _0807AE0E
.align 2, 0
_0807ADF4: .4byte gPlayerState
_0807ADF8:
adds r2, #0x29
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #4
orrs r0, r1
strb r0, [r2]
adds r0, r3, #0
adds r0, #0x89
strb r4, [r0]
_0807AE0E:
ldr r0, _0807AE18 @ =0x00000163
bl SoundReq
movs r0, #1
b _0807AE1E
.align 2, 0
_0807AE18: .4byte 0x00000163
_0807AE1C:
movs r0, #0
_0807AE1E:
pop {r4, pc}
.syntax divided
@@ -1,98 +0,0 @@
.syntax unified
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
cmp r0, #0x17
bne _0807AE32
ldr r0, _0807AE58 @ =gPlayerState
ldrb r0, [r0, #0xa]
cmp r0, #0
bne _0807AE74
_0807AE32:
ldr r0, _0807AE5C @ =gRoomControls
ldrh r0, [r0]
cmp r0, #0
bne _0807AE74
ldr r0, _0807AE58 @ =gPlayerState
adds r0, #0x92
ldrh r1, [r0]
movs r0, #8
ands r0, r1
cmp r0, #0
beq _0807AE74
movs r0, #0x72
bl GetInventoryValue
cmp r0, #1
bne _0807AE60
movs r0, #0xe0
lsls r0, r0, #1
b _0807AE64
.align 2, 0
_0807AE58: .4byte gPlayerState
_0807AE5C: .4byte gRoomControls
_0807AE60:
movs r0, #0xc0
lsls r0, r0, #1
_0807AE64:
strh r0, [r4, #0x24]
adds r0, r4, #0
bl sub_08079520
movs r0, #0xb1
lsls r0, r0, #1
bl SoundReq
_0807AE74:
movs r0, #0x10
bl sub_080793E4
cmp r0, #0
beq _0807AEA8
adds r1, r4, #0
adds r1, #0x3d
movs r0, #0x14
strb r0, [r1]
adds r1, #5
movs r0, #4
strb r0, [r1]
ldrb r0, [r4, #0x14]
lsls r0, r0, #2
movs r1, #0x10
eors r0, r1
adds r1, r4, #0
adds r1, #0x3e
strb r0, [r1]
movs r0, #2
rsbs r0, r0, #0
bl ModHealth
movs r0, #0x7a
bl SoundReq
_0807AEA8:
ldrb r1, [r4, #0x15]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _0807AECC
ldr r0, _0807AEC8 @ =gRoomTransition
ldr r0, [r0]
movs r1, #0xf
ands r0, r1
cmp r0, #0
bne _0807AEDE
adds r0, r4, #0
movs r1, #4
bl CreateRandomWaterTrace
b _0807AEDE
.align 2, 0
_0807AEC8: .4byte gRoomTransition
_0807AECC:
ldr r0, _0807AEE0 @ =gRoomTransition
ldr r0, [r0]
movs r1, #7
ands r0, r1
cmp r0, #0
bne _0807AEDE
adds r0, r4, #0
bl CreateWaterTrace
_0807AEDE:
pop {r4, pc}
.align 2, 0
_0807AEE0: .4byte gRoomTransition
.syntax divided
@@ -1,108 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r6, r0, #0
adds r7, r1, #0
movs r1, #2
bl sub_0807B464
cmp r0, #0
beq _0807B558
adds r0, r6, #0
subs r0, #0x40
movs r1, #2
bl sub_0807B464
adds r5, r0, #0
adds r0, r6, #1
movs r1, #2
bl sub_0807B464
lsls r0, r0, #1
orrs r5, r0
adds r4, r6, #0
adds r4, #0x40
adds r0, r4, #0
movs r1, #2
bl sub_0807B464
lsls r0, r0, #2
orrs r5, r0
subs r0, r6, #1
movs r1, #2
bl sub_0807B464
lsls r0, r0, #3
orrs r5, r0
adds r0, r6, #0
adds r0, #0x41
movs r1, #1
bl sub_0807B464
lsls r0, r0, #1
orrs r5, r0
adds r0, r6, #0
adds r0, #0x3f
movs r1, #1
bl sub_0807B464
lsls r0, r0, #3
orrs r5, r0
adds r0, r4, #0
movs r1, #2
bl GetTileType
cmp r0, #0
beq _0807B4FA
adds r0, r6, #0
adds r0, #0x80
movs r1, #1
bl sub_0807B464
lsls r0, r0, #2
orrs r5, r0
_0807B4FA:
ldr r0, _0807B514 @ =gUnk_0811C2CC
lsls r1, r5, #1
adds r1, r1, r0
ldrh r4, [r1]
adds r0, r6, #0
movs r1, #2
bl GetTileType
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r2, _0807B518 @ =gUnk_0811C2EC
movs r3, #0
b _0807B51E
.align 2, 0
_0807B514: .4byte gUnk_0811C2CC
_0807B518: .4byte gUnk_0811C2EC
_0807B51C:
adds r2, #6
_0807B51E:
ldrh r1, [r2]
cmp r1, #0
beq _0807B52A
cmp r0, r1
bne _0807B51C
ldrh r3, [r2, #2]
_0807B52A:
movs r0, #1
lsls r0, r7
bics r3, r0
ldr r2, _0807B534 @ =gUnk_0811C2EC
b _0807B53A
.align 2, 0
_0807B534: .4byte gUnk_0811C2EC
_0807B538:
adds r2, #6
_0807B53A:
ldrh r0, [r2]
cmp r0, #0
beq _0807B54E
ldrh r0, [r2, #2]
cmp r3, r0
bne _0807B538
ldrh r0, [r2, #4]
cmp r5, r0
bne _0807B538
ldrh r4, [r2]
_0807B54E:
adds r0, r4, #0
adds r1, r6, #0
movs r2, #2
bl SetTileType
_0807B558:
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,39 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r6, r1, #0
adds r7, r2, #0
bl sub_0807B464
cmp r0, #0
beq _0807B5AC
adds r0, r5, #0
subs r0, #0x40
adds r1, r6, #0
bl sub_0807B464
adds r4, r0, #0
adds r0, r5, #1
adds r1, r6, #0
bl sub_0807B464
lsls r0, r0, #1
orrs r4, r0
adds r0, r5, #0
adds r0, #0x40
adds r1, r6, #0
bl sub_0807B464
lsls r0, r0, #2
orrs r4, r0
subs r0, r5, #1
adds r1, r6, #0
bl sub_0807B464
lsls r0, r0, #3
orrs r0, r4
lsls r0, r0, #1
adds r0, r0, r7
ldrh r0, [r0]
adds r1, r5, #0
adds r2, r6, #0
bl SetTileType
_0807B5AC:
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,40 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r3, r0, #0
movs r1, #0x2e
ldrsh r0, [r3, r1]
ldr r6, _0807B5F8 @ =gUnk_0811C456
ldrb r1, [r3, #0x14]
movs r2, #6
ands r2, r1
lsls r1, r2, #1
adds r1, r1, r6
movs r4, #0
ldrsh r1, [r1, r4]
adds r0, r0, r1
ldr r5, _0807B5FC @ =gRoomControls
ldrh r1, [r5, #6]
subs r0, r0, r1
asrs r0, r0, #4
movs r4, #0x3f
ands r0, r4
movs r7, #0x32
ldrsh r1, [r3, r7]
adds r2, #1
lsls r2, r2, #1
adds r2, r2, r6
movs r3, #0
ldrsh r2, [r2, r3]
adds r1, r1, r2
ldrh r2, [r5, #8]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r4
lsls r1, r1, #6
orrs r0, r1
bl sub_0807B600
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0807B5F8: .4byte gUnk_0811C456
_0807B5FC: .4byte gRoomControls
.syntax divided
@@ -1,173 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r6, r5, #0
subs r6, #0x40
lsls r0, r5, #0x10
lsrs r0, r0, #0x10
movs r1, #1
bl sub_080B1AE0
cmp r0, #0x56
beq _0807B61A
movs r0, #0
b _0807B76E
_0807B61A:
adds r0, r5, #0
movs r1, #1
bl GetTileType
adds r1, r0, #0
ldr r0, _0807B634 @ =0x0000026A
cmp r1, r0
bne _0807B638
adds r0, r5, #0
bl sub_0807B820
b _0807B76C
.align 2, 0
_0807B634: .4byte 0x0000026A
_0807B638:
ldr r0, _0807B648 @ =0x00000267
cmp r1, r0
bne _0807B64C
adds r0, r5, #0
adds r0, #0x40
bl sub_0807B820
b _0807B76C
.align 2, 0
_0807B648: .4byte 0x00000267
_0807B64C:
ldr r0, _0807B65C @ =0x0000027A
cmp r1, r0
bne _0807B660
adds r0, r5, #0
bl sub_0807B8A8
b _0807B76C
.align 2, 0
_0807B65C: .4byte 0x0000027A
_0807B660:
ldr r0, _0807B670 @ =0x00000277
cmp r1, r0
bne _0807B674
adds r0, r5, #0
adds r0, #0x40
bl sub_0807B8A8
b _0807B76C
.align 2, 0
_0807B670: .4byte 0x00000277
_0807B674:
ldr r0, _0807B684 @ =0x0000028A
cmp r1, r0
bne _0807B688
adds r0, r5, #0
bl sub_0807B930
b _0807B76C
.align 2, 0
_0807B684: .4byte 0x0000028A
_0807B688:
ldr r0, _0807B698 @ =0x00000287
cmp r1, r0
bne _0807B69C
adds r0, r5, #0
adds r0, #0x40
bl sub_0807B930
b _0807B76C
.align 2, 0
_0807B698: .4byte 0x00000287
_0807B69C:
adds r0, r5, #0
movs r1, #2
bl GetTileType
cmp r0, #0
beq _0807B6EC
ldr r0, _0807B6E8 @ =0x000002F2
adds r1, r5, #0
movs r2, #1
bl SetTileType
adds r0, r6, #0
movs r1, #1
bl sub_080B1B44
cmp r0, #3
bne _0807B6CA
movs r0, #0xbd
lsls r0, r0, #2
adds r1, r6, #0
movs r2, #1
bl SetTileType
_0807B6CA:
adds r0, r5, #0
adds r0, #0x40
movs r1, #1
bl sub_080B1B44
cmp r0, #3
bne _0807B6F8
movs r0, #0xbd
lsls r0, r0, #2
adds r1, r5, #0
movs r2, #1
bl SetTileType
b _0807B6F8
.align 2, 0
_0807B6E8: .4byte 0x000002F2
_0807B6EC:
movs r0, #0xbd
lsls r0, r0, #2
adds r1, r5, #0
movs r2, #1
bl SetTileType
_0807B6F8:
adds r0, r6, #0
movs r1, #2
bl sub_0807B464
cmp r0, #0
beq _0807B748
movs r0, #0
adds r1, r6, #0
movs r2, #2
bl SetTileType
adds r0, r6, #0
movs r1, #1
bl GetTileType
ldr r1, _0807B770 @ =0x000002F2
cmp r0, r1
bne _0807B728
movs r0, #0xbd
lsls r0, r0, #2
adds r1, r6, #0
movs r2, #1
bl SetTileType
_0807B728:
adds r0, r5, #1
ldr r4, _0807B774 @ =gUnk_0811C2AC
movs r1, #1
adds r2, r4, #0
bl sub_0807B55C
subs r0, r5, #1
movs r1, #1
adds r2, r4, #0
bl sub_0807B55C
adds r0, r6, #0
movs r1, #1
adds r2, r4, #0
bl sub_0807B55C
_0807B748:
adds r0, r6, #1
movs r1, #3
bl sub_0807B480
subs r0, r6, #1
movs r1, #1
bl sub_0807B480
adds r0, r6, #0
adds r0, #0x40
movs r1, #0
bl sub_0807B480
adds r0, r6, #0
subs r0, #0x40
movs r1, #2
bl sub_0807B480
_0807B76C:
movs r0, #1
_0807B76E:
pop {r4, r5, r6, pc}
.align 2, 0
_0807B770: .4byte 0x000002F2
_0807B774: .4byte gUnk_0811C2AC
.syntax divided
@@ -1,44 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r6, r1, #0
lsls r0, r5, #0x10
lsrs r0, r0, #0x10
lsls r1, r6, #0x18
lsrs r1, r1, #0x18
bl sub_080B1AE0
cmp r0, #0xd
bne _0807B7D0
adds r0, r5, #0
subs r0, #0x40
adds r1, r6, #0
bl sub_0807B434
adds r4, r0, #0
adds r0, r5, #1
adds r1, r6, #0
bl sub_0807B434
lsls r0, r0, #1
orrs r4, r0
adds r0, r5, #0
adds r0, #0x40
adds r1, r6, #0
bl sub_0807B434
lsls r0, r0, #2
orrs r4, r0
subs r0, r5, #1
adds r1, r6, #0
bl sub_0807B434
lsls r0, r0, #3
orrs r0, r4
ldr r1, _0807B7D4 @ =gUnk_0811C466
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
adds r1, r5, #0
adds r2, r6, #0
bl SetTileType
_0807B7D0:
pop {r4, r5, r6, pc}
.align 2, 0
_0807B7D4: .4byte gUnk_0811C466
.syntax divided
@@ -1,87 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r5, r1, #0
movs r1, #0x2e
ldrsh r2, [r0, r1]
movs r3, #0x32
ldrsh r1, [r0, r3]
adds r0, r2, #0
adds r2, r5, #0
bl sub_0807BEEC
adds r3, r0, #0
cmp r3, #0xff
beq _0807BDB4
ldr r1, _0807BD68 @ =gRoomControls
movs r2, #0
movs r0, #2
strb r0, [r1, #2]
strb r2, [r1, #3]
movs r4, #1
strh r4, [r1]
strb r3, [r1, #5]
strb r5, [r1, #0x10]
bl GetCurrentRoomInfo
adds r2, r0, #0
ldr r1, _0807BD6C @ =gArea
ldr r3, _0807BD70 @ =0x0000085C
adds r0, r1, r3
str r2, [r0]
ldrb r0, [r1, #0xd]
ands r4, r0
cmp r4, #0
beq _0807BD98
cmp r5, #1
beq _0807BD7E
cmp r5, #1
blo _0807BD74
cmp r5, #2
beq _0807BD86
cmp r5, #3
beq _0807BD90
b _0807BD98
.align 2, 0
_0807BD68: .4byte gRoomControls
_0807BD6C: .4byte gArea
_0807BD70: .4byte 0x0000085C
_0807BD74:
ldrh r0, [r2, #6]
ldrh r1, [r2, #2]
subs r0, r0, r1
strh r0, [r2, #6]
b _0807BD98
_0807BD7E:
ldrh r0, [r2]
ldrh r1, [r2, #4]
adds r0, r0, r1
b _0807BD96
_0807BD86:
ldrh r0, [r2, #2]
ldrh r3, [r2, #6]
adds r0, r0, r3
strh r0, [r2, #6]
b _0807BD98
_0807BD90:
ldrh r0, [r2, #4]
ldrh r1, [r2]
subs r0, r0, r1
_0807BD96:
strh r0, [r2, #4]
_0807BD98:
ldr r2, _0807BDB0 @ =gPlayerEntity
ldrb r1, [r2, #0x11]
movs r0, #0x10
rsbs r0, r0, #0
ands r0, r1
movs r1, #6
orrs r0, r1
strb r0, [r2, #0x11]
bl SetInitializationPriority
movs r0, #1
b _0807BDB6
.align 2, 0
_0807BDB0: .4byte gPlayerEntity
_0807BDB4:
movs r0, #0
_0807BDB6:
pop {r4, r5, pc}
.syntax divided
+1 -1
View File
@@ -272,7 +272,7 @@ typedef struct {
/*0x3e*/ u8 swordDamage : 2;
/* */ u8 filler14 : 6;
/*0x3f*/ u8 field_0x3f;
/*0x40*/ u8 path_memory[64];
/*0x40*/ u32 path_memory[16];
/*0x80*/ u16 speed_modifier;
/*0x82*/ u8 field_0x82[9];
/*0x8b*/ u8 controlMode;
+2 -1
View File
@@ -54,7 +54,8 @@ typedef struct {
/*0x086*/ u8 filler86[0x2];
/*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */
/*0x0A8*/ Stats stats; /**< Player stats. */
/*0x0D0*/ u8 fillerD0[0x46];
/*0x0D0*/ u8 fillerD0[34];
u8 inventory[36];
/*0x116*/ u8 didAllFusions;
/*0x117*/ u8 unk117;
/*0x118*/ u8 unk118[0x13];
+446 -41
View File
@@ -92,6 +92,40 @@ extern const u16 gUnk_0811C110[];
extern const u16 gUnk_08007CAC[];
u32 sub_0807BEEC(u32 param_1, u32 param_2, u32 param_3);
extern const u16 gUnk_0811C466[];
bool32 sub_0807B434(u32 position, u32 layer);
extern const u16 gUnk_0811C2AC[];
void sub_0807B820(u32);
void sub_0807B8A8(u32);
void sub_0807B930(u32);
bool32 sub_0807B464(u32 param_1, u32 param_2);
void sub_0807B55C(u32, u32, u16*);
void sub_0807B480(u32, u32);
extern const s16 gUnk_0811C456[];
bool32 sub_0807B600(u32);
bool32 sub_0807B464(u32 tilePos, u32 param_2);
extern const u16 gUnk_0811C2CC[];
extern const u16 gUnk_0811C2EC[];
bool32 sub_0807B464(u32 param_1, u32 param_2);
extern void CreateRandomWaterTrace(Entity* parent, int range);
void sub_08079520(Entity* this);
bool32 sub_0807ADB8(Entity*);
extern const u16* sub_0806FC50(u32 param_1, u32 param_2);
bool32 sub_08079F48(u32 param_1, u32 param_2);
void sub_08077698(PlayerEntity* this) {
ItemBehavior* puVar2;
u32 idx;
@@ -139,41 +173,46 @@ bool32 sub_08077758(PlayerEntity* this) {
return FALSE;
}
NONMATCH("asm/non_matching/playerUtils/sub_080777A0.inc", bool32 sub_080777A0(void)) {
bool32 sub_080777A0(void) {
if ((gPlayerState.field_0x92 & 0x80) != 0) {
if ((gPlayerState.flags & PL_CLONING) != 0) {
gPlayerState.chargeState.action = 1;
DeleteClones();
return TRUE;
} else {
if (gArea.portal_mode != 2) {
if (gArea.portal_mode == 3) {
switch (gArea.portal_mode) {
case 2:
if (gArea.unk1A == 0) {
gPlayerEntity.subAction += 1;
}
break;
case 3:
if ((gArea.unk1A == 0) && ((gPlayerState.flags & PL_MINISH) != 0)) {
gPlayerEntity.subAction += 1;
gPlayerEntity.flags &= ~ENT_COLLIDE;
RequestPriorityDuration(&gPlayerEntity, 0xb4);
return TRUE;
}
} else if ((((gUnk_0200AF00.unk_2c == 0xc) && (gPlayerState.field_0x1c == 0)) &&
(gPlayerState.floor_type != SURFACE_SWAMP)) &&
((((gPlayerState.field_0x90 & 0xf00) != 0 &&
((gPlayerState.flags & (PL_BURNING | PL_ROLLING)) == 0)) &&
((gPlayerState.jump_status == 0 && (gPlayerState.field_0x3[1] == 0)))))) {
gPlayerState.queued_action = 0x18;
}
return FALSE;
}
if (gArea.unk1A == 0) {
gPlayerEntity.subAction += 1;
return FALSE;
default:
if ((((gUnk_0200AF00.unk_2c == 0xc) && (gPlayerState.field_0x1c == 0)) &&
(gPlayerState.floor_type != 0x11)) &&
((((gPlayerState.field_0x90 & 0xf00) != 0 &&
((gPlayerState.flags & (PL_BURNING | PL_ROLLING)) == 0)) &&
((gPlayerState.jump_status == 0 && (gPlayerState.field_0x3[1] == 0)))))) {
gPlayerState.queued_action = 0x18;
}
return FALSE;
}
}
return TRUE;
} else {
if ((gPlayerState.flags & PL_USE_PORTAL) == 0) {
return FALSE;
}
return TRUE;
}
return TRUE;
}
END_NONMATCH
NONMATCH("asm/non_matching/playerUtils/sub_08077880.inc", void sub_08077880(u32 param_1, u32 param_2, u32 param_3)) {
ItemBehavior* item;
@@ -197,9 +236,8 @@ NONMATCH("asm/non_matching/playerUtils/sub_08077880.inc", void sub_08077880(u32
}
END_NONMATCH
NONMATCH("asm/non_matching/playerUtils/sub_080778CC.inc", bool32 sub_080778CC(void)) {
s32 iVar1;
ItemBehavior* pIVar2;
bool32 sub_080778CC(void) {
ItemBehavior* item;
if (!((((gPlayerState.flags & (PL_USE_PORTAL | PL_MINISH | PL_ROLLING)) == 0) &&
(((gNewPlayerEntity.unk_79 != 0 || (gPlayerState.heldObject != 0)) ||
@@ -207,16 +245,15 @@ NONMATCH("asm/non_matching/playerUtils/sub_080778CC.inc", bool32 sub_080778CC(vo
(((sub_080789A8() != 0 || ((gPlayerState.field_0x90 & 0xf03) == 0)))))) {
return FALSE;
}
pIVar2 = sub_0807794C(0x1b);
if (pIVar2 == NULL) {
return FALSE;
} else {
pIVar2->behaviorID = 0x1b;
pIVar2->field_0x5[4] = 2;
item = sub_0807794C(0x1b);
if (item != NULL) {
item->behaviorID = 0x1b;
item->field_0x5[4] = gUnk_0811BE48[0].unk0[0x145];
return TRUE;
} else {
return FALSE;
}
}
END_NONMATCH
ItemBehavior* sub_0807794C(u32 param_1) {
if (((((gPlayerState.queued_action == PLAYER_ROLL) && (param_1 != 0x1b)) ||
@@ -1423,7 +1460,37 @@ void sub_08079E58(s32 speed, u32 direction) {
sub_0807A5B8(direction);
}
ASM_FUNC("asm/non_matching/playerUtils/sub_08079E90.inc", bool32 sub_08079E90(u32 a))
bool32 sub_08079E90(u32 param_1) {
s16 tmp1;
s16 tmp2;
if (gPlayerEntity.direction & DirectionEast) {
if (gPlayerEntity.direction & DirectionSouth) {
tmp2 = -gPlayerEntity.hitbox->unk2[0];
} else {
tmp2 = gPlayerEntity.hitbox->unk2[0];
}
tmp1 = gPlayerEntity.hitbox->unk2[1];
} else {
tmp2 = gPlayerEntity.hitbox->unk2[2];
if (gPlayerEntity.direction != DirectionNorth) {
tmp1 = gPlayerEntity.hitbox->unk2[3];
} else {
tmp1 = -gPlayerEntity.hitbox->unk2[3];
}
}
if (!sub_08079F48(param_1, sub_080B1AF0(&gPlayerEntity, tmp2, tmp1))) {
if ((gPlayerEntity.direction & DirectionSouth) != 0) {
tmp1 = -tmp1;
} else {
tmp2 = -tmp2;
}
if (!sub_08079F48(param_1, sub_080B1AF0(&gPlayerEntity, tmp2, tmp1))) {
return FALSE;
}
}
return TRUE;
}
bool32 sub_08079F48(u32 param_1, u32 param_2) {
if (gUnk_0811C118[param_1 >> 2] == param_2) {
@@ -1468,7 +1535,38 @@ void sub_0807A050(void) {
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A094.inc", u32 sub_0807A094(u32 a))
u32 sub_0807A094(u32 param_1) {
bool32 condition;
u32 result = 0x16;
if (gPlayerState.hurtBlinkSpeed != 0) {
result = 0x1b;
if (0x78 < gPlayerState.hurtBlinkSpeed) {
result = 0x1a;
}
} else {
if (gSave.stats.charm != 0) {
condition = TRUE;
if (((param_1 == 0) && (gSave.stats.charmTimer < 0xb4)) && ((gSave.stats.charmTimer & 8) != 0)) {
condition = FALSE;
}
if (condition) {
switch (gSave.stats.charm) {
case 0x2f:
result = 0x18;
break;
case 0x31:
result = 0x17;
break;
case 0x30:
default:
result = 0x19;
break;
}
}
}
}
return result;
}
void DeleteClones(void) {
gPlayerClones[0] = NULL;
@@ -1549,7 +1647,33 @@ ASM_FUNC("asm/non_matching/playerUtils/sub_0807A5B8.inc", void sub_0807A5B8(u32
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A750.inc", void sub_0807A750())
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A894.inc", u32 sub_0807A894(Entity* a))
u32 sub_0807A894(Entity* this) {
s32 x;
s32 y;
switch (this->direction) {
case DirectionNorth:
y = -8;
x = 0;
break;
case DirectionSouth:
y = 5; // why??? ._.
x = 0;
break;
case DirectionEast:
y = 0;
x = 8;
break;
case DirectionWest:
y = 0;
x = -8;
break;
default:
y = 0;
x = 0;
break;
}
return GetRelativeCollisionTile(this, x, y);
}
void nullsub_505(void) {
}
@@ -1599,17 +1723,160 @@ void sub_0807AABC(Entity* this) {
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807AAF8.inc", void sub_0807AAF8(Entity* a, u32 b))
void sub_0807AAF8(Entity* this, u32 tilePos) {
u32 tmp;
u32 index;
if (this->z.HALF.HI == 0) {
tilePos |= this->collisionLayer << 0x1e;
for (index = 0; index < 0xf; index++) {
if (gPlayerState.path_memory[index] == tilePos) {
break;
}
tmp = gPlayerState.path_memory[index];
gPlayerState.path_memory[index] = tilePos;
tilePos = tmp;
}
gPlayerState.path_memory[index] = tilePos;
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807AB44.inc", void sub_0807AB44())
void sub_0807AB44(Entity* this, s32 xOffset, s32 yOffset) {
Entity* object;
const u16* ptr =
sub_0806FC50(GetTileType(COORD_TO_TILE_OFFSET(this, -xOffset, -yOffset), this->collisionLayer), 0xb);
if (ptr != NULL) {
if (ptr[3] == 0x76) {
object = CreateObject(OBJECT_2A, 1, 0);
if (object != NULL) {
PositionRelative(this, object, xOffset << 0x10, yOffset << 0x10);
sub_08004168(object);
sub_0807B7D8(ptr[3], COORD_TO_TILE(object), object->collisionLayer);
}
} else {
object = CreateObject(OBJECT_2A, 2, 0);
if (object != NULL) {
PositionRelative(this, object, xOffset << 0x10, yOffset << 0x10);
object->child = (Entity*)ptr;
SetTile(0x404f, COORD_TO_TILE(object), object->collisionLayer);
}
}
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807AC54.inc", u32 sub_0807AC54(Entity* a))
bool32 sub_0807AC54(Entity* this) {
if (gPlayerState.field_0x11 == 0) {
return FALSE;
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807ACCC.inc", void sub_0807ACCC(Entity* a))
switch (gPlayerState.floor_type) {
case SURFACE_LADDER:
this->x.HALF.HI = (this->x.HALF.HI & 0xfff0) | 8;
// fallthrough
case SURFACE_CLIMB_WALL:
this->action = 0x1d;
this->subAction = 0;
this->y.HALF.LO = 0;
gPlayerState.animation = 0x2cf;
return TRUE;
case SURFACE_AUTO_LADDER:
this->x.HALF.HI = (this->x.HALF.HI & 0xfff0) | 8;
// fallthrough
case SURFACE_2C:
this->action = 0x1d;
this->subAction = 1;
this->y.HALF.LO = 0;
return TRUE;
default:
return FALSE;
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807ADB8.inc", void sub_0807ADB8())
void sub_0807ACCC(Entity* this) {
s32 speed;
this->spritePriority.b1 = 0;
this->knockbackDuration = 0;
if (GetInventoryValue(ITEM_SWIM_BUTTERFLY) == 1) {
speed = 0x100;
} else {
speed = 0xc0;
}
if (speed > *(s16*)&this->speed) {
this->speed = speed;
this->direction = gPlayerState.field_0xd;
if ((gPlayerState.swim_state & 0xf) != 1) {
return;
}
} else {
this->speed -= 4;
}
if (gPlayerState.field_0x82[7] == 0) {
if (!sub_0807ADB8(this)) {
sub_0807AE20(this);
}
} else {
gPlayerState.field_0x82[7]--;
if (gPlayerState.field_0x82[7] != 0) {
sub_0807ADB8(this);
} else {
gPlayerState.swim_state &= 0x7f;
this->spritePriority.b0 = 4;
SoundReq(SFX_163);
}
}
if ((gPlayerState.swim_state & 0x80) != 0) {
this->collisionFlags |= 4;
this->spritePriority.b0 = 6;
} else {
this->collisionFlags &= 0xfb;
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807AE20.inc", void sub_0807AE20(Entity* e))
bool32 sub_0807ADB8(Entity* this) {
u8 tmp;
if ((gPlayerState.field_0x92 & 0x10) != 0) {
gPlayerState.swim_state ^= 0x80;
tmp = (gPlayerState.swim_state & 0x80);
if (tmp != 0) {
gPlayerState.field_0x82[7] = 0x78;
} else {
this->spritePriority.b0 = 4;
gPlayerState.field_0x82[7] = tmp;
}
SoundReq(SFX_163);
return TRUE;
} else {
return FALSE;
}
}
void sub_0807AE20(Entity* this) {
if ((((this->action != 0x17) || (gPlayerState.field_0xa == 0)) && (gRoomControls.reload_flags == 0)) &&
((gPlayerState.field_0x92 & 8) != 0)) {
if (GetInventoryValue(ITEM_SWIM_BUTTERFLY) == 1) {
this->speed = 0x1c0;
} else {
this->speed = 0x180;
}
sub_08079520(this);
SoundReq(SFX_162);
}
if (sub_080793E4(0x10)) {
this->iframes = 0x14;
this->knockbackDuration = 4;
this->knockbackDirection = this->animationState << 2 ^ 0x10;
ModHealth(-2);
SoundReq(SFX_PLY_VO6);
}
if ((this->direction & 0x80) != 0) {
if ((gRoomTransition.frameCount & 0xf) == 0) {
CreateRandomWaterTrace(this, 4);
}
} else {
if ((gRoomTransition.frameCount & 7) == 0) {
CreateWaterTrace(this);
}
}
}
void UpdatePlayerSkills(void) {
gPlayerState.skills = SKILL_NONE;
@@ -1860,15 +2127,121 @@ bool32 sub_0807B464(u32 param_1, u32 param_2) {
return sub_080B1AE0(param_1, param_2) == 0x56;
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B480.inc", void sub_0807B480())
void sub_0807B480(u32 tilePos, u32 param_2) {
u32 tmp1;
u16 tmp2;
u16 tmp3;
u16 tileType;
const u16* ptr;
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B55C.inc", void sub_0807B55C())
if (sub_0807B464(tilePos, 2)) {
tmp1 = sub_0807B464(tilePos - 0x40, 2);
tmp1 |= sub_0807B464(tilePos + 1, 2) << 1;
tmp1 |= sub_0807B464(tilePos + 0x40, 2) << 2;
tmp1 |= sub_0807B464(tilePos - 1, 2) << 3;
tmp1 |= sub_0807B464(tilePos + 0x41, 1) << 1;
tmp1 |= sub_0807B464(tilePos + 0x3f, 1) << 3;
if (GetTileType(tilePos + 0x40, 2) != 0) {
tmp1 |= sub_0807B464(tilePos + 0x80, 1) << 2;
}
tmp2 = gUnk_0811C2CC[tmp1];
tileType = GetTileType(tilePos, 2);
ptr = gUnk_0811C2EC;
tmp3 = 0;
for (; *ptr != 0; ptr = ptr + 3) {
if (tileType == ptr[0]) {
tmp3 = ptr[1];
break;
}
}
tmp3 = tmp3 & ~(1 << (param_2));
for (ptr = gUnk_0811C2EC; *ptr != 0; ptr = ptr + 3) {
if ((tmp3 == ptr[1]) && (tmp1 == ptr[2])) {
tmp2 = ptr[0];
break;
}
}
SetTileType(tmp2, tilePos, 2);
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B5B0.inc", void sub_0807B5B0())
void sub_0807B55C(u32 param_1, u32 param_2, u16* param_3) {
u32 tmp;
if (sub_0807B464(param_1, param_2)) {
tmp = sub_0807B464(param_1 - 0x40, param_2);
tmp |= sub_0807B464(param_1 + 1, param_2) << 1;
tmp |= sub_0807B464(param_1 + 0x40, param_2) << 2;
tmp |= sub_0807B464(param_1 - 1, param_2) << 3;
SetTileType(param_3[tmp], param_1, param_2);
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B600.inc", void sub_0807B600())
bool32 sub_0807B5B0(Entity* this) {
return sub_0807B600(COORD_TO_TILE_OFFSET(this, -gUnk_0811C456[(this->animationState & 6)],
-gUnk_0811C456[(this->animationState & 6) + 1]));
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B778.inc", void sub_0807B778(u32 a, u32 b))
u32 sub_0807B600(u32 param_1) {
u32 tileType;
u32 tile;
tile = param_1 - 0x40;
if (sub_080B1AE0(param_1, 1) != 0x56) {
return FALSE;
} else {
tileType = GetTileType(param_1, 1);
if (tileType == 0x26a) {
sub_0807B820(param_1);
} else if (tileType == 0x267) {
sub_0807B820(param_1 + 0x40);
} else if (tileType == 0x27a) {
sub_0807B8A8(param_1);
} else if (tileType == 0x277) {
sub_0807B8A8(param_1 + 0x40);
} else if (tileType == 0x28a) {
sub_0807B930(param_1);
} else if (tileType == 0x287) {
sub_0807B930(param_1 + 0x40);
} else {
if (GetTileType(param_1, 2) != 0) {
SetTileType(0x2f2, param_1, 1);
if (sub_080B1B44(tile, 1) == 3) {
SetTileType(0x2f4, tile, 1);
}
if (sub_080B1B44(param_1 + 0x40, 1) == 3) {
SetTileType(0x2f4, param_1, 1);
}
} else {
SetTileType(0x2f4, param_1, 1);
}
if (sub_0807B464(tile, 2)) {
SetTileType(0, tile, 2);
if (GetTileType(tile, 1) == 0x2f2) {
SetTileType(0x2f4, tile, 1);
}
sub_0807B55C(param_1 + 1, 1, (u16*)&gUnk_0811C2AC);
sub_0807B55C(param_1 - 1, 1, (u16*)&gUnk_0811C2AC);
sub_0807B55C(tile, 1, (u16*)&gUnk_0811C2AC);
}
sub_0807B480(tile + 1, 3);
sub_0807B480(tile - 1, 1);
sub_0807B480(tile + 0x40, 0);
sub_0807B480(tile - 0x40, 2);
}
return TRUE;
}
}
void sub_0807B778(u32 position, u32 layer) {
u32 tmp;
if (sub_080B1AE0(position, layer) == 0xd) {
tmp = sub_0807B434(position - 0x40, layer);
tmp |= sub_0807B434(position + 1, layer) << 1;
tmp |= sub_0807B434(position + 0x40, layer) << 2;
tmp |= sub_0807B434(position - 1, layer) << 3;
SetTileType(gUnk_0811C466[tmp], position, layer);
}
}
void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) {
if (param_1 == 53) {
@@ -2048,7 +2421,39 @@ void sub_0807BC84(void) {
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BD14.inc", bool32 sub_0807BD14(Entity* a, u32 b))
bool32 sub_0807BD14(Entity* this, u32 scrollDirection) {
u32 room = sub_0807BEEC(this->x.HALF.HI, this->y.HALF.HI, scrollDirection);
if (room != 0xff) {
gRoomControls.unk3 = 2;
gRoomControls.unk4 = 0;
gRoomControls.reload_flags = 1;
gRoomControls.room = room;
gRoomControls.scroll_direction = scrollDirection;
gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
if (gArea.unk_0c_0 != 0) {
switch (scrollDirection) {
case 0:
gArea.pCurrentRoomInfo->map_y -= gArea.pCurrentRoomInfo->pixel_height;
break;
case 1:
gArea.pCurrentRoomInfo->map_x = gArea.pCurrentRoomInfo->map_x + gArea.pCurrentRoomInfo->pixel_width;
break;
case 2:
gArea.pCurrentRoomInfo->map_y =
gArea.pCurrentRoomInfo->map_y + gArea.pCurrentRoomInfo->pixel_height;
break;
case 3:
gArea.pCurrentRoomInfo->map_x = gArea.pCurrentRoomInfo->map_x - gArea.pCurrentRoomInfo->pixel_width;
break;
}
}
gPlayerEntity.updatePriority = 6;
SetInitializationPriority();
return TRUE;
} else {
return FALSE;
}
}
u32 sub_0807BDB8(Entity* this, u32 param_2) {
u32 result = 0xff;
+6 -6
View File
@@ -92,12 +92,12 @@ static const SaveFile gDemoSave = {
.itemButtons = { ITEM_SHIELD, ITEM_SMITH_SWORD },
.rupees = 5,
},
.fillerD0 = {
[34] = 5,
[37] = 4,
[47] = 6,
[51] = 0x40,
[56] = 0x40,
.inventory = {
[0] = 5,
[3] = 4,
[13] = 6,
[17] = 0x40,
[22] = 0x40,
},
.flags = {
[FLAG_BYTE(FLAG_BANK_G, START)] = FLAG_X(START) | FLAG_X(EZERO_1ST) | FLAG_X(TABIDACHI),