Merge pull request #491 from octorock/patch

This commit is contained in:
notyourav
2022-04-13 13:31:48 -07:00
committed by GitHub
47 changed files with 540 additions and 1512 deletions
@@ -1,63 +0,0 @@
.syntax unified
push {r4, r5, lr}
ldr r4, _0801A538 @ =gPlayerState
ldr r0, [r4, #0x30]
movs r5, #0x80
ands r0, r5
cmp r0, #0
beq _0801A544
movs r0, #0x45
bl GetInventoryValue
cmp r0, #1
bne _0801A564
ldrb r1, [r4, #0xd]
adds r0, r5, #0
ands r0, r1
cmp r0, #0
bne _0801A564
ldr r2, _0801A53C @ =gPlayerEntity
ldrb r0, [r2, #0x15]
cmp r1, r0
bne _0801A564
ldrb r0, [r2, #0x15]
adds r0, #4
movs r1, #0x18
ands r0, r1
ldr r1, _0801A540 @ =gUnk_080B44A0
lsrs r0, r0, #2
adds r0, r0, r1
ldrh r1, [r0]
ldrh r0, [r2, #0x2a]
b _0801A55E
.align 2, 0
_0801A538: .4byte gPlayerState
_0801A53C: .4byte gPlayerEntity
_0801A540: .4byte gUnk_080B44A0
_0801A544:
adds r0, r4, #0
adds r0, #0x35
ldrb r0, [r0]
ldrb r1, [r4, #0xd]
orrs r0, r1
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _0801A564
ldr r0, _0801A568 @ =gPlayerEntity
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #1
_0801A55E:
ands r0, r1
cmp r0, #0
bne _0801A56C
_0801A564:
movs r0, #0
b _0801A56E
.align 2, 0
_0801A568: .4byte gPlayerEntity
_0801A56C:
movs r0, #1
_0801A56E:
pop {r4, r5, pc}
.syntax divided
-28
View File
@@ -1,28 +0,0 @@
.syntax unified
push {r4, lr}
lsrs r4, r1, #3
lsls r4, r4, #4
lsrs r3, r0, #3
adds r4, r4, r3
lsls r4, r4, #5
ldr r3, _0801DF58 @ =gUnk_0201AEE0
adds r4, r4, r3
movs r3, #7
ands r1, r3
lsls r1, r1, #2
adds r4, r4, r1
ands r0, r3
lsls r0, r0, #2
lsls r2, r0
ldr r1, _0801DF5C @ =gUnk_080C9460
adds r0, r0, r1
ldr r1, [r4]
ldr r0, [r0]
ands r1, r0
orrs r1, r2
str r1, [r4]
pop {r4, pc}
.align 2, 0
_0801DF58: .4byte gUnk_0201AEE0
_0801DF5C: .4byte gUnk_080C9460
.syntax divided
-51
View File
@@ -1,51 +0,0 @@
.syntax unified
push {r4, lr}
adds r4, r0, #0
bl sub_0801E82C
adds r0, r4, #0
subs r0, #0x65
cmp r0, #0x10
bhi _0801E790
adds r0, r4, #0
bl sub_0801E8B0
adds r1, r0, #0
cmp r1, #0
bge _0801E76E
movs r1, #0
ldr r0, _0801E794 @ =gSave
movs r3, #0x8c
lsls r3, r3, #1
adds r2, r0, r3
ldrb r0, [r2]
cmp r0, #0
beq _0801E76E
_0801E764:
adds r1, #1
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, #0
bne _0801E764
_0801E76E:
cmp r1, #0x11
bhi _0801E790
ldr r2, _0801E794 @ =gSave
movs r3, #0x8c
lsls r3, r3, #1
adds r0, r2, r3
adds r0, r1, r0
strb r4, [r0]
adds r3, #0x13
adds r0, r2, r3
adds r1, r1, r0
ldrb r0, [r1]
adds r0, #1
cmp r0, #0x63
ble _0801E78E
movs r0, #0x63
_0801E78E:
strb r0, [r1]
_0801E790:
pop {r4, pc}
.align 2, 0
_0801E794: .4byte gSave
.syntax divided
-57
View File
@@ -1,57 +0,0 @@
.syntax unified
push {r4, lr}
ldr r0, _080538B4 @ =gFadeControl
ldrb r0, [r0]
cmp r0, #0
bne _080538F8
ldr r1, _080538B8 @ =gMenu
ldrh r0, [r1, #8]
subs r0, #1
strh r0, [r1, #8]
ldrh r0, [r1, #0xa]
adds r4, r1, #0
cmp r0, #0
beq _080538BC
subs r0, #1
strh r0, [r4, #0xa]
b _080538E4
.align 2, 0
_080538B4: .4byte gFadeControl
_080538B8: .4byte gMenu
_080538BC:
ldr r0, _080538FC @ =gRoomTransition
ldr r0, [r0]
movs r1, #1
ands r0, r1
cmp r0, #0
bne _080538E4
ldrb r1, [r4, #7]
cmp r1, #0xf
bhi _080538E4
adds r1, #1
strb r1, [r4, #7]
lsls r1, r1, #0x18
ldr r3, _08053900 @ =gScreen
lsrs r2, r1, #0x10
lsrs r1, r1, #0x19
movs r0, #0x10
subs r0, r0, r1
orrs r2, r0
adds r3, #0x68
strh r2, [r3]
_080538E4:
ldrh r0, [r4, #8]
cmp r0, #0
bne _080538F8
ldrb r0, [r4, #6]
adds r0, #1
strb r0, [r4, #6]
movs r0, #5
movs r1, #8
bl SetFade
_080538F8:
pop {r4, pc}
.align 2, 0
_080538FC: .4byte gRoomTransition
_08053900: .4byte gScreen
.syntax divided
-57
View File
@@ -1,57 +0,0 @@
.syntax unified
push {r4, lr}
ldr r0, _08053924 @ =gFadeControl
ldrb r0, [r0]
cmp r0, #0
bne _08053968
ldr r1, _08053928 @ =gMenu
ldrh r0, [r1, #8]
subs r0, #1
strh r0, [r1, #8]
ldrh r0, [r1, #0xa]
adds r4, r1, #0
cmp r0, #0
beq _0805392C
subs r0, #1
strh r0, [r4, #0xa]
b _08053954
.align 2, 0
_08053924: .4byte gFadeControl
_08053928: .4byte gMenu
_0805392C:
ldr r0, _0805396C @ =gRoomTransition
ldr r0, [r0]
movs r1, #1
ands r0, r1
cmp r0, #0
bne _08053954
ldrb r1, [r4, #7]
cmp r1, #0xf
bhi _08053954
adds r1, #1
strb r1, [r4, #7]
lsls r1, r1, #0x18
ldr r3, _08053970 @ =gScreen
lsrs r2, r1, #0x10
lsrs r1, r1, #0x19
movs r0, #0x10
subs r0, r0, r1
orrs r2, r0
adds r3, #0x68
strh r2, [r3]
_08053954:
ldrh r0, [r4, #8]
cmp r0, #0
bne _08053968
ldrb r0, [r4, #6]
adds r0, #1
strb r0, [r4, #6]
movs r0, #5
movs r1, #1
bl SetFade
_08053968:
pop {r4, pc}
.align 2, 0
_0805396C: .4byte gRoomTransition
_08053970: .4byte gScreen
.syntax divided
-47
View File
@@ -1,47 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
ldr r6, _08053D20 @ =gMenu
ldrb r4, [r6, #3]
lsls r4, r4, #4
ldr r0, _08053D24 @ =gUnk_080FCF04
adds r4, r4, r0
adds r0, r4, #0
adds r0, #8
str r0, [r6, #0xc]
ldr r0, [r4]
bl LoadRoomEntityList
ldrb r0, [r4, #4]
ldrb r1, [r4, #5]
movs r2, #1
bl GetRoomProperty
bl LoadRoomEntityList
ldrb r0, [r4, #4]
ldrb r1, [r4, #5]
movs r2, #2
bl GetRoomProperty
bl LoadRoomEntityList
movs r5, #1
strb r5, [r6, #6]
ldr r2, _08053D28 @ =gScreen
ldrh r1, [r2]
ldr r0, _08053D2C @ =0x0000FEFF
ands r0, r1
strh r0, [r2]
ldr r0, _08053D30 @ =gUpdateVisibleTiles
strb r5, [r0]
movs r0, #4
movs r1, #0x10
bl SetFade
ldrb r0, [r4, #5]
cmp r0, #0x1d
bne _08053D1E
strh r5, [r6, #0xa]
_08053D1E:
pop {r4, r5, r6, pc}
.align 2, 0
_08053D20: .4byte gMenu
_08053D24: .4byte gUnk_080FCF04
_08053D28: .4byte gScreen
_08053D2C: .4byte 0x0000FEFF
_08053D30: .4byte gUpdateVisibleTiles
.syntax divided
-40
View File
@@ -1,40 +0,0 @@
.syntax unified
push {r4, lr}
ldr r4, _080548DC @ =gUI
ldrb r1, [r4, #3]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #2
ldr r1, _080548E0 @ =gUnk_080FE320
adds r0, r0, r1
ldr r2, _080548E4 @ =gMenu
ldrb r1, [r0]
movs r3, #0
strb r1, [r2]
ldrb r1, [r0, #1]
strb r1, [r2, #3]
ldrb r1, [r4, #3]
strb r1, [r2, #4]
str r0, [r2, #0xc]
ldrb r0, [r2, #5]
adds r0, #1
strb r0, [r2, #5]
strb r3, [r2, #6]
movs r0, #0x96
lsls r0, r0, #1
strh r0, [r2, #8]
movs r0, #0
bl DispReset
ldrb r0, [r4, #3]
movs r1, #1
bl sub_08054974
bl sub_0806F364
movs r0, #0xff
bl ClearRoomFlag
bl sub_080548E8
pop {r4, pc}
.align 2, 0
_080548DC: .4byte gUI
_080548E0: .4byte gUnk_080FE320
_080548E4: .4byte gMenu
.syntax divided
-33
View File
@@ -1,33 +0,0 @@
.syntax unified
push {lr}
bl MessageInitialize
bl sub_0806F38C
ldr r1, _08054948 @ =gUnk_080C9CBC
ldr r0, _0805494C @ =gFuseInfo
ldrb r0, [r0, #3]
lsls r0, r0, #3
adds r0, r0, r1
ldrb r0, [r0, #7]
cmp r0, #0
beq _08054954
ldr r0, _08054950 @ =gUI
ldrb r1, [r0, #3]
movs r0, #0xa
bl MenuFadeIn
b _08054962
.align 2, 0
_08054948: .4byte gUnk_080C9CBC
_0805494C: .4byte gFuseInfo
_08054950: .4byte gUI
_08054954:
ldr r1, _08054964 @ =gUI
movs r0, #3
strb r0, [r1]
movs r0, #7
movs r1, #0x10
bl SetFade
_08054962:
pop {pc}
.align 2, 0
_08054964: .4byte gUI
.syntax divided
-70
View File
@@ -1,70 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r1, #0
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _080549B0 @ =gUnk_080FE320
adds r6, r1, r0
ldrb r0, [r6, #2]
ldrb r1, [r6, #3]
bl SetCurrentRoomPropertyList
ldr r4, _080549B4 @ =gRoomControls
ldrb r0, [r6, #2]
strb r0, [r4, #4]
ldrb r0, [r6, #3]
strb r0, [r4, #5]
bl LoadGfxGroups
ldrb r0, [r4, #4]
bl GetFlagBankOffset
ldr r1, _080549B8 @ =gArea
strh r0, [r1, #4]
cmp r5, #0
beq _080549BC
ldrb r0, [r6, #2]
ldrb r1, [r6, #3]
bl LoadAuxiliaryRoom
b _080549CE
.align 2, 0
_080549B0: .4byte gUnk_080FE320
_080549B4: .4byte gRoomControls
_080549B8: .4byte gArea
_080549BC:
ldrb r0, [r6, #2]
ldrb r1, [r6, #3]
bl sub_08052FF4
bl InitializeCamera
ldr r1, _08054A00 @ =gUpdateVisibleTiles
movs r0, #1
strb r0, [r1]
_080549CE:
ldr r2, _08054A04 @ =gScreen
ldrh r1, [r2]
ldr r0, _08054A08 @ =0x00001FFF
ands r0, r1
strh r0, [r2]
ldr r1, _08054A0C @ =gRoomControls
ldrh r0, [r6, #4]
ldrh r2, [r1, #6]
adds r0, r0, r2
strh r0, [r1, #0xa]
ldrh r0, [r6, #6]
ldrh r2, [r1, #8]
adds r0, r0, r2
strh r0, [r1, #0xc]
ldrb r0, [r6, #2]
cmp r0, #2
bne _080549F4
bl TryLoadPrologueHyruleTown
_080549F4:
ldr r0, _08054A10 @ =gUI
ldrb r0, [r0, #3]
bl sub_08018710
pop {r4, r5, r6, pc}
.align 2, 0
_08054A00: .4byte gUpdateVisibleTiles
_08054A04: .4byte gScreen
_08054A08: .4byte 0x00001FFF
_08054A0C: .4byte gRoomControls
_08054A10: .4byte gUI
.syntax divided
-22
View File
@@ -1,22 +0,0 @@
.syntax unified
push {lr}
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _08054A38 @ =gUnk_080FE320
adds r2, r1, r0
ldrb r0, [r2, #0x11]
cmp r0, #0xd
bhi _08054A34
ldr r1, _08054A3C @ =gLocalFlagBanks
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
ldrh r1, [r2, #0x12]
bl SetLocalFlagByBank
_08054A34:
pop {pc}
.align 2, 0
_08054A38: .4byte gUnk_080FE320
_08054A3C: .4byte gLocalFlagBanks
.syntax divided
-69
View File
@@ -1,69 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r4, r1, #0
bl Random
movs r1, #0x1f
ands r0, r1
adds r0, #0x3c
adds r1, r5, #0
adds r1, #0x68
movs r3, #0
strb r0, [r1]
adds r0, r5, #0
adds r0, #0x69
movs r1, #0
ldrsb r1, [r0, r1]
lsls r1, r1, #2
ldr r0, _0806999C @ =gUnk_08111C5C
adds r1, r1, r0
ldr r2, _080699A0 @ =gRoomControls
ldrh r0, [r1]
ldrh r6, [r2, #6]
adds r0, r0, r6
strh r0, [r4, #0x1e]
ldrh r0, [r1, #2]
ldrh r2, [r2, #8]
adds r0, r0, r2
strh r0, [r4, #0x22]
movs r0, #8
strb r0, [r4, #0x19]
ldr r0, [r4, #8]
movs r1, #2
orrs r0, r1
str r0, [r4, #8]
str r3, [r4, #0x14]
movs r1, #0x1e
ldrsh r0, [r4, r1]
movs r2, #0x2e
ldrsh r1, [r5, r2]
subs r0, r0, r1
movs r3, #0x22
ldrsh r1, [r4, r3]
movs r6, #0x32
ldrsh r2, [r5, r6]
subs r1, r1, r2
bl sub_080045DA
strb r0, [r5, #0x15]
ldrb r2, [r5, #0x14]
movs r1, #0x80
ands r1, r2
ldr r2, _080699A4 @ =gUnk_08111C74
lsls r0, r0, #0x18
lsrs r0, r0, #0x1c
adds r0, r0, r2
ldrb r0, [r0]
orrs r1, r0
strb r1, [r5, #0x14]
ldr r2, _080699A8 @ =gActiveScriptInfo
ldrb r1, [r2, #7]
movs r0, #1
orrs r0, r1
strb r0, [r2, #7]
pop {r4, r5, r6, pc}
.align 2, 0
_0806999C: .4byte gUnk_08111C5C
_080699A0: .4byte gRoomControls
_080699A4: .4byte gUnk_08111C74
_080699A8: .4byte gActiveScriptInfo
.syntax divided
-69
View File
@@ -1,69 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r4, r1, #0
bl Random
movs r1, #0x1f
ands r0, r1
adds r0, #0x3c
adds r1, r5, #0
adds r1, #0x68
movs r3, #0
strb r0, [r1]
adds r0, r5, #0
adds r0, #0x69
movs r1, #0
ldrsb r1, [r0, r1]
lsls r1, r1, #2
ldr r0, _08069A2C @ =gUnk_08111C84
adds r1, r1, r0
ldr r2, _08069A30 @ =gRoomControls
ldrh r0, [r1]
ldrh r6, [r2, #6]
adds r0, r0, r6
strh r0, [r4, #0x1e]
ldrh r0, [r1, #2]
ldrh r2, [r2, #8]
adds r0, r0, r2
strh r0, [r4, #0x22]
movs r0, #8
strb r0, [r4, #0x19]
ldr r0, [r4, #8]
movs r1, #2
orrs r0, r1
str r0, [r4, #8]
str r3, [r4, #0x14]
movs r1, #0x1e
ldrsh r0, [r4, r1]
movs r2, #0x2e
ldrsh r1, [r5, r2]
subs r0, r0, r1
movs r3, #0x22
ldrsh r1, [r4, r3]
movs r6, #0x32
ldrsh r2, [r5, r6]
subs r1, r1, r2
bl sub_080045DA
strb r0, [r5, #0x15]
ldrb r2, [r5, #0x14]
movs r1, #0x80
ands r1, r2
ldr r2, _08069A34 @ =gUnk_08111C8C
lsls r0, r0, #0x18
lsrs r0, r0, #0x1c
adds r0, r0, r2
ldrb r0, [r0]
orrs r1, r0
strb r1, [r5, #0x14]
ldr r2, _08069A38 @ =gActiveScriptInfo
ldrb r1, [r2, #7]
movs r0, #1
orrs r0, r1
strb r0, [r2, #7]
pop {r4, r5, r6, pc}
.align 2, 0
_08069A2C: .4byte gUnk_08111C84
_08069A30: .4byte gRoomControls
_08069A34: .4byte gUnk_08111C8C
_08069A38: .4byte gActiveScriptInfo
.syntax divided
@@ -1,59 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r6, r0, #0
ldr r4, [r6, #0x54]
ldrb r0, [r4, #0x15]
ldrb r3, [r6, #0x15]
subs r2, r0, r3
movs r1, #0xff
ands r2, r1
adds r0, r2, #0
adds r0, #8
ands r0, r1
cmp r0, #0x10
ble _080AC78A
cmp r2, #0x80
ble _080AC784
adds r0, r3, #0
subs r0, #8
b _080AC788
_080AC784:
adds r0, r3, #0
adds r0, #8
_080AC788:
strb r0, [r4, #0x15]
_080AC78A:
ldr r5, [r4, #0x54]
ldr r0, [r5, #0x54]
cmp r0, #0
bne _080AC79C
ldr r0, [r6, #0x50]
ldrb r0, [r0, #0x14]
movs r1, #0x80
eors r0, r1
b _080AC7BE
_080AC79C:
ldrb r0, [r5, #0x15]
ldrb r3, [r4, #0x15]
subs r2, r0, r3
movs r1, #0xff
ands r2, r1
adds r0, r2, #0
adds r0, #8
ands r0, r1
cmp r0, #0x10
ble _080AC7C0
cmp r2, #0x80
ble _080AC7BA
adds r0, r3, #0
subs r0, #8
b _080AC7BE
_080AC7BA:
adds r0, r3, #0
adds r0, #8
_080AC7BE:
strb r0, [r5, #0x15]
_080AC7C0:
pop {r4, r5, r6, pc}
.align 2, 0
.syntax divided
@@ -1,98 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r4, r0, #0
mov r8, r1
bl PlayerTryDropObject
cmp r0, #0
beq _080765D4
ldr r5, _0807655C @ =gPlayerState
adds r1, r5, #0
adds r1, #0xa8
movs r0, #4
strb r0, [r1]
ldrb r1, [r5, #2]
movs r0, #0x80
ands r0, r1
cmp r0, #0
bne _080765D4
ldrb r0, [r5, #0x1f]
cmp r0, #0
bne _080765D4
ldr r6, _08076560 @ =gPlayerEntity
adds r0, r6, #0
adds r0, #0x42
ldrb r7, [r0]
cmp r7, #0
beq _08076564
adds r0, r4, #0
mov r1, r8
bl PlayerCancelHoldItem
b _080765D4
.align 2, 0
_0807655C: .4byte gPlayerState
_08076560: .4byte gPlayerEntity
_08076564:
adds r0, r5, #0
adds r0, #0x92
ldrh r1, [r0]
ldr r0, _080765B0 @ =0x00008018
ands r0, r1
cmp r0, #0
beq _080765D4
adds r0, r6, #0
bl sub_0806F948
movs r0, #5
strb r0, [r5, #5]
ldr r1, [r4, #0x18]
movs r0, #2
strb r0, [r1, #0xd]
ldr r2, [r4, #0x18]
ldrb r1, [r6, #0x14]
movs r0, #0xe
ands r0, r1
lsls r0, r0, #2
strb r0, [r2, #0x15]
str r7, [r4, #0x18]
ldrb r0, [r4, #4]
adds r0, #1
strb r0, [r4, #4]
movs r0, #0xf
strb r0, [r4, #0xf]
ldr r0, [r5, #0x30]
movs r1, #8
ands r0, r1
cmp r0, #0
beq _080765B4
movs r1, #0x93
lsls r1, r1, #4
adds r0, r4, #0
bl sub_08077DF4
b _080765BE
.align 2, 0
_080765B0: .4byte 0x00008018
_080765B4:
movs r1, #0xd1
lsls r1, r1, #2
adds r0, r4, #0
bl sub_08077DF4
_080765BE:
ldr r2, _080765DC @ =gPlayerState
movs r1, #8
mov r0, r8
asrs r1, r0
ldrb r3, [r2, #0xa]
adds r0, r1, #0
orrs r0, r3
strb r0, [r2, #0xa]
ldrb r0, [r2, #0xb]
orrs r1, r0
strb r1, [r2, #0xb]
_080765D4:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080765DC: .4byte gPlayerState
.syntax divided
@@ -1,24 +0,0 @@
.syntax unified
push {lr}
movs r1, #0
ldr r0, _080A3B6C @ =gSave
ldr r3, _080A3B70 @ =0x0000012B
adds r2, r0, r3
ldrb r0, [r2]
cmp r0, #0
beq _080A3B66
_080A3B58:
adds r1, #1
cmp r1, #0x12
bhi _080A3B66
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, #0
bne _080A3B58
_080A3B66:
adds r0, r1, #0
pop {pc}
.align 2, 0
_080A3B6C: .4byte gSave
_080A3B70: .4byte 0x0000012B
.syntax divided
@@ -1,54 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
adds r0, #0x5b
ldrb r1, [r0]
movs r0, #4
ands r0, r1
cmp r0, #0
beq _08063006
movs r6, #1
movs r5, #0
b _0806300A
_08063006:
movs r6, #0
movs r5, #1
_0806300A:
adds r0, r4, #0
adds r0, #0x5b
ldrb r1, [r0]
movs r0, #8
ands r0, r1
movs r7, #0x8e
lsls r7, r7, #1
cmp r0, #0
beq _0806301E
movs r7, #0x16
_0806301E:
adds r0, r4, #0
adds r0, #0x5a
ldrb r2, [r0]
movs r0, #0x81
rsbs r0, r0, #0
ands r2, r0
subs r2, #1
adds r0, r4, #0
adds r1, r6, #0
bl SetExtraSpriteFrame
ldrb r2, [r4, #0x1e]
adds r0, r4, #0
adds r1, r5, #0
bl SetExtraSpriteFrame
adds r0, r4, #0
adds r1, r5, #0
adds r2, r7, #0
bl sub_0806FF10
adds r0, r4, #0
adds r1, r5, #0
adds r2, r6, #0
bl SetSpriteSubEntryOffsetData1
adds r0, r4, #0
bl sub_0807000C
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,88 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
adds r6, r1, #0
mov r8, r2
movs r1, #0x2e
ldrsh r0, [r5, r1]
adds r0, r0, r6
ldr r2, _0807A288 @ =gRoomControls
ldrh r1, [r2, #6]
subs r1, r0, r1
lsrs r4, r1, #4
movs r3, #0x3f
ands r4, r3
movs r7, #0x32
ldrsh r1, [r5, r7]
add r1, r8
ldrh r2, [r2, #8]
subs r2, r1, r2
asrs r2, r2, #4
ands r2, r3
lsls r2, r2, #6
orrs r4, r2
ldr r2, _0807A28C @ =gPlayerEntity
adds r2, #0x38
ldrb r2, [r2]
bl GetTileTypeByPos
adds r2, r0, #0
ldr r1, _0807A290 @ =gPlayerState
ldrh r0, [r1, #0x24]
cmp r2, r0
beq _0807A23A
adds r3, r1, #0
adds r3, #0x37
movs r0, #0
strb r0, [r3]
ldrh r7, [r1, #0x24]
cmp r2, r7
bne _0807A242
_0807A23A:
adds r3, r1, #0
ldrh r0, [r3, #0x22]
cmp r4, r0
beq _0807A24E
_0807A242:
ldr r0, _0807A290 @ =gPlayerState
movs r1, #0
strh r4, [r0, #0x22]
strh r2, [r0, #0x24]
strb r1, [r0, #0x11]
adds r3, r0, #0
_0807A24E:
adds r2, r3, #0
ldrb r1, [r2, #0x11]
adds r0, r1, #0
cmp r0, #0xff
beq _0807A25C
adds r0, r1, #1
strb r0, [r2, #0x11]
_0807A25C:
adds r2, #0x37
ldrb r1, [r2]
adds r0, r1, #0
cmp r0, #0xff
beq _0807A26A
adds r0, r1, #1
strb r0, [r2]
_0807A26A:
ldrb r0, [r3, #0x12]
strb r0, [r3, #0x13]
adds r0, r5, #0
adds r1, r6, #0
mov r2, r8
bl GetRelativeCollisionTile
adds r2, r0, #0
ldr r1, _0807A294 @ =gUnk_08007CAC
bl sub_08007DD6
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0807A288: .4byte gRoomControls
_0807A28C: .4byte gPlayerEntity
_0807A290: .4byte gPlayerState
_0807A294: .4byte gUnk_08007CAC
.syntax divided
@@ -1,238 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
ldr r1, _080782D8 @ =gPlayerState
adds r2, r1, #0
adds r2, #0xa8
ldrb r0, [r2]
adds r4, r1, #0
cmp r0, #0
bne _080782DC
adds r0, r4, #0
adds r0, #0xa9
ldrb r0, [r0]
b _080782DE
.align 2, 0
_080782D8: .4byte gPlayerState
_080782DC:
ldrb r0, [r2]
_080782DE:
subs r0, #2
cmp r0, #0x14
bhi _08078348
lsls r0, r0, #2
ldr r1, _080782F0 @ =_080782F4
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080782F0: .4byte _080782F4
_080782F4: @ jump table
.4byte _080784AC @ case 0
.4byte _080784AC @ case 1
.4byte _08078348 @ case 2
.4byte _08078348 @ case 3
.4byte _08078348 @ case 4
.4byte _08078348 @ case 5
.4byte _08078348 @ case 6
.4byte _08078348 @ case 7
.4byte _08078348 @ case 8
.4byte _08078348 @ case 9
.4byte _080784AC @ case 10
.4byte _08078348 @ case 11
.4byte _08078348 @ case 12
.4byte _08078348 @ case 13
.4byte _08078348 @ case 14
.4byte _08078348 @ case 15
.4byte _080784AC @ case 16
.4byte _08078348 @ case 17
.4byte _08078348 @ case 18
.4byte _080784AC @ case 19
.4byte _080784AC @ case 20
_08078348:
adds r0, r4, #0
adds r0, #0x27
adds r2, r4, #0
adds r2, #0x26
ldrb r1, [r0]
ldrb r0, [r2]
orrs r0, r1
cmp r0, #0
beq _0807835C
b _080784AC
_0807835C:
ldrb r0, [r4, #0x12]
cmp r0, #1
bne _08078376
ldrb r0, [r4, #0x14]
cmp r0, #0
bne _0807836A
b _080784AC
_0807836A:
bl CanDispEzloMessage
cmp r0, #0
beq _08078374
b _080784C4
_08078374:
b _080784AC
_08078376:
ldr r0, [r4, #0x30]
movs r1, #0x80
lsls r1, r1, #7
ands r0, r1
cmp r0, #0
beq _08078384
b _080784AC
_08078384:
bl CanDispEzloMessage
cmp r0, #0
beq _0807838E
b _080784C4
_0807838E:
bl sub_080784E4
ldr r6, [r0, #8]
cmp r6, #0
bne _0807839A
b _080784AC
_0807839A:
ldrb r0, [r4, #5]
cmp r0, #0
beq _080783B6
cmp r0, #4
beq _080783A6
b _080784AC
_080783A6:
ldr r0, _08078400 @ =gPlayerEntity
ldr r0, [r0, #0x74]
ldr r0, [r0, #0x54]
ldrh r1, [r0, #8]
ldr r0, _08078404 @ =0x00000206
cmp r1, r0
beq _080783B6
b _080784AC
_080783B6:
ldr r2, _08078408 @ =gPlayerState
adds r0, r2, #0
adds r0, #0x92
ldrh r1, [r0]
movs r0, #0x80
lsls r0, r0, #5
ands r0, r1
adds r4, r2, #0
cmp r0, #0
beq _0807842C
ldr r5, _0807840C @ =gUnk_03003DF0
ldr r0, [r5, #4]
ldrb r0, [r0, #3]
subs r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x63
bhi _0807842C
movs r0, #0
bl sub_0801E738
ldr r0, _08078410 @ =gSave
ldr r1, _08078414 @ =0x0000012B
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0
beq _08078418
ldr r1, [r5, #4]
ldrb r0, [r1, #3]
strb r0, [r5, #2]
ldr r0, [r1, #8]
adds r0, #0x39
movs r1, #2
strb r1, [r0]
movs r0, #7
strb r0, [r4, #0xc]
b _08078420
.align 2, 0
_08078400: .4byte gPlayerEntity
_08078404: .4byte 0x00000206
_08078408: .4byte gPlayerState
_0807840C: .4byte gUnk_03003DF0
_08078410: .4byte gSave
_08078414: .4byte 0x0000012B
_08078418:
ldr r0, _08078428 @ =0x00000B65
movs r1, #0
bl CreateEzloHint
_08078420:
movs r0, #0x13
bl ForceSetPlayerState
b _080784C4
.align 2, 0
_08078428: .4byte 0x00000B65
_0807842C:
adds r0, r4, #0
adds r0, #0x92
ldrh r1, [r0]
movs r0, #0x88
ands r0, r1
cmp r0, #0
beq _080784AC
ldr r0, _08078450 @ =gUnk_03003DF0
ldr r0, [r0, #4]
ldrb r0, [r0, #1]
cmp r0, #0xa
bhi _080784C4
lsls r0, r0, #2
ldr r1, _08078454 @ =_08078458
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08078450: .4byte gUnk_03003DF0
_08078454: .4byte _08078458
_08078458: @ jump table
.4byte _080784C4 @ case 0
.4byte _08078484 @ case 1
.4byte _080784C4 @ case 2
.4byte _0807848E @ case 3
.4byte _080784C4 @ case 4
.4byte _0807848E @ case 5
.4byte _08078484 @ case 6
.4byte _0807848E @ case 7
.4byte _080784A4 @ case 8
.4byte _08078484 @ case 9
.4byte _08078484 @ case 10
_08078484:
movs r0, #7
strb r0, [r4, #0xc]
movs r0, #0x13
bl ForceSetPlayerState
_0807848E:
adds r1, r6, #0
adds r1, #0x39
movs r2, #0
movs r0, #1
strb r0, [r1]
ldr r0, _080784A0 @ =gUnk_03003DF0
strb r2, [r0, #2]
b _080784C4
.align 2, 0
_080784A0: .4byte gUnk_03003DF0
_080784A4:
ldr r2, _080784B0 @ =gRoomVars
ldrb r0, [r2, #6]
cmp r0, #0
beq _080784B4
_080784AC:
movs r0, #0
b _080784C6
.align 2, 0
_080784B0: .4byte gRoomVars
_080784B4:
adds r1, r6, #0
adds r1, #0x39
movs r0, #1
strb r0, [r1]
ldrb r0, [r6, #0xa]
strb r0, [r2, #6]
ldrb r0, [r6, #0xb]
strb r0, [r2, #7]
_080784C4:
movs r0, #1
_080784C6:
pop {r4, r5, r6, pc}
.syntax divided
@@ -1,57 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r5, r0, #0
ldr r0, _080793FC @ =gPlayerState
adds r0, #0x26
ldrb r0, [r0]
cmp r0, #0
bne _08079408
ldr r1, _08079400 @ =gUnk_0811C0F8
ldr r0, _08079404 @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r0, r0, #1
b _08079410
.align 2, 0
_080793FC: .4byte gPlayerState
_08079400: .4byte gUnk_0811C0F8
_08079404: .4byte gPlayerEntity
_08079408:
ldr r1, _08079448 @ =gUnk_0811C0F8
ldr r0, _0807944C @ =gPlayerEntity
ldrb r0, [r0, #0x15]
lsrs r0, r0, #2
_08079410:
lsls r0, r0, #1
adds r0, r0, r1
ldrh r4, [r0]
bl sub_08079778
cmp r0, #0
beq _08079454
ldr r0, _08079450 @ =gPlayerState
adds r0, #0x90
ldrh r0, [r0]
ands r0, r4
cmp r0, #0
beq _08079454
cmp r5, #0
beq _08079442
bl sub_0807A500
ldr r1, _0807944C @ =gPlayerEntity
adds r1, #0x38
ldrb r1, [r1]
adds r2, r5, #0
bl sub_080B1BA4
cmp r0, #0
beq _08079454
_08079442:
movs r0, #1
b _08079456
.align 2, 0
_08079448: .4byte gUnk_0811C0F8
_0807944C: .4byte gPlayerEntity
_08079450: .4byte gPlayerState
_08079454:
movs r0, #0
_08079456:
pop {r4, r5, pc}
.syntax divided
@@ -1,38 +0,0 @@
.syntax unified
push {lr}
ldr r0, _08079790 @ =gPlayerState
adds r0, #0x26
ldrb r0, [r0]
cmp r0, #0
bne _0807979C
ldr r2, _08079794 @ =gUnk_0811C108
ldr r1, _08079798 @ =gPlayerEntity
ldrb r0, [r1, #0x14]
lsrs r0, r0, #1
b _080797A4
.align 2, 0
_08079790: .4byte gPlayerState
_08079794: .4byte gUnk_0811C108
_08079798: .4byte gPlayerEntity
_0807979C:
ldr r2, _080797BC @ =gUnk_0811C108
ldr r1, _080797C0 @ =gPlayerEntity
ldrb r0, [r1, #0x15]
lsrs r0, r0, #2
_080797A4:
lsls r0, r0, #1
adds r0, r0, r2
ldrh r2, [r0]
movs r3, #0
ldrh r0, [r1, #0x2a]
ands r0, r2
cmp r2, r0
bne _080797B6
movs r3, #1
_080797B6:
adds r0, r3, #0
pop {pc}
.align 2, 0
_080797BC: .4byte gUnk_0811C108
_080797C0: .4byte gPlayerEntity
.syntax divided
@@ -1,22 +0,0 @@
.syntax unified
push {lr}
ldr r1, _080797E4 @ =gUnk_0811C110
ldr r2, _080797E8 @ =gPlayerEntity
ldrb r0, [r2, #0x15]
lsrs r0, r0, #3
lsls r0, r0, #1
adds r0, r0, r1
ldrh r1, [r0]
movs r3, #0
ldrh r0, [r2, #0x2a]
ands r0, r1
cmp r1, r0
bne _080797E0
movs r3, #1
_080797E0:
adds r0, r3, #0
pop {pc}
.align 2, 0
_080797E4: .4byte gUnk_0811C110
_080797E8: .4byte gPlayerEntity
.syntax divided
@@ -1,92 +0,0 @@
.syntax unified
push {r4, r5, lr}
ldr r2, _08079B60 @ =gPlayerEntity
ldrb r0, [r2, #0xc]
cmp r0, #0xa
beq _08079BD4
adds r0, r2, #0
adds r0, #0x45
ldrb r3, [r0]
cmp r3, #0
bne _08079BD4
ldr r4, _08079B64 @ =gPlayerState
ldr r1, [r4, #0x30]
ldr r0, _08079B68 @ =0xFEFFFFFF
ands r1, r0
str r1, [r4, #0x30]
adds r0, r2, #0
adds r0, #0x42
strb r3, [r0]
ldrb r0, [r4, #7]
cmp r0, #0
bne _08079BD4
adds r0, r4, #0
adds r0, #0x26
ldrb r0, [r0]
cmp r0, #0
beq _08079B6C
bl RespawnPlayer
b _08079BC0
.align 2, 0
_08079B60: .4byte gPlayerEntity
_08079B64: .4byte gPlayerState
_08079B68: .4byte 0xFEFFFFFF
_08079B6C:
ldrb r0, [r4, #0x14]
cmp r0, #0
bne _08079BC0
movs r3, #0x80
lsls r3, r3, #5
ands r3, r1
cmp r3, #0
bne _08079BC0
movs r5, #0x36
ldrsh r0, [r2, r5]
cmp r0, #0
bge _08079BA6
ldr r0, [r2, #0x20]
cmp r0, #0
ble _08079B8C
str r3, [r2, #0x20]
_08079B8C:
ldrb r1, [r4, #2]
movs r3, #0x41
adds r0, r3, #0
ands r0, r1
cmp r0, #0
bne _08079BD4
strb r3, [r4, #2]
movs r0, #0xff
strb r0, [r2, #0x15]
movs r0, #1
rsbs r0, r0, #0
strb r0, [r4, #0xd]
b _08079BD4
_08079BA6:
movs r0, #2
ands r1, r0
cmp r1, #0
bne _08079BC0
bl sub_08079D48
cmp r0, #0
bne _08079BC0
ldrb r0, [r4, #0xa]
movs r1, #0x10
orrs r0, r1
strb r0, [r4, #0xa]
b _08079BD4
_08079BC0:
ldr r2, _08079BD0 @ =gPlayerEntity
ldrb r1, [r2, #0x10]
movs r0, #0x7f
ands r0, r1
strb r0, [r2, #0x10]
movs r0, #0
b _08079BD6
.align 2, 0
_08079BD0: .4byte gPlayerEntity
_08079BD4:
movs r0, #1
_08079BD6:
pop {r4, r5, pc}
.syntax divided
@@ -1,73 +0,0 @@
.syntax unified
push {r4, lr}
adds r4, r0, #0
ldr r0, _0808085C @ =gRoomTransition
movs r1, #1
strb r1, [r0, #8]
adds r2, r0, #0
adds r2, #0xc
ldrh r1, [r4, #6]
ldr r0, _08080860 @ =0x000003FF
cmp r1, r0
bhi _08080864
strh r1, [r2, #4]
b _08080872
.align 2, 0
_0808085C: .4byte gRoomTransition
_08080860: .4byte 0x000003FF
_08080864:
ldr r0, _08080880 @ =gRoomControls
ldr r0, [r0, #0x30]
ldrh r1, [r0, #0x2e]
ldr r3, _08080884 @ =0xFFFF8000
adds r0, r3, #0
orrs r0, r1
strh r0, [r2, #4]
_08080872:
ldrh r1, [r4, #8]
ldr r0, _08080888 @ =0x000003FF
cmp r1, r0
bhi _0808088C
strh r1, [r2, #6]
b _0808089A
.align 2, 0
_08080880: .4byte gRoomControls
_08080884: .4byte 0xFFFF8000
_08080888: .4byte 0x000003FF
_0808088C:
ldr r0, _080808CC @ =gRoomControls
ldr r0, [r0, #0x30]
ldrh r1, [r0, #0x32]
ldr r3, _080808D0 @ =0xFFFF8000
adds r0, r3, #0
orrs r0, r1
strh r0, [r2, #6]
_0808089A:
ldrb r0, [r4, #0xb]
strb r0, [r2]
ldrb r0, [r4, #0xc]
strb r0, [r2, #1]
ldrb r0, [r4, #0xd]
strb r0, [r2, #8]
ldrb r0, [r4, #0xe]
strb r0, [r2, #3]
ldrb r0, [r4, #0xf]
strb r0, [r2, #2]
ldrh r0, [r4, #0x10]
cmp r0, #0
beq _080808B8
bl SoundReq
_080808B8:
ldr r0, _080808D4 @ =gUnk_0811E7C4
ldrh r1, [r4]
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r4, #0xa]
ldr r1, [r1]
bl _call_via_r1
pop {r4, pc}
.align 2, 0
_080808CC: .4byte gRoomControls
_080808D0: .4byte 0xFFFF8000
_080808D4: .4byte gUnk_0811E7C4
.syntax divided
+4 -1
View File
@@ -20,7 +20,10 @@ extern Input gInput; /**< Input instance. */
typedef struct {
u8 evt_type;
u8 entity_idx;
u8 _2[6];
u8 _2;
u8 _3;
u16 _4;
u16 _6;
u16 x;
u16 y;
u16 _c;
+1 -1
View File
@@ -376,7 +376,7 @@ void sub_08077728(u32);
void PutAwayItems(void);
void sub_08079E58(s32 speed, u32 direction);
void RespawnPlayer(void);
u32 GetSurfaceCalcType(Entity*, u32, u32);
u32 GetSurfaceCalcType(Entity*, s32, s32);
void UpdatePlayerMovement(void);
void EnablePlayerDraw(Entity*);
void sub_080797EC(void);
+5 -7
View File
@@ -255,10 +255,8 @@ bool32 sub_0801A458(LayerStruct* layer, u32 position, u32 collisionType) {
return FALSE;
}
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4F8(void)) {
u32 uVar1;
u32 uVar3;
bool32 sub_0801A4F8(void) {
u32 tmp;
if ((gPlayerState.flags & PL_MINISH) != 0) {
if (GetInventoryValue(ITEM_POWER_BRACELETS) != 1) {
return FALSE;
@@ -269,7 +267,8 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4
if (gPlayerState.field_0xd != gPlayerEntity.direction) {
return FALSE;
}
if ((gPlayerEntity.collisions & gUnk_080B44A0[(((gPlayerEntity.direction + 4) & 0x18) >> 2)]) == 0) {
tmp = (((gPlayerEntity.direction + 4) & 0x18) >> 3);
if ((gUnk_080B44A0[tmp] & gPlayerEntity.collisions) == 0) {
return FALSE;
}
} else {
@@ -282,7 +281,6 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4
}
return TRUE;
}
END_NONMATCH
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570())
@@ -387,7 +385,7 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801AA58.inc",
object->collisionLayer = this->collisionLayer;
gPlayerState.pushedObject = 0xa0;
gPlayerState.queued_action = 5;
gPlayerState.flags |= 1;
gPlayerState.flags |= PL_BUSY;
this->x.HALF.LO = 0;
this->y.HALF.LO = 0;
this->direction = param_3;
+8 -2
View File
@@ -21,7 +21,10 @@ Entity* sub_08049DF4(u32 arg0) {
}
Entity* sub_08049E18(void) {
if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189b75)) {
if ((gPlayerState.field_0x3c[0] == 0) &&
!(gPlayerState.flags &
(PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_DISABLE_ITEMS | PL_FALLING | PL_FROZEN |
PL_IN_MINECART | PL_PIT_IS_EXIT | PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_FLAGS2000000 | PL_CLIMBING))) {
gUnk_020000B0 = &gPlayerEntity;
return &gPlayerEntity;
}
@@ -29,7 +32,10 @@ Entity* sub_08049E18(void) {
}
Entity* sub_08049E4C(void) {
if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189bf5)) {
if ((gPlayerState.field_0x3c[0] == 0) &&
!(gPlayerState.flags & (PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_MINISH |
PL_DISABLE_ITEMS | PL_FALLING | PL_FROZEN | PL_IN_MINECART | PL_PIT_IS_EXIT |
PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_FLAGS2000000 | PL_CLIMBING))) {
gUnk_020000B0 = &gPlayerEntity;
return &gPlayerEntity;
}
+36 -4
View File
@@ -22,7 +22,7 @@ typedef struct {
extern u8 gUnk_03003DE0;
extern u8 gzHeap[0x1000];
extern u8 gUnk_0201AEE0[0x2000];
extern u32 gUnk_0201AEE0[0x800];
extern u8 gUnk_080CA11C[];
extern void (*gUnk_080C9CAC[])(void);
@@ -67,6 +67,10 @@ extern u32 gUsedPalettes;
extern u16 gPaletteBuffer[];
extern const GfxItem* gGfxGroups[];
extern const u32 gUnk_080C9460[];
void sub_0801E82C(void);
u32 DecToHex(u32 value) {
u32 result;
register u32 r1 asm("r1");
@@ -382,8 +386,14 @@ u32 sub_0801DF10(DungeonLayout* lyt) {
return offset;
}
ASM_FUNC("asm/non_matching/common/sub_0801DF28.inc", void sub_0801DF28(u32 a1, u32 a2, u32 a3));
void sub_0801DF28(u32 x, u32 y, s32 color) {
u32* ptr;
u32 tmp;
ptr = &gUnk_0201AEE0[(((y >> 3) * 0x10 + (x >> 3)) * 8)];
ptr = &ptr[(y & 7)];
tmp = (color << ((x & 7) * 4));
ptr[0] = (ptr[0] & gUnk_080C9460[x & 7]) | tmp;
}
u32 sub_0801DF60(u32 a1, u8* p) {
return (p[a1 >> 2] >> (2 * (~a1 & 3))) & 3;
}
@@ -531,7 +541,29 @@ ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u
ASM_FUNC("asm/non_matching/common/sub_0801E6C8.inc", void sub_0801E6C8(u32 a1));
ASM_FUNC("asm/non_matching/common/sub_0801E738.inc", void sub_0801E738(u32 a1));
void sub_0801E738(u32 param_1) {
s32 index;
s32 tmp;
sub_0801E82C();
if (param_1 - 0x65 < 0x11) {
index = sub_0801E8B0(param_1);
if (index < 0) {
index = 0;
while (gSave.unk118[index] != 0) {
index++;
}
}
if ((u32)index < 0x12) {
gSave.unk118[index] = param_1;
tmp = gSave.unk12B[index] + 1;
if (tmp > 99) {
tmp = 99;
}
gSave.unk12B[index] = tmp;
}
}
}
void sub_0801E798(u32 a1) {
s32 idx = sub_0801E8B0(a1);
+1 -1
View File
@@ -423,7 +423,7 @@ void sub_08049944(Enemy64Entity* this) {
if (EntityWithinDistance(super, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x20)) {
gPlayerState.field_0x14 = 1;
if (gPlayerEntity.z.HALF.HI == 0) {
gPlayerState.flags |= 2;
gPlayerState.flags |= PL_FLAGS2;
this->unk_7c |= 1;
}
}
+1 -1
View File
@@ -386,7 +386,7 @@ void sub_0803F6EC(GhiniEntity* this) {
gPlayerEntity.iframes = -0x3c;
gPlayerState.jump_status = 0x41;
}
gPlayerState.flags &= 0xffffffef;
gPlayerState.flags &= ~PL_CAPTURED;
}
void sub_0803F738(GhiniEntity* this) {
+115 -9
View File
@@ -33,6 +33,7 @@
#include "transitions.h"
#include "roomid.h"
#include "ui.h"
#include "kinstone.h"
// Game task
@@ -234,9 +235,17 @@ extern const EntityData* gUnk_080FCFB8[];
extern void (*const gUnk_080FD138[])(void);
extern const u16 gUnk_080FD964[];
extern const u8 gUnk_080FCF04[];
extern void ClearBgAnimations(void);
void sub_08054974(s32, s32);
void sub_080548E8(void);
extern void sub_0806F38C(void);
extern void sub_08018710(u32);
void GameTask(void) {
static GameState* const sStates[] = {
GameTask_Transition,
@@ -1277,8 +1286,8 @@ bool32 CanDispEzloMessage(void) {
gPauseMenuOptions.disabled || gUnk_0200AF00.unk_1)
return 0;
if ((gPlayerState.flags & (PL_NO_CAP | 0x110)) || (gPlayerState.framestate_last > tmp) || gPlayerState.item ||
gPlayerEntity.field_0x7a.HWORD)
if ((gPlayerState.flags & (PL_NO_CAP | PL_CAPTURED | PL_DISABLE_ITEMS)) || (gPlayerState.framestate_last > tmp) ||
gPlayerState.item || gPlayerEntity.field_0x7a.HWORD)
return 0;
if ((gPlayerEntity.z.HALF.HI & 0x8000) && !gPlayerState.field_0xa)
@@ -1885,9 +1894,43 @@ void sub_08053758(void) {
ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800())
ASM_FUNC("asm/non_matching/game/sub_08053894.inc", void sub_08053894())
void sub_08053894(void) {
u32 tmp;
if (gFadeControl.active == 0) {
gMenu.transitionTimer--;
if (gMenu.field_0xa != 0) {
gMenu.field_0xa--;
} else {
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
tmp = ++gMenu.storyPanelIndex << 0x18;
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - ((tmp) >> 0x19));
}
}
if (gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
}
}
}
ASM_FUNC("asm/non_matching/game/sub_08053904.inc", void sub_08053904())
void sub_08053904(void) {
u32 tmp;
if (gFadeControl.active == 0) {
gMenu.transitionTimer--;
if (gMenu.field_0xa != 0) {
gMenu.field_0xa--;
} else {
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
tmp = ++gMenu.storyPanelIndex << 0x18;
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - (tmp >> 0x19));
}
}
if (gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFade(FADE_IN_OUT | FADE_INSTANT, 1);
}
}
}
void sub_08053974(void) {
if (gFadeControl.active == 0) {
@@ -2043,7 +2086,21 @@ void sub_08053CAC(void) {
gUnk_080FCFA4[gMenu.overlayType]();
}
ASM_FUNC("asm/non_matching/game/sub_08053CC8.inc", void sub_08053CC8())
void sub_08053CC8(void) {
const u8* ptr;
ptr = gUnk_080FCF04 + gMenu.field_0x3 * 0x10;
gMenu.field_0xc = (void*)&ptr[8];
LoadRoomEntityList(*(EntityData**)(&ptr[0]));
LoadRoomEntityList(GetRoomProperty(ptr[4], ptr[5], 1));
LoadRoomEntityList(GetRoomProperty(ptr[4], ptr[5], 2));
gMenu.overlayType = 1;
gScreen.lcd.displayControl &= 0xfeff;
gUpdateVisibleTiles = 1;
SetFade(FADE_INSTANT, 0x10);
if (ptr[5] == 0x1d) {
gMenu.field_0xa = 1;
}
}
void sub_08053D34(void) {
if (gMenu.field_0xa != 0) {
@@ -2581,7 +2638,21 @@ void Subtask_WorldEvent(void) {
#endif
}
ASM_FUNC("asm/non_matching/game/sub_0805488C.inc", void sub_0805488C())
void sub_0805488C(void) {
const struct_080FE320* ptr = &gUnk_080FE320[gUI.field_0x3];
gMenu.field_0x0 = ptr->evt_type;
gMenu.field_0x3 = ptr->entity_idx;
gMenu.field_0x4 = gUI.field_0x3;
gMenu.field_0xc = (u8*)ptr;
gMenu.menuType++;
gMenu.overlayType = 0;
gMenu.transitionTimer = 300;
DispReset(0);
sub_08054974(gUI.field_0x3, 1);
sub_0806F364();
ClearRoomFlag(0xff);
sub_080548E8();
}
void sub_080548E8(void) {
gUnk_080FE2AC[gMenu.field_0x0]();
@@ -2594,12 +2665,47 @@ void sub_080548E8(void) {
UpdateScrollVram();
}
ASM_FUNC("asm/non_matching/game/sub_08054920.inc", void sub_08054920())
void sub_08054920(void) {
MessageInitialize();
sub_0806F38C();
if (gUnk_080C9CBC[gFuseInfo._3]._5[1] != 0) {
MenuFadeIn(10, gUI.field_0x3);
} else {
gUI.nextToLoad = 3;
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 0x10);
}
}
void sub_08054968(void) {
gMenu.menuType = 2;
}
ASM_FUNC("asm/non_matching/game/sub_08054974.inc", void sub_08054974())
void sub_08054974(s32 param_1, s32 param_2) {
struct_080FE320* ptr = &gUnk_080FE320[param_1];
SetCurrentRoomPropertyList(ptr->_2, ptr->_3);
gRoomControls.area = ptr->_2;
gRoomControls.room = ptr->_3;
LoadGfxGroups();
gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.area);
if (param_2 != 0) {
LoadAuxiliaryRoom(ptr->_2, ptr->_3);
} else {
sub_08052FF4(ptr->_2, ptr->_3);
InitializeCamera();
gUpdateVisibleTiles = 1;
}
gScreen.lcd.displayControl &= 0x1fff;
gRoomControls.scroll_x = gRoomControls.origin_x + ptr->_4;
gRoomControls.scroll_y = gRoomControls.origin_y + ptr->_6;
if (ptr->_2 == 2) {
TryLoadPrologueHyruleTown();
}
sub_08018710(gUI.field_0x3);
}
ASM_FUNC("asm/non_matching/game/sub_08054A14.inc", void sub_08054A14())
void sub_08054A14(s32 param_1) {
struct_080FE320* ptr = &gUnk_080FE320[param_1];
if (ptr->_11 < 0xe) {
SetLocalFlagByBank(gLocalFlagBanks[ptr->_11], ptr->flag);
}
}
+1 -1
View File
@@ -236,7 +236,7 @@ static void HandlePlayerLife(Entity* this) {
if ((gPlayerEntity.contactFlags & 0x80) && (gPlayerEntity.iframes > 0))
SoundReq(SFX_86);
gPlayerState.flags &= ~(0x2000000 | PL_FALLING);
gPlayerState.flags &= ~(PL_FALLING | PL_FLAGS2000000);
if (gPlayerState.flags & PL_BURNING)
ResetPlayerItem();
if ((gPlayerState.flags & PL_CLONING) && gPlayerState.chargeState.action == 0)
+27 -1
View File
@@ -95,7 +95,33 @@ void sub_08076488(ItemBehavior* this, u32 idx) {
gPlayerState.framestate = PL_STATE_HOLD;
}
ASM_FUNC("asm/non_matching/itemTryPickupObject/sub_08076518.inc", void sub_08076518(ItemBehavior* this, u32 idx))
void sub_08076518(ItemBehavior* this, u32 index) {
if (PlayerTryDropObject(this, index)) {
gPlayerState.framestate = 4;
if ((gPlayerState.jump_status & 0x80) == 0 && gPlayerState.field_0x1f[0] == 0) {
if (gPlayerEntity.knockbackDuration != 0) {
PlayerCancelHoldItem(this, index);
} else {
if ((gPlayerState.field_0x92 & 0x8018) != 0) {
sub_0806F948(&gPlayerEntity);
gPlayerState.heldObject = 5;
this->field_0x18->subAction = 2;
this->field_0x18->direction = (gPlayerEntity.animationState & 0xe) << 2;
this->field_0x18 = NULL;
this->stateID++;
this->field_0xf = 0x0f;
if ((gPlayerState.flags & PL_NO_CAP) != 0) {
sub_08077DF4(this, 0x930);
} else {
sub_08077DF4(this, 0x344);
}
gPlayerState.field_0xa |= 8 >> index;
gPlayerState.keepFacing |= 8 >> index;
}
}
}
}
}
void sub_080765E0(ItemBehavior* this, u32 idx) {
if (PlayerTryDropObject(this, idx) != 0) {
+10 -2
View File
@@ -18,7 +18,7 @@
extern u32 sub_08000E44(u32);
extern void sub_080A3B74(void);
extern s32 sub_080A3B48(void);
extern u32 sub_080A3B48(void);
extern void sub_0805ECEC(u32, u32, u32, u32);
extern void sub_0801E6C8(u32);
extern void sub_0801E798(u32);
@@ -65,7 +65,15 @@ Subtask KinstoneMenu_Type3;
Subtask KinstoneMenu_Type4;
Subtask KinstoneMenu_Type5;
ASM_FUNC("asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc", s32 sub_080A3B48(void))
u32 sub_080A3B48(void) {
u32 index;
for (index = 0; index <= 0x12; index++) {
if (gSave.unk12B[index] == 0) {
break;
}
}
return index;
}
void sub_080A3B74(void) {
gKinstoneMenu.unk2f = 0;
+36 -2
View File
@@ -20,6 +20,12 @@ void sub_08069888(Entity* this);
extern u16 gUnk_08111C50[];
extern const s16 gUnk_08111C5C[];
extern const u8 gUnk_08111C74[];
extern const s16 gUnk_08111C84[];
extern const u8 gUnk_08111C8C[];
void Gorman(Entity* this) {
if ((this->flags & ENT_SCRIPTED) != 0) {
sub_08069838(this);
@@ -98,9 +104,37 @@ void sub_08069888(Entity* this) {
MessageNoOverlap(gUnk_08111C50[index], this);
}
ASM_FUNC("asm/non_matching/gorman/sub_0806991C.inc", void sub_0806991C(Entity* this, ScriptExecutionContext* context))
void sub_0806991C(Entity* this, ScriptExecutionContext* context) {
u32 tmp;
const s16* ptr;
this->field_0x68.HALF.LO = (Random() & 0x1f) + 0x3c;
ptr = &gUnk_08111C5C[*(s8*)&this->field_0x68.HALF.HI * 2];
context->x.HALF.HI = gRoomControls.origin_x + ptr[0];
context->y.HALF.HI = gRoomControls.origin_y + ptr[1];
context->unk_19 = 8;
context->postScriptActions |= 2;
context->condition = 0;
tmp = sub_080045DA(context->x.HALF.HI - this->x.HALF.HI, context->y.HALF.HI - this->y.HALF.HI);
this->direction = tmp;
this->animationState = (this->animationState & 0x80) | gUnk_08111C74[(tmp << 0x18) >> 0x1c];
gActiveScriptInfo.flags |= 1;
}
ASM_FUNC("asm/non_matching/gorman/sub_080699AC.inc", void sub_080699AC(Entity* this, ScriptExecutionContext* context))
void sub_080699AC(Entity* this, ScriptExecutionContext* context) {
u32 tmp;
const s16* ptr;
this->field_0x68.HALF.LO = (Random() & 0x1f) + 0x3c;
ptr = &gUnk_08111C84[*(s8*)&this->field_0x68.HALF.HI * 2];
context->x.HALF.HI = gRoomControls.origin_x + ptr[0];
context->y.HALF.HI = gRoomControls.origin_y + ptr[1];
context->unk_19 = 8;
context->postScriptActions |= 2;
context->condition = 0;
tmp = sub_080045DA(context->x.HALF.HI - this->x.HALF.HI, context->y.HALF.HI - this->y.HALF.HI);
this->direction = tmp;
this->animationState = (this->animationState & 0x80) | gUnk_08111C8C[(tmp << 0x18) >> 0x1c];
gActiveScriptInfo.flags |= 1;
}
void sub_08069A3C(Entity* this) {
this->field_0x68.HALF.HI = gUnk_08111C9C[(Random() & 1) + (s8)this->field_0x68.HALF.HI * 2];
+26 -1
View File
@@ -1,9 +1,12 @@
#include "entity.h"
#include "sound.h"
#include "script.h"
#include "npc.h"
extern SpriteLoadData gUnk_0810C48C;
extern void sub_0806FF10(Entity* this, u32 param_2, u32 param_3);
void MinishEzlo(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_0810C48C) == 0) {
@@ -27,7 +30,29 @@ void MinishEzlo(Entity* this) {
}
}
ASM_FUNC("asm/non_matching/minishEzlo/MinishEzlo_Head.inc", void MinishEzlo_Head(Entity* this))
void MinishEzlo_Head(Entity* this) {
u32 uVar1;
u32 uVar2;
u32 uVar3;
if ((this->frameSpriteSettings & 4) != 0) {
uVar2 = 1;
uVar1 = 0;
} else {
uVar2 = 0;
uVar1 = 1;
}
if ((this->frameSpriteSettings & 8) != 0) {
uVar3 = 0x16;
} else {
uVar3 = 0x11c;
}
SetExtraSpriteFrame(this, uVar2, (this->frame & 0xffffff7f) - 1);
SetExtraSpriteFrame(this, uVar1, this->frameIndex);
sub_0806FF10(this, uVar1, uVar3);
SetSpriteSubEntryOffsetData1(this, uVar1, uVar2);
sub_0807000C(this);
}
void sub_0806305C(Entity* this) {
this->spritePriority.b1 = 0;
+2 -2
View File
@@ -277,7 +277,7 @@ void Beanstalk_Action1Type7(BeanstalkEntity* this) {
case 2:
case 3:
case 4:
if (gPlayerState.floor_type == 0x1e) {
if (gPlayerState.floor_type == SURFACE_LADDER) {
if (EntityInRectRadius(super, &gPlayerEntity, 0, 8)) {
if ((super->animIndex == (super->type2 - 1) * 3 + 1) && (super->timer == 0)) {
super->timer = 1;
@@ -339,7 +339,7 @@ void Beanstalk_Action1Type9(BeanstalkEntity* this) {
}
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
if (gPlayerState.floor_type == 0x1e) {
if (gPlayerState.floor_type == SURFACE_LADDER) {
super->spritePriority.b0 = 0;
if (sub_080B1A0C(super, 0, -0x18) != 0x4014) {
SetTile(0x4014, COORD_TO_TILE_OFFSET(super, 0, 0x18), 1);
+1 -1
View File
@@ -59,7 +59,7 @@ void LadderUp(Entity* this) {
default:
if (this->type2 == 0) {
if (gPlayerEntity.y.HALF.HI < this->y.HALF.HI) {
if (gPlayerState.floor_type != 0x1e && (GetTileTypeByEntity(this) == 0x4017)) {
if (gPlayerState.floor_type != SURFACE_LADDER && (GetTileTypeByEntity(this) == 0x4017)) {
SetTile(0x4023, COORD_TO_TILE(this), this->collisionLayer);
RestorePrevTileEntity(COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer);
}
+4 -3
View File
@@ -57,8 +57,9 @@ void sub_0808DDE8(Object42Entity* this) {
if (sub_0807953C()) {
super->subtimer++;
}
if (((0x1e < super->subtimer) || ((gPlayerState.flags & 0x1810) != 0)) || (this->unk_6c == 0)) {
gPlayerState.flags &= 0xfffffbff;
if (((0x1e < super->subtimer) || ((gPlayerState.flags & (PL_CAPTURED | PL_FROZEN | PL_IN_MINECART)) != 0)) ||
(this->unk_6c == 0)) {
gPlayerState.flags &= ~PL_BURNING;
DeleteThisEntity();
}
player = &gPlayerEntity;
@@ -68,7 +69,7 @@ void sub_0808DDE8(Object42Entity* this) {
super->collisionLayer = gPlayerEntity.collisionLayer;
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
if ((gPlayerState.flags & 0x400) != 0) {
if ((gPlayerState.flags & PL_BURNING) != 0) {
GetNextFrame(super);
} else {
DeleteThisEntity();
+1 -1
View File
@@ -41,7 +41,7 @@ void Object70_Action1(Entity* this) {
if (this->type == 0) {
if (gPlayerEntity.z.WORD == 0) {
if ((((gPlayerState.dash_state & 0x40) == 0) && (gPlayerState.floor_type == 0x11)) &&
if ((((gPlayerState.dash_state & 0x40) == 0) && (gPlayerState.floor_type == SURFACE_SWAMP)) &&
((gPlayerEntity.action == 1 || ((gPlayerEntity.action == 0x18 || (gPlayerEntity.action == 4)))))) {
goto _080974FA;
} else {
+1 -1
View File
@@ -137,7 +137,7 @@ void Object96_Action2(Entity* this, const struct_gUnk_08123FB0* param_2) {
void Object96_Action3(Entity* this, const struct_gUnk_08123FB0* param_2) {
u8 type;
if (gPlayerState.flags & 0x80) {
if (gPlayerState.flags & PL_MINISH) {
sub_0800445C(this);
} else {
if (IsCollidingPlayer(this)) {
+4 -4
View File
@@ -191,7 +191,7 @@ bool32 sub_0808FC5C(PushableFurnitureEntity* this) {
} else {
super->timer = 0x18;
}
if ((gPlayerState.flags & 0x80) == 0) {
if ((gPlayerState.flags & PL_MINISH) == 0) {
super->timer += 0x10;
}
sub_0808FF50(this);
@@ -213,7 +213,7 @@ void sub_0808FD44(PushableFurnitureEntity* this, u32 param_2) {
} else {
tmp = this->unk_70;
}
if ((gPlayerState.flags & 0x80) != 0) {
if ((gPlayerState.flags & PL_MINISH) != 0) {
super->speed = 0x40;
super->timer = 0x20;
} else {
@@ -222,7 +222,7 @@ void sub_0808FD44(PushableFurnitureEntity* this, u32 param_2) {
}
} else {
tmp = this->unk_7c;
if ((gPlayerState.flags & 0x80) != 0) {
if ((gPlayerState.flags & PL_MINISH) != 0) {
super->speed = 0x40;
super->timer = 0x40;
} else {
@@ -271,7 +271,7 @@ void sub_0808FDE8(PushableFurnitureEntity* this) {
bool32 sub_0808FECC(PushableFurnitureEntity* this) {
bool32 result = TRUE;
if (!((gPlayerState.flags & 0x80) == 0 && (gPlayerEntity.action == 6) && (gPlayerEntity.animationState == 0) &&
if (!((gPlayerState.flags & PL_MINISH) == 0 && (gPlayerEntity.action == 6) && (gPlayerEntity.animationState == 0) &&
(gPlayerEntity.y.HALF.HI - super->y.HALF.HI < 0x14) && (super->x.HALF.HI + 0xc > gPlayerEntity.x.HALF.HI) &&
(super->x.HALF.HI - 12 < gPlayerEntity.x.HALF.HI))) {
result = FALSE;
+1 -1
View File
@@ -98,7 +98,7 @@ void sub_080A78B8(PlayerItemSwordEntity* this, Entity* param_2) {
super->knockbackDirection = 0;
super->iframes = 0;
}
if ((gPlayerState.flags & 0x8000000) != 0) {
if ((gPlayerState.flags & PL_SWORD_THRUST) != 0) {
gPlayerState.sword_state |= 0x80;
} else if (gPlayerState.sword_state != 0) {
switch (super->contactFlags & 0x7f) {
+197 -12
View File
@@ -51,7 +51,7 @@ void* sub_08077C54(ItemBehavior*);
u32 sub_08079FD4(Entity*, u32);
void LoadRoomGfx(void);
u32 sub_0807A094(u32);
u32 GetSurfaceCalcType(Entity*, u32, u32);
u32 GetSurfaceCalcType(Entity*, s32, s32);
void sub_0807AAF8(Entity*, u32);
extern struct_0811BE48 gUnk_0811BE48[];
@@ -78,6 +78,20 @@ bool32 sub_0807BF88(u32, u32, RoomResInfo*);
void sub_0807BFD0(void);
void ForceSetPlayerState(u32 framestate);
struct_03003DF8* sub_080784E4(void);
extern const u16 gUnk_0811C0F8[];
u32 sub_08079778(void);
u32 sub_0807A500(void);
extern const u16 gUnk_0811C108[];
extern const u16 gUnk_0811C110[];
extern const u16 gUnk_08007CAC[];
void sub_08077698(PlayerEntity* this) {
ItemBehavior* puVar2;
u32 idx;
@@ -140,7 +154,7 @@ NONMATCH("asm/non_matching/playerUtils/sub_080777A0.inc", bool32 sub_080777A0(vo
return TRUE;
}
} else if ((((gUnk_0200AF00.unk_2c == 0xc) && (gPlayerState.field_0x1c == 0)) &&
(gPlayerState.floor_type != 0x11)) &&
(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)))))) {
@@ -209,7 +223,7 @@ ItemBehavior* sub_0807794C(u32 param_1) {
(((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (6 < param_1)))) ||
((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (6 < param_1)) ||
(((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[param_1].unk6[2] == 0)))))) ||
((gPlayerState.floor_type == 0x11 && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) {
((gPlayerState.floor_type == SURFACE_SWAMP && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) {
return NULL;
} else {
u32 tmp = gUnk_0811BE48[param_1].unk0[2];
@@ -701,14 +715,103 @@ void ForceSetPlayerState(u32 framestate) {
ASM_FUNC("asm/non_matching/playerUtils/sub_08078180.inc", void sub_08078180())
ASM_FUNC("asm/non_matching/playerUtils/sub_080782C0.inc", u32 sub_080782C0())
bool32 sub_080782C0(void) {
u8 tmp;
Entity* entity;
if (gPlayerState.framestate == 0) {
tmp = gPlayerState.framestate_last;
} else {
tmp = gPlayerState.framestate;
}
switch (tmp) {
case 2:
case 3:
case 0xc:
case 0x12:
case 0x15:
case 0x16:
return FALSE;
}
if ((gPlayerState.field_0x27[0] | gPlayerState.swim_state) != 0) {
return FALSE;
}
if (gPlayerState.floor_type == SURFACE_PIT) {
if (gPlayerState.field_0x14 == 0) {
return FALSE;
}
if (CanDispEzloMessage()) {
return TRUE;
}
return FALSE;
}
if ((gPlayerState.flags & PL_DRUGGED) != 0) {
return FALSE;
}
if (CanDispEzloMessage()) {
return TRUE;
}
entity = sub_080784E4()->entity;
if (entity == NULL) {
return FALSE;
}
if (gPlayerState.heldObject != 0) {
if (gPlayerState.heldObject != 4) {
return FALSE;
}
if ((gNewPlayerEntity.unk_74)->child->kind != OBJECT || (gNewPlayerEntity.unk_74)->child->id != SHOP_ITEM) {
return FALSE;
}
}
if (((gPlayerState.field_0x92 & 0x1000) != 0) && ((u8)(gUnk_03003DF0.unk_4[3] - 1) < 100)) {
sub_0801E738(0);
if (gSave.unk12B[0] != 0) {
gUnk_03003DF0.unk_2 = gUnk_03003DF0.unk_4[3];
*(u8*)(*(int*)(gUnk_03003DF0.unk_4 + 8) + 0x39) = 2;
gPlayerState.queued_action = 7;
} else {
CreateEzloHint(0xb65, 0);
}
ForceSetPlayerState(0x13);
return TRUE;
}
if ((gPlayerState.field_0x92 & 0x88) == 0) {
return FALSE;
}
switch (gUnk_03003DF0.unk_4[1]) {
default:
case 0:
return TRUE;
case 1:
case 6:
case 9:
case 0xa:
gPlayerState.queued_action = 7;
ForceSetPlayerState(0x13);
case 3:
case 5:
case 7:
entity->interactType = 1;
gUnk_03003DF0.unk_2 = 0;
return TRUE;
case 8:
if (gRoomVars.shopItemType == 0) {
entity->interactType = 1;
gRoomVars.shopItemType = entity->type;
gRoomVars.shopItemType2 = entity->type2;
return TRUE;
}
return FALSE;
}
return TRUE;
}
void sub_080784C8(void) {
MemClear(&gUnk_03003DF0, 0x188);
gUnk_03003DF0.unk_4 = (u8*)gUnk_0811C000;
}
ASM_FUNC("asm/non_matching/playerUtils/sub_080784E4.inc", void sub_080784E4())
ASM_FUNC("asm/non_matching/playerUtils/sub_080784E4.inc", struct_03003DF8* sub_080784E4(void))
void sub_08078778(Entity* ent) {
sub_0807887C(ent, 1, 0);
@@ -927,7 +1030,7 @@ void ClearPlayerState(void) {
gPlayerState.field_0xd = 0;
gPlayerState.field_0xe = 0;
gPlayerState.field_0x11 = 0;
gPlayerState.floor_type = 0;
gPlayerState.floor_type = SURFACE_NORMAL;
gPlayerState.floor_type_last = 0;
gPlayerState.field_0x14 = 0;
gPlayerState.sword_state = 0;
@@ -1129,7 +1232,24 @@ void sub_080792BC(s32 speed, u32 direction, u32 field_0x38) {
ASM_FUNC("asm/non_matching/playerUtils/sub_080792D8.inc", void sub_080792D8())
ASM_FUNC("asm/non_matching/playerUtils/sub_080793E4.inc", bool32 sub_080793E4(u32 a))
bool32 sub_080793E4(u32 param_1) {
u32 tmp;
if (gPlayerState.swim_state == 0) {
tmp = gUnk_0811C0F8[gPlayerEntity.animationState >> 1];
} else {
tmp = gUnk_0811C0F8[gPlayerEntity.direction >> 2];
}
if (sub_08079778() && ((gPlayerState.field_0x90 & tmp) != 0)) {
if (param_1 != 0) {
if (!sub_080B1BA4(sub_0807A500(), gPlayerEntity.collisionLayer, param_1)) {
return FALSE;
}
}
return TRUE;
} else {
return FALSE;
}
}
ASM_FUNC("asm/non_matching/playerUtils/RespawnPlayer.inc", void RespawnPlayer())
@@ -1181,15 +1301,59 @@ void sub_08079744(Entity* this) {
}
}
ASM_FUNC("asm/non_matching/playerUtils/sub_08079778.inc", void sub_08079778())
bool32 sub_08079778(void) {
u32 tmp;
if (gPlayerState.swim_state == 0) {
tmp = gUnk_0811C108[gPlayerEntity.animationState >> 1];
} else {
tmp = gUnk_0811C108[gPlayerEntity.direction >> 2];
}
return tmp == (gPlayerEntity.collisions & tmp);
}
ASM_FUNC("asm/non_matching/playerUtils/sub_080797C4.inc", u32 sub_080797C4(void))
u32 sub_080797C4(void) {
u32 tmp = gUnk_0811C110[gPlayerEntity.direction >> 3];
return tmp == (gPlayerEntity.collisions & tmp);
}
ASM_FUNC("asm/non_matching/playerUtils/sub_080797EC.inc", void sub_080797EC())
ASM_FUNC("asm/non_matching/playerUtils/ResolvePlayerAnimation.inc", void ResolvePlayerAnimation())
ASM_FUNC("asm/non_matching/playerUtils/sub_08079B24.inc", u32 sub_08079B24())
bool32 sub_08079B24(void) {
if ((gPlayerEntity.action != PLAYER_MINISHDIE) && (gPlayerEntity.health == 0)) {
gPlayerState.flags &= ~PL_PARACHUTE;
gPlayerEntity.knockbackDuration = gPlayerEntity.health;
if (gPlayerState.field_0x7 == 0) {
if (gPlayerState.swim_state != 0) {
RespawnPlayer();
} else {
if ((gPlayerState.field_0x14 == 0) && ((gPlayerState.flags & PL_IN_MINECART) == 0)) {
if (gPlayerEntity.z.HALF.HI < 0) {
if (gPlayerEntity.zVelocity > 0) {
gPlayerEntity.zVelocity = 0;
}
if ((gPlayerState.jump_status & 0x41) == 0) {
gPlayerState.jump_status = 0x41;
gPlayerEntity.direction = 0xff;
gPlayerState.field_0xd = 0xff;
return TRUE;
} else {
return TRUE;
}
}
if (((gPlayerState.flags & PL_FLAGS2) == 0) && (sub_08079D48() == 0)) {
gPlayerState.field_0xa |= 0x10;
return TRUE;
}
}
}
gPlayerEntity.flags &= ~ENT_COLLIDE;
return FALSE;
}
}
return TRUE;
}
void sub_08079BD8(Entity* this) {
this->x = gPlayerEntity.x;
@@ -1337,7 +1501,28 @@ void UpdateFloorType(void) {
gUnk_0811C120[gPlayerState.floor_type](&gPlayerEntity);
}
ASM_FUNC("asm/non_matching/playerUtils/GetSurfaceCalcType.inc", u32 GetSurfaceCalcType(Entity* a, u32 b, u32 c))
u32 GetSurfaceCalcType(Entity* param_1, s32 x, s32 y) {
u32 position = TILE(param_1->x.HALF.HI + (u32)x, param_1->y.HALF.HI + y);
u32 tileType = GetTileTypeByPos(param_1->x.HALF.HI + x, param_1->y.HALF.HI + y, gPlayerEntity.collisionLayer);
if (tileType != gPlayerState.field_0x22[1]) {
gPlayerState.field_0x37 = 0;
}
if ((tileType != gPlayerState.field_0x22[1]) || (position != gPlayerState.field_0x22[0])) {
gPlayerState.field_0x22[0] = position;
gPlayerState.field_0x22[1] = tileType;
gPlayerState.field_0x11 = 0;
}
if (gPlayerState.field_0x11 != 0xff) {
gPlayerState.field_0x11++;
}
if (gPlayerState.field_0x37 != 0xff) {
gPlayerState.field_0x37++;
}
gPlayerState.floor_type_last = gPlayerState.floor_type;
tileType = GetRelativeCollisionTile(param_1, x, y);
return sub_08007DD6(tileType, (u16*)gUnk_08007CAC);
}
void EnablePlayerDraw(Entity* this) {
this->type2 = 0;
@@ -1358,7 +1543,7 @@ bool32 sub_0807A2B8(void) {
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A2F8.inc", u32 sub_0807A2F8(u32 a1))
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A500.inc", void sub_0807A500())
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A500.inc", u32 sub_0807A500())
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A5B8.inc", void sub_0807A5B8(u32 a))
+29 -1
View File
@@ -188,7 +188,35 @@ END_NONMATCH
ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this))
ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC760.inc", void sub_080AC760(Entity* this))
void sub_080AC760(Entity* param_1) {
s32 tmp;
Entity* entity1;
Entity* entity2;
entity1 = param_1->child;
tmp = (entity1->direction - param_1->direction) & 0xff;
if (((tmp + 8) & 0xff) > 0x10) {
if (tmp > 0x80) {
entity1->direction = param_1->direction - 8;
} else {
entity1->direction = param_1->direction + 8;
}
}
entity2 = entity1->child;
if (entity2->child == NULL) {
entity2->direction = param_1->parent->animationState ^ 0x80;
} else {
tmp = (entity2->direction - entity1->direction) & 0xff;
if (((tmp + 8) & 0xff) <= 0x10) {
return;
}
if (tmp > 0x80) {
entity2->direction = entity1->direction - 8;
} else {
entity2->direction = entity1->direction + 8;
}
}
}
NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) {
// TODO regalloc
+26 -1
View File
@@ -54,6 +54,8 @@ void sub_08080B60(u8*);
extern u8 gMapDataTopSpecial[];
extern const void (*const gUnk_0811E7C4[])(int);
void UpdateScroll(void) {
static void (*const gUnk_0811E768[])(RoomControls*) = {
sub_0807FC64, sub_0807FC7C, sub_0807FDB0, NULL, sub_0807FEF0, sub_0807FF54,
@@ -363,7 +365,30 @@ ASM_FUNC("asm/non_matching/scroll/sub_08080794.inc", void sub_08080794())
ASM_FUNC("asm/non_matching/scroll/sub_08080808.inc", void sub_08080808())
ASM_FUNC("asm/non_matching/scroll/DoExitTransition.inc", void DoExitTransition(const ScreenTransitionData* data))
void DoExitTransition(const ScreenTransitionData* data) {
PlayerRoomStatus* status;
gRoomTransition.transitioningOut = 1;
status = &gRoomTransition.player_status;
if ((u16)data->playerXPos <= 0x3ff) {
status->start_pos_x = data->playerXPos;
} else {
status->start_pos_x = (gRoomControls.camera_target)->x.HALF.HI | 0x8000;
}
if ((u16)data->playerYPos <= 0x3ff) {
status->start_pos_y = data->playerYPos;
} else {
status->start_pos_y = (gRoomControls.camera_target)->y.HALF.HI | 0x8000;
}
status->area_next = data->area;
status->room_next = data->room;
status->layer = data->playerLayer;
status->spawn_type = data->field_0xe;
status->start_anim = data->playerState;
if (data->transitionSFX != SFX_NONE) {
SoundReq(data->transitionSFX);
}
gUnk_0811E7C4[data->type](data->field_0xa);
}
void sub_080808D8(void) {
gRoomTransition.type = TRANSITION_DEFAULT;
+3 -3
View File
@@ -364,7 +364,7 @@ void sub_080A5B34(void) {
}
if (bVar1) {
if (uVar3 == 0) {
SetFade(7, 0x20);
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 0x20);
gMenu.transitionTimer = 0x3c;
SetMenuType(2);
} else {
@@ -698,7 +698,7 @@ void sub_080A6378(void) {
if ((gGenericMenu.unk2c & 0x20) == 0) {
gOamCmd.x = gRoomTransition.player_status.overworld_map_x * 0xa0 / 0xf90 + 0x28;
gOamCmd.y = (gRoomTransition.player_status.overworld_map_y << 7) / 0xc60 + 0xc;
if ((gPlayerState.flags & 8) != 0) {
if ((gPlayerState.flags & PL_NO_CAP) != 0) {
frameIndex = 0x5a;
} else {
frameIndex = 0x59;
@@ -773,7 +773,7 @@ void sub_080A6534(void) {
gGenericMenu.unk10.h[0] = 0;
gMenu.transitionTimer = 0x3c;
SetMenuType(1);
SetFade(4, 8);
SetFade(FADE_INSTANT, 8);
}
void sub_080A65AC(void) {