mirror of
https://github.com/zeldaret/tmc
synced 2026-06-09 04:40:07 -04:00
Decompile some functions
This commit is contained in:
@@ -1,74 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
bl sub_0806D164
|
||||
ldr r2, _0806D0A8 @ =gScreen
|
||||
ldrh r1, [r2]
|
||||
movs r3, #0x80
|
||||
lsls r3, r3, #7
|
||||
adds r0, r3, #0
|
||||
orrs r0, r1
|
||||
strh r0, [r2]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x60
|
||||
ldr r0, _0806D0AC @ =0x00003F3F
|
||||
strh r0, [r1]
|
||||
adds r1, #2
|
||||
movs r0, #0x3d
|
||||
strh r0, [r1]
|
||||
movs r1, #0x16
|
||||
ldrsh r0, [r2, r1]
|
||||
rsbs r0, r0, #0
|
||||
movs r3, #0x80
|
||||
lsls r3, r3, #1
|
||||
adds r1, r0, r3
|
||||
cmp r0, #0
|
||||
bge _0806D060
|
||||
movs r0, #0
|
||||
_0806D060:
|
||||
cmp r0, #0xf0
|
||||
ble _0806D066
|
||||
movs r0, #0xf0
|
||||
_0806D066:
|
||||
cmp r1, #0
|
||||
bge _0806D06C
|
||||
movs r1, #0
|
||||
_0806D06C:
|
||||
cmp r1, #0xf0
|
||||
ble _0806D072
|
||||
movs r1, #0xf0
|
||||
_0806D072:
|
||||
lsls r0, r0, #8
|
||||
orrs r0, r1
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x5a
|
||||
strh r0, [r1]
|
||||
movs r1, #0x18
|
||||
ldrsh r0, [r2, r1]
|
||||
rsbs r0, r0, #0
|
||||
adds r1, r0, r3
|
||||
cmp r0, #0
|
||||
bge _0806D08A
|
||||
movs r0, #0
|
||||
_0806D08A:
|
||||
cmp r0, #0xa0
|
||||
ble _0806D090
|
||||
movs r0, #0xa0
|
||||
_0806D090:
|
||||
cmp r1, #0
|
||||
bge _0806D096
|
||||
movs r1, #0
|
||||
_0806D096:
|
||||
cmp r1, #0xa0
|
||||
ble _0806D09C
|
||||
movs r1, #0xa0
|
||||
_0806D09C:
|
||||
lsls r0, r0, #8
|
||||
orrs r0, r1
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x5e
|
||||
strh r0, [r1]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0806D0A8: .4byte gScreen
|
||||
_0806D0AC: .4byte 0x00003F3F
|
||||
.syntax divided
|
||||
@@ -1,96 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r3, r1, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806D540
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r0, _0806D5B0 @ =gUnk_08114100
|
||||
adds r0, r3, r0
|
||||
ldrb r0, [r0]
|
||||
adds r0, #6
|
||||
strb r0, [r4, #0xf]
|
||||
strb r0, [r4, #0x1e]
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0xe]
|
||||
_0806D540:
|
||||
ldr r0, [r4, #0x50]
|
||||
ldrh r1, [r0, #0x2e]
|
||||
strh r1, [r4, #0x2e]
|
||||
ldrh r1, [r0, #0x32]
|
||||
strh r1, [r4, #0x32]
|
||||
adds r0, #0x62
|
||||
ldrb r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x62
|
||||
strb r0, [r1]
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r0, #0x63
|
||||
ldrb r0, [r0]
|
||||
adds r1, #1
|
||||
strb r0, [r1]
|
||||
ldr r0, [r4, #0x50]
|
||||
ldrb r1, [r0, #0x1b]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x1b]
|
||||
movs r0, #0x3f
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1b]
|
||||
ldrb r0, [r4, #0xd]
|
||||
cmp r0, #0
|
||||
bne _0806D590
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
lsls r1, r3, #4
|
||||
subs r0, r0, r1
|
||||
adds r0, #0xc
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
movs r2, #0x18
|
||||
movs r3, #0x40
|
||||
bl CheckPlayerProximity
|
||||
cmp r0, #0
|
||||
beq _0806D5B4
|
||||
_0806D590:
|
||||
ldrb r1, [r4, #0x1e]
|
||||
ldrb r0, [r4, #0xf]
|
||||
adds r0, #2
|
||||
cmp r1, r0
|
||||
bge _0806D5D0
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0806D5D0
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r0, [r4, #0x1e]
|
||||
adds r0, #1
|
||||
b _0806D5CE
|
||||
.align 2, 0
|
||||
_0806D5B0: .4byte gUnk_08114100
|
||||
_0806D5B4:
|
||||
ldrb r1, [r4, #0x1e]
|
||||
ldrb r0, [r4, #0xf]
|
||||
cmp r1, r0
|
||||
bls _0806D5D0
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0806D5D0
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0xe]
|
||||
subs r0, r1, #1
|
||||
_0806D5CE:
|
||||
strb r0, [r4, #0x1e]
|
||||
_0806D5D0:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,46 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
ldr r4, _0806D6CC @ =gUnk_08114104
|
||||
movs r0, #0
|
||||
ldrsb r0, [r4, r0]
|
||||
movs r1, #1
|
||||
rsbs r1, r1, #0
|
||||
cmp r0, r1
|
||||
beq _0806D6CA
|
||||
adds r6, r1, #0
|
||||
_0806D690:
|
||||
movs r1, #0
|
||||
ldrsb r1, [r4, r1]
|
||||
adds r0, r5, #0
|
||||
movs r2, #0x40
|
||||
bl CreateFx
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0806D6C0
|
||||
movs r0, #1
|
||||
ldrsb r0, [r4, r0]
|
||||
ldrh r2, [r1, #0x2e]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r1, #0x2e]
|
||||
movs r0, #2
|
||||
ldrsb r0, [r4, r0]
|
||||
ldrh r2, [r1, #0x32]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r1, #0x32]
|
||||
ldrb r0, [r4, #3]
|
||||
strb r0, [r1, #0x15]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r1, #0x24]
|
||||
_0806D6C0:
|
||||
adds r4, #4
|
||||
movs r0, #0
|
||||
ldrsb r0, [r4, r0]
|
||||
cmp r0, r6
|
||||
bne _0806D690
|
||||
_0806D6CA:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0806D6CC: .4byte gUnk_08114104
|
||||
.syntax divided
|
||||
@@ -1,72 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r1, _080537DC @ =gMenu
|
||||
movs r2, #0
|
||||
movs r3, #1
|
||||
strb r3, [r1, #6]
|
||||
movs r4, #0
|
||||
movs r0, #0x78
|
||||
strh r0, [r1, #8]
|
||||
movs r0, #0x1e
|
||||
strh r0, [r1, #0xa]
|
||||
strb r4, [r1, #0x10]
|
||||
ldr r0, _080537E0 @ =gUI
|
||||
strb r3, [r0, #6]
|
||||
ldr r0, _080537E4 @ =gMapBottom
|
||||
str r2, [r0]
|
||||
ldr r0, _080537E8 @ =gMapTop
|
||||
str r2, [r0]
|
||||
ldr r0, _080537EC @ =gRoomControls
|
||||
str r2, [r0, #0x30]
|
||||
strh r2, [r0, #0xc]
|
||||
strh r2, [r0, #0xa]
|
||||
bl sub_0801B170
|
||||
movs r0, #0
|
||||
bl DispReset
|
||||
ldr r2, _080537F0 @ =gScreen
|
||||
movs r0, #0x99
|
||||
lsls r0, r0, #6
|
||||
strh r0, [r2]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x66
|
||||
ldr r0, _080537F4 @ =0x00002244
|
||||
strh r0, [r1]
|
||||
adds r1, #2
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
strh r0, [r1]
|
||||
subs r1, #8
|
||||
movs r0, #0x1f
|
||||
strh r0, [r1]
|
||||
adds r1, #2
|
||||
movs r0, #0x3f
|
||||
strh r0, [r1]
|
||||
subs r1, #0xa
|
||||
movs r0, #0xf0
|
||||
strh r0, [r1]
|
||||
adds r1, #4
|
||||
movs r0, #0x60
|
||||
strh r0, [r1]
|
||||
ldr r0, _080537F8 @ =0x00001C4E
|
||||
strh r0, [r2, #0x14]
|
||||
ldr r0, _080537FC @ =0x00001DC1
|
||||
strh r0, [r2, #0x20]
|
||||
movs r0, #0xf
|
||||
bl SoundReq
|
||||
bl ResetSystemPriority
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
movs r0, #5
|
||||
bl SetFade
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080537DC: .4byte gMenu
|
||||
_080537E0: .4byte gUI
|
||||
_080537E4: .4byte gMapBottom
|
||||
_080537E8: .4byte gMapTop
|
||||
_080537EC: .4byte gRoomControls
|
||||
_080537F0: .4byte gScreen
|
||||
_080537F4: .4byte 0x00002244
|
||||
_080537F8: .4byte 0x00001C4E
|
||||
_080537FC: .4byte 0x00001DC1
|
||||
.syntax divided
|
||||
@@ -1,201 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r6, r1, #0
|
||||
ldrb r1, [r4, #0xe]
|
||||
movs r0, #8
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080772C6
|
||||
adds r0, r4, #0
|
||||
bl sub_08077F10
|
||||
cmp r0, #0
|
||||
beq _080772C6
|
||||
movs r0, #1
|
||||
strb r0, [r4, #7]
|
||||
_080772C6:
|
||||
movs r0, #0x71
|
||||
bl GetInventoryValue
|
||||
cmp r0, #1
|
||||
bne _08077318
|
||||
ldrb r1, [r4, #0xe]
|
||||
movs r5, #7
|
||||
adds r0, r5, #0
|
||||
ands r0, r1
|
||||
cmp r0, #3
|
||||
beq _08077300
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl sub_08077E3C
|
||||
ldr r3, _080772F8 @ =gPlayerEntity
|
||||
ldr r2, _080772FC @ =gUnk_0811BE16
|
||||
ldrb r1, [r4, #0xe]
|
||||
adds r0, r5, #0
|
||||
ands r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
lsls r0, r0, #1
|
||||
b _0807732E
|
||||
.align 2, 0
|
||||
_080772F8: .4byte gPlayerEntity
|
||||
_080772FC: .4byte gUnk_0811BE16
|
||||
_08077300:
|
||||
adds r0, r4, #0
|
||||
bl UpdateItemAnim
|
||||
ldr r3, _08077310 @ =gPlayerEntity
|
||||
ldr r2, _08077314 @ =gUnk_0811BE16
|
||||
ldrb r1, [r4, #0xe]
|
||||
adds r0, r5, #0
|
||||
b _08077326
|
||||
.align 2, 0
|
||||
_08077310: .4byte gPlayerEntity
|
||||
_08077314: .4byte gUnk_0811BE16
|
||||
_08077318:
|
||||
adds r0, r4, #0
|
||||
bl UpdateItemAnim
|
||||
ldr r3, _0807736C @ =gPlayerEntity
|
||||
ldr r2, _08077370 @ =gUnk_0811BE16
|
||||
ldrb r1, [r4, #0xe]
|
||||
movs r0, #7
|
||||
_08077326:
|
||||
ands r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
_0807732E:
|
||||
strh r0, [r3, #0x24]
|
||||
ldr r5, _0807736C @ =gPlayerEntity
|
||||
ldrb r0, [r5, #0x14]
|
||||
lsls r0, r0, #2
|
||||
strb r0, [r5, #0x15]
|
||||
movs r1, #0x24
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r0, #0
|
||||
beq _08077344
|
||||
bl UpdatePlayerMovement
|
||||
_08077344:
|
||||
ldrb r1, [r4, #0xe]
|
||||
movs r0, #0x10
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0807738C
|
||||
ldrb r0, [r4, #7]
|
||||
cmp r0, #0
|
||||
beq _08077374
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x59
|
||||
movs r1, #1
|
||||
strb r1, [r0]
|
||||
bl sub_080774A0
|
||||
cmp r0, #0
|
||||
beq _08077374
|
||||
movs r0, #0
|
||||
strb r0, [r4, #7]
|
||||
b _0807743E
|
||||
.align 2, 0
|
||||
_0807736C: .4byte gPlayerEntity
|
||||
_08077370: .4byte gUnk_0811BE16
|
||||
_08077374:
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl DeletePlayerItem
|
||||
ldr r0, _08077388 @ =gPlayerState
|
||||
adds r0, #0x3d
|
||||
movs r1, #0
|
||||
strb r1, [r0]
|
||||
b _0807743E
|
||||
.align 2, 0
|
||||
_08077388: .4byte gPlayerState
|
||||
_0807738C:
|
||||
movs r0, #0x60
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0807743E
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x59
|
||||
movs r6, #1
|
||||
strb r6, [r0]
|
||||
adds r0, r5, #0
|
||||
bl sub_0807B5B0
|
||||
cmp r0, #0
|
||||
beq _080773BC
|
||||
movs r0, #0x84
|
||||
lsls r0, r0, #1
|
||||
bl SoundReq
|
||||
ldrb r2, [r4, #0xe]
|
||||
adds r0, r5, #0
|
||||
movs r1, #0x1e
|
||||
movs r3, #0
|
||||
bl CreateObjectWithParent
|
||||
b _0807743E
|
||||
_080773BC:
|
||||
ldr r1, _08077440 @ =0x0000051C
|
||||
adds r0, r4, #0
|
||||
bl sub_08077DF4
|
||||
adds r0, r5, #0
|
||||
movs r1, #0x1d
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r3, r0, #0
|
||||
cmp r3, #0
|
||||
beq _080773F6
|
||||
ldrb r0, [r4, #0xa]
|
||||
strb r0, [r3, #0x14]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
lsrs r1, r1, #0x1d
|
||||
subs r1, #1
|
||||
adds r3, #0x29
|
||||
movs r0, #7
|
||||
ands r1, r0
|
||||
ldrb r2, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
_080773F6:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0x1d
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r3, r0, #0
|
||||
cmp r3, #0
|
||||
beq _08077432
|
||||
ldrb r0, [r4, #0xa]
|
||||
strb r0, [r3, #0x14]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
lsrs r1, r1, #0x1d
|
||||
subs r1, #1
|
||||
movs r0, #0x29
|
||||
adds r0, r0, r3
|
||||
mov ip, r0
|
||||
movs r0, #7
|
||||
ands r1, r0
|
||||
mov r0, ip
|
||||
ldrb r2, [r0]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
mov r1, ip
|
||||
strb r0, [r1]
|
||||
strb r6, [r3, #0xf]
|
||||
_08077432:
|
||||
movs r0, #3
|
||||
strb r0, [r4, #4]
|
||||
strb r6, [r4, #5]
|
||||
ldr r0, _08077444 @ =0x00000119
|
||||
bl SoundReq
|
||||
_0807743E:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08077440: .4byte 0x0000051C
|
||||
_08077444: .4byte 0x00000119
|
||||
.syntax divided
|
||||
@@ -1,127 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r6, r1, #0
|
||||
ldr r5, _08076220 @ =gPlayerState
|
||||
ldrb r0, [r5, #4]
|
||||
cmp r0, #0
|
||||
bne _080762B8
|
||||
ldrb r0, [r5, #2]
|
||||
cmp r0, #0
|
||||
beq _080761DE
|
||||
ldr r0, [r5, #0x30]
|
||||
ldr r1, _08076224 @ =0x00001201
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080762B8
|
||||
_080761DE:
|
||||
ldr r1, _08076228 @ =gPlayerEntity
|
||||
ldrb r2, [r1, #0x14]
|
||||
movs r0, #0x80
|
||||
orrs r0, r2
|
||||
strb r0, [r5, #1]
|
||||
adds r1, #0x3d
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
cmp r0, #8
|
||||
bgt _080762B8
|
||||
bl sub_080789A8
|
||||
adds r3, r0, #0
|
||||
cmp r3, #1
|
||||
beq _08076258
|
||||
cmp r3, #1
|
||||
blo _0807626E
|
||||
cmp r3, #2
|
||||
bne _080762C0
|
||||
ldr r0, _0807622C @ =gCarriedEntity
|
||||
ldr r2, [r0, #8]
|
||||
ldrb r1, [r2, #0x16]
|
||||
movs r0, #0xf
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08076230
|
||||
adds r0, r4, #0
|
||||
adds r1, r2, #0
|
||||
adds r2, r6, #0
|
||||
bl sub_08076088
|
||||
b _080762C0
|
||||
.align 2, 0
|
||||
_08076220: .4byte gPlayerState
|
||||
_08076224: .4byte 0x00001201
|
||||
_08076228: .4byte gPlayerEntity
|
||||
_0807622C: .4byte gCarriedEntity
|
||||
_08076230:
|
||||
str r2, [r4, #0x18]
|
||||
strb r3, [r2, #0xc]
|
||||
movs r1, #5
|
||||
strb r1, [r2, #0xd]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0xa8
|
||||
strb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r1, r2, #0
|
||||
movs r2, #2
|
||||
adds r3, r6, #0
|
||||
bl sub_080762C4
|
||||
ldr r0, _08076254 @ =gUnk_0200AF00
|
||||
adds r0, #0x2e
|
||||
movs r1, #8
|
||||
strb r1, [r0]
|
||||
b _08076264
|
||||
.align 2, 0
|
||||
_08076254: .4byte gUnk_0200AF00
|
||||
_08076258:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
movs r2, #1
|
||||
adds r3, r6, #0
|
||||
bl sub_080762C4
|
||||
_08076264:
|
||||
movs r0, #0x81
|
||||
lsls r0, r0, #1
|
||||
bl SoundReq
|
||||
b _080762C0
|
||||
_0807626E:
|
||||
movs r0, #5
|
||||
strb r0, [r4, #4]
|
||||
movs r0, #0xf
|
||||
strb r0, [r4, #7]
|
||||
movs r0, #6
|
||||
strb r0, [r4, #0xf]
|
||||
movs r3, #8
|
||||
adds r1, r3, #0
|
||||
asrs r1, r6
|
||||
ldrb r2, [r5, #0xa]
|
||||
adds r0, r1, #0
|
||||
orrs r0, r2
|
||||
strb r0, [r5, #0xa]
|
||||
ldrb r0, [r5, #0xb]
|
||||
orrs r1, r0
|
||||
strb r1, [r5, #0xb]
|
||||
ldr r0, [r5, #0x30]
|
||||
ands r0, r3
|
||||
cmp r0, #0
|
||||
bne _080762A2
|
||||
movs r1, #0xde
|
||||
lsls r1, r1, #2
|
||||
adds r0, r4, #0
|
||||
bl sub_08077DF4
|
||||
b _080762AA
|
||||
_080762A2:
|
||||
ldr r1, _080762B4 @ =0x00000948
|
||||
adds r0, r4, #0
|
||||
bl sub_08077DF4
|
||||
_080762AA:
|
||||
movs r0, #0x88
|
||||
bl SoundReq
|
||||
b _080762C0
|
||||
.align 2, 0
|
||||
_080762B4: .4byte 0x00000948
|
||||
_080762B8:
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl sub_08077F50
|
||||
_080762C0:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,32 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806BA18
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD50
|
||||
ldr r1, _0806BA30 @ =gUnk_08114F30
|
||||
ldrb r2, [r4, #0x19]
|
||||
lsrs r0, r2, #6
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #6
|
||||
movs r0, #0x3f
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x19]
|
||||
_0806BA18:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl ExecuteScriptForEntity
|
||||
adds r0, r4, #0
|
||||
bl HandleEntity0x82Actions
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0806BA30: .4byte gUnk_08114F30
|
||||
.syntax divided
|
||||
@@ -1,114 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
mov sb, r0
|
||||
adds r4, r1, #0
|
||||
ldr r0, _0806BA58 @ =0x00004912
|
||||
mov r8, r0
|
||||
movs r0, #0
|
||||
str r0, [r4, #0x14]
|
||||
movs r0, #0x73
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _0806BA60
|
||||
ldr r0, _0806BA5C @ =0x00004913
|
||||
mov r8, r0
|
||||
b _0806BB06
|
||||
.align 2, 0
|
||||
_0806BA58: .4byte 0x00004912
|
||||
_0806BA5C: .4byte 0x00004913
|
||||
_0806BA60:
|
||||
movs r0, #0x39
|
||||
bl GetInventoryValue
|
||||
adds r7, r0, #0
|
||||
movs r0, #0x3a
|
||||
bl GetInventoryValue
|
||||
adds r6, r0, #0
|
||||
movs r0, #0x3b
|
||||
bl GetInventoryValue
|
||||
adds r5, r0, #0
|
||||
cmp r7, #1
|
||||
bne _0806BA88
|
||||
ldr r0, _0806BA84 @ =0x00004906
|
||||
mov r8, r0
|
||||
str r7, [r4, #0x14]
|
||||
b _0806BAA2
|
||||
.align 2, 0
|
||||
_0806BA84: .4byte 0x00004906
|
||||
_0806BA88:
|
||||
cmp r6, #1
|
||||
bne _0806BA98
|
||||
ldr r0, _0806BA94 @ =0x00004907
|
||||
mov r8, r0
|
||||
str r6, [r4, #0x14]
|
||||
b _0806BAA2
|
||||
.align 2, 0
|
||||
_0806BA94: .4byte 0x00004907
|
||||
_0806BA98:
|
||||
cmp r5, #1
|
||||
bne _0806BAB4
|
||||
ldr r0, _0806BAB0 @ =0x00004908
|
||||
mov r8, r0
|
||||
str r5, [r4, #0x14]
|
||||
_0806BAA2:
|
||||
movs r0, #0x6b
|
||||
bl SetLocalFlag
|
||||
movs r0, #0x6a
|
||||
bl SetLocalFlag
|
||||
b _0806BB06
|
||||
.align 2, 0
|
||||
_0806BAB0: .4byte 0x00004908
|
||||
_0806BAB4:
|
||||
movs r0, #0x6a
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _0806BB06
|
||||
movs r0, #0x6b
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _0806BAD0
|
||||
ldr r0, _0806BACC @ =0x00004901
|
||||
b _0806BAD6
|
||||
.align 2, 0
|
||||
_0806BACC: .4byte 0x00004901
|
||||
_0806BAD0:
|
||||
cmp r7, #0
|
||||
bne _0806BAE4
|
||||
ldr r0, _0806BAE0 @ =0x00004902
|
||||
_0806BAD6:
|
||||
mov r8, r0
|
||||
movs r0, #0x6b
|
||||
bl SetLocalFlag
|
||||
b _0806BB06
|
||||
.align 2, 0
|
||||
_0806BAE0: .4byte 0x00004902
|
||||
_0806BAE4:
|
||||
cmp r6, #0
|
||||
bne _0806BAF8
|
||||
ldr r0, _0806BAF4 @ =0x00004903
|
||||
mov r8, r0
|
||||
movs r0, #0x6d
|
||||
bl SetLocalFlag
|
||||
b _0806BB06
|
||||
.align 2, 0
|
||||
_0806BAF4: .4byte 0x00004903
|
||||
_0806BAF8:
|
||||
cmp r5, #0
|
||||
bne _0806BB06
|
||||
ldr r0, _0806BB18 @ =0x00004904
|
||||
mov r8, r0
|
||||
movs r0, #0x70
|
||||
bl SetLocalFlag
|
||||
_0806BB06:
|
||||
mov r0, r8
|
||||
mov r1, sb
|
||||
bl MessageNoOverlap
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0806BB18: .4byte 0x00004904
|
||||
.syntax divided
|
||||
@@ -1,133 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x54]
|
||||
cmp r0, #0
|
||||
bne _08018E82
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
adds r0, r4, #0
|
||||
movs r1, #5
|
||||
bl sub_08008790
|
||||
b _08018EA8
|
||||
_08018E82:
|
||||
adds r0, #0x3a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #4
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08018E92
|
||||
bl DeleteThisEntity
|
||||
_08018E92:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x41
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08018EA8
|
||||
adds r0, r4, #0
|
||||
bl sub_08018F6C
|
||||
b _08018F62
|
||||
_08018EA8:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0xff
|
||||
beq _08018F46
|
||||
adds r0, r4, #0
|
||||
bl LinearMoveUpdate
|
||||
ldrb r0, [r4, #0x15]
|
||||
cmp r0, #8
|
||||
beq _08018EEA
|
||||
cmp r0, #8
|
||||
bgt _08018ECC
|
||||
cmp r0, #0
|
||||
beq _08018ED6
|
||||
b _08018EEE
|
||||
_08018ECC:
|
||||
cmp r0, #0x10
|
||||
beq _08018EDE
|
||||
cmp r0, #0x18
|
||||
beq _08018EE4
|
||||
b _08018EEE
|
||||
_08018ED6:
|
||||
movs r6, #0
|
||||
movs r5, #4
|
||||
rsbs r5, r5, #0
|
||||
b _08018EEE
|
||||
_08018EDE:
|
||||
movs r6, #0
|
||||
movs r5, #4
|
||||
b _08018EEE
|
||||
_08018EE4:
|
||||
movs r6, #4
|
||||
rsbs r6, r6, #0
|
||||
b _08018EEC
|
||||
_08018EEA:
|
||||
movs r6, #4
|
||||
_08018EEC:
|
||||
movs r5, #0
|
||||
_08018EEE:
|
||||
ldr r1, [r4, #0x54]
|
||||
cmp r1, #0
|
||||
beq _08018F00
|
||||
ldrb r0, [r4, #0x15]
|
||||
strb r0, [r1, #0x15]
|
||||
ldr r1, [r4, #0x54]
|
||||
adds r0, r4, #0
|
||||
bl CopyPosition
|
||||
_08018F00:
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
bne _08018F0C
|
||||
adds r0, r4, #0
|
||||
bl sub_0800451C
|
||||
_08018F0C:
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
adds r2, r5, #0
|
||||
bl sub_080B1A0C
|
||||
ldr r1, _08018F64 @ =gUnk_080B3DF4
|
||||
bl sub_08007DD6
|
||||
cmp r0, #0
|
||||
bne _08018F62
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
adds r2, r5, #0
|
||||
bl GetRelativeCollisionTile
|
||||
cmp r0, #0x74
|
||||
beq _08018F62
|
||||
ldr r1, _08018F68 @ =gUnk_08003E44
|
||||
movs r0, #0x2e
|
||||
ldrsh r2, [r4, r0]
|
||||
adds r2, r2, r6
|
||||
movs r0, #0x32
|
||||
ldrsh r3, [r4, r0]
|
||||
adds r3, r3, r5
|
||||
adds r0, r4, #0
|
||||
bl sub_080040D8
|
||||
cmp r0, #0
|
||||
beq _08018F62
|
||||
_08018F46:
|
||||
ldr r0, [r4, #0x54]
|
||||
cmp r0, #0
|
||||
bne _08018F56
|
||||
ldrb r1, [r4, #0xa]
|
||||
adds r1, #0xd
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_08018F56:
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
bl sub_08018F6C
|
||||
_08018F62:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08018F64: .4byte gUnk_080B3DF4
|
||||
_08018F68: .4byte gUnk_08003E44
|
||||
.syntax divided
|
||||
@@ -1,59 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, [r4, #0x54]
|
||||
adds r0, #0x6c
|
||||
ldrh r0, [r0]
|
||||
ldrb r2, [r1, #8]
|
||||
cmp r0, r2
|
||||
beq _080ACFE8
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x6e
|
||||
ldrh r0, [r0]
|
||||
ldrb r2, [r1, #9]
|
||||
cmp r0, r2
|
||||
bne _080AD034
|
||||
_080ACFE8:
|
||||
ldrb r0, [r1, #0xc]
|
||||
cmp r0, #2
|
||||
beq _080ACFF8
|
||||
bl sub_08079184
|
||||
bl DeleteThisEntity
|
||||
b _080AD03C
|
||||
_080ACFF8:
|
||||
ldr r0, _080AD02C @ =gPlayerState
|
||||
ldrb r0, [r0, #5]
|
||||
cmp r0, #0
|
||||
beq _080AD00E
|
||||
ldr r0, _080AD030 @ =gPlayerEntity
|
||||
adds r0, #0x79
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080AD03C
|
||||
_080AD00E:
|
||||
adds r0, r4, #0
|
||||
bl sub_080AD27C
|
||||
ldrb r0, [r4, #0xd]
|
||||
adds r0, #1
|
||||
movs r2, #0
|
||||
strb r0, [r4, #0xd]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x15]
|
||||
str r2, [r4, #0x20]
|
||||
b _080AD03C
|
||||
.align 2, 0
|
||||
_080AD02C: .4byte gPlayerState
|
||||
_080AD030: .4byte gPlayerEntity
|
||||
_080AD034:
|
||||
bl sub_08079184
|
||||
bl DeleteThisEntity
|
||||
_080AD03C:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,290 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, [r4, #0x54]
|
||||
ldrb r0, [r5, #0xc]
|
||||
cmp r0, #2
|
||||
beq _080AD050
|
||||
bl DeleteThisEntity
|
||||
_080AD050:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x41
|
||||
ldrb r1, [r0]
|
||||
movs r3, #0x80
|
||||
adds r0, r3, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080AD064
|
||||
movs r0, #0
|
||||
str r0, [r4, #0x34]
|
||||
_080AD064:
|
||||
movs r1, #0x24
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
bne _080AD06E
|
||||
b _080AD220
|
||||
_080AD06E:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x42
|
||||
ldrb r1, [r2]
|
||||
adds r0, r3, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080AD088
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x3e
|
||||
ldrb r0, [r0]
|
||||
movs r1, #0
|
||||
strb r0, [r4, #0x15]
|
||||
strb r1, [r2]
|
||||
_080AD088:
|
||||
ldr r2, _080AD0B0 @ =gUnk_081320C4
|
||||
ldrb r0, [r4, #0x15]
|
||||
lsrs r0, r0, #2
|
||||
adds r1, r0, r2
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #0x18
|
||||
asrs r1, r1, #0x18
|
||||
adds r0, #1
|
||||
adds r0, r0, r2
|
||||
movs r2, #0
|
||||
ldrsb r2, [r0, r2]
|
||||
adds r0, r4, #0
|
||||
bl GetRelativeCollisionTile
|
||||
cmp r0, #0x74
|
||||
bne _080AD0B4
|
||||
adds r0, r4, #0
|
||||
bl LinearMoveUpdate
|
||||
b _080AD0C8
|
||||
.align 2, 0
|
||||
_080AD0B0: .4byte gUnk_081320C4
|
||||
_080AD0B4:
|
||||
adds r0, r4, #0
|
||||
bl sub_080B1B0C
|
||||
cmp r0, #0x24
|
||||
beq _080AD0C8
|
||||
cmp r0, #0x26
|
||||
beq _080AD0C8
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement10
|
||||
_080AD0C8:
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #6
|
||||
adds r0, r4, #0
|
||||
bl GravityUpdate
|
||||
cmp r0, #0
|
||||
beq _080AD0D8
|
||||
b _080AD202
|
||||
_080AD0D8:
|
||||
ldr r0, [r4, #0x20]
|
||||
str r0, [r5, #0x20]
|
||||
ldr r0, [r4, #0x2c]
|
||||
str r0, [r5, #0x2c]
|
||||
ldr r0, [r4, #0x30]
|
||||
str r0, [r5, #0x30]
|
||||
ldr r0, [r4, #0x34]
|
||||
str r0, [r5, #0x34]
|
||||
adds r0, r4, #0
|
||||
bl GetTileUnderEntity
|
||||
cmp r0, #0x11
|
||||
bhi _080AD0FC
|
||||
cmp r0, #0x10
|
||||
bhs _080AD104
|
||||
cmp r0, #0xd
|
||||
beq _080AD104
|
||||
b _080AD14E
|
||||
_080AD0FC:
|
||||
cmp r0, #0x13
|
||||
beq _080AD104
|
||||
cmp r0, #0x5a
|
||||
bne _080AD14E
|
||||
_080AD104:
|
||||
cmp r5, r4
|
||||
bne _080AD146
|
||||
cmp r0, #0x11
|
||||
bhi _080AD116
|
||||
cmp r0, #0x10
|
||||
bhs _080AD12C
|
||||
cmp r0, #0xd
|
||||
beq _080AD120
|
||||
b _080AD142
|
||||
_080AD116:
|
||||
cmp r0, #0x13
|
||||
beq _080AD138
|
||||
cmp r0, #0x5a
|
||||
beq _080AD126
|
||||
b _080AD142
|
||||
_080AD120:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
b _080AD130
|
||||
_080AD126:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xc
|
||||
b _080AD130
|
||||
_080AD12C:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xb
|
||||
_080AD130:
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
b _080AD142
|
||||
_080AD138:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x52
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
_080AD142:
|
||||
movs r0, #4
|
||||
b _080AD148
|
||||
_080AD146:
|
||||
movs r0, #3
|
||||
_080AD148:
|
||||
strb r0, [r5, #0xd]
|
||||
bl DeleteThisEntity
|
||||
_080AD14E:
|
||||
ldr r0, [r4, #0x54]
|
||||
cmp r0, r4
|
||||
bne _080AD178
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0xff
|
||||
beq _080AD1DA
|
||||
cmp r0, #0xf
|
||||
bne _080AD16A
|
||||
ldrb r1, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
movs r2, #0x80
|
||||
bl CreateFx
|
||||
b _080AD1DA
|
||||
_080AD16A:
|
||||
ldrb r1, [r4, #0xb]
|
||||
ldrb r2, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
movs r3, #0
|
||||
bl CreateObjectWithParent
|
||||
b _080AD1DA
|
||||
_080AD178:
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
bne _080AD188
|
||||
adds r0, r5, #0
|
||||
bl sub_080AD32C
|
||||
cmp r0, #0
|
||||
beq _080AD1E0
|
||||
_080AD188:
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #1
|
||||
bne _080AD196
|
||||
movs r0, #0x82
|
||||
lsls r0, r0, #1
|
||||
bl SoundReq
|
||||
_080AD196:
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
movs r0, #3
|
||||
strb r0, [r5, #0xd]
|
||||
ldrb r2, [r4, #0x19]
|
||||
lsrs r2, r2, #6
|
||||
lsls r2, r2, #6
|
||||
ldrb r3, [r5, #0x19]
|
||||
movs r1, #0x3f
|
||||
adds r0, r1, #0
|
||||
ands r0, r3
|
||||
orrs r0, r2
|
||||
strb r0, [r5, #0x19]
|
||||
ldrb r0, [r4, #0x1b]
|
||||
lsrs r0, r0, #6
|
||||
lsls r0, r0, #6
|
||||
ldrb r2, [r5, #0x1b]
|
||||
ands r1, r2
|
||||
orrs r1, r0
|
||||
strb r1, [r5, #0x1b]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
adds r3, r5, #0
|
||||
adds r3, #0x29
|
||||
lsrs r1, r1, #0x1d
|
||||
ldrb r2, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
_080AD1DA:
|
||||
bl DeleteThisEntity
|
||||
b _080AD26E
|
||||
_080AD1E0:
|
||||
movs r0, #0x82
|
||||
lsls r0, r0, #1
|
||||
bl SoundReq
|
||||
ldrb r0, [r4, #0xe]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #9
|
||||
str r0, [r4, #0x20]
|
||||
movs r1, #0x24
|
||||
ldrsh r0, [r4, r1]
|
||||
lsrs r1, r0, #0x1f
|
||||
adds r0, r0, r1
|
||||
asrs r0, r0, #1
|
||||
strh r0, [r4, #0x24]
|
||||
b _080AD26E
|
||||
_080AD202:
|
||||
adds r0, r4, #0
|
||||
bl sub_0800451C
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F8DC
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
bl CopyPosition
|
||||
ldr r0, [r4, #0x20]
|
||||
str r0, [r5, #0x20]
|
||||
ldrb r0, [r4, #0x15]
|
||||
strb r0, [r5, #0x15]
|
||||
b _080AD26E
|
||||
_080AD220:
|
||||
ldr r1, _080AD240 @ =gPlayerEntity
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r0, [r0]
|
||||
movs r5, #1
|
||||
ands r5, r0
|
||||
cmp r5, #0
|
||||
beq _080AD244
|
||||
movs r0, #0x79
|
||||
bl SoundReq
|
||||
adds r0, r4, #0
|
||||
bl sub_080AD27C
|
||||
b _080AD26E
|
||||
.align 2, 0
|
||||
_080AD240: .4byte gPlayerEntity
|
||||
_080AD244:
|
||||
ldr r0, _080AD270 @ =gPlayerState
|
||||
ldrb r0, [r0, #5]
|
||||
cmp r0, #0
|
||||
beq _080AD25A
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x79
|
||||
ldrb r1, [r0]
|
||||
adds r0, r3, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080AD26E
|
||||
_080AD25A:
|
||||
adds r0, r4, #0
|
||||
bl sub_080AD27C
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
strb r1, [r4, #0x10]
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x15]
|
||||
str r5, [r4, #0x20]
|
||||
_080AD26E:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_080AD270: .4byte gPlayerState
|
||||
.syntax divided
|
||||
@@ -1,89 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r3, r0, #0
|
||||
ldr r4, [r3, #0x54]
|
||||
ldr r1, _080AD2AC @ =gPlayerEntity
|
||||
movs r0, #0
|
||||
str r0, [r1, #0x74]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x6c
|
||||
ldrh r0, [r0]
|
||||
adds r5, r1, #0
|
||||
ldrb r1, [r4, #8]
|
||||
cmp r0, r1
|
||||
bne _080AD320
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x6e
|
||||
ldrh r0, [r0]
|
||||
ldrb r1, [r4, #9]
|
||||
cmp r0, r1
|
||||
bne _080AD320
|
||||
cmp r4, r3
|
||||
beq _080AD2B0
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xd]
|
||||
b _080AD2C2
|
||||
.align 2, 0
|
||||
_080AD2AC: .4byte gPlayerEntity
|
||||
_080AD2B0:
|
||||
adds r2, r3, #0
|
||||
adds r2, #0x29
|
||||
ldrb r0, [r2]
|
||||
movs r1, #0x39
|
||||
rsbs r1, r1, #0
|
||||
ands r1, r0
|
||||
movs r0, #0x18
|
||||
orrs r1, r0
|
||||
strb r1, [r2]
|
||||
_080AD2C2:
|
||||
ldr r0, [r4, #0x48]
|
||||
str r0, [r3, #0x48]
|
||||
ldrb r1, [r3, #0x16]
|
||||
lsrs r1, r1, #4
|
||||
ldr r2, _080AD318 @ =gUnk_081320CC
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r3, #0x24]
|
||||
ldr r0, _080AD31C @ =gUnk_081320D4
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r0, [r1]
|
||||
str r0, [r3, #0x20]
|
||||
ldrh r0, [r4, #0x36]
|
||||
adds r0, #8
|
||||
strh r0, [r4, #0x36]
|
||||
strh r0, [r3, #0x36]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x38
|
||||
ldrb r1, [r0]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x38
|
||||
strb r1, [r0]
|
||||
ldrh r0, [r5, #0x32]
|
||||
strh r0, [r3, #0x32]
|
||||
ldrh r0, [r5, #0x2e]
|
||||
strh r0, [r3, #0x2e]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x3c
|
||||
ldrb r1, [r0]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3c
|
||||
strb r1, [r0]
|
||||
ldrb r1, [r3, #0x10]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r3, #0x10]
|
||||
adds r0, r3, #0
|
||||
bl sub_0801766C
|
||||
b _080AD328
|
||||
.align 2, 0
|
||||
_080AD318: .4byte gUnk_081320CC
|
||||
_080AD31C: .4byte gUnk_081320D4
|
||||
_080AD320:
|
||||
bl sub_08079184
|
||||
bl DeleteThisEntity
|
||||
_080AD328:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,67 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r1, [r2, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
movs r0, #1
|
||||
strb r0, [r2, #0xc]
|
||||
adds r3, r2, #0
|
||||
adds r3, #0x29
|
||||
ldrb r1, [r3]
|
||||
subs r0, #0x3a
|
||||
ands r0, r1
|
||||
movs r1, #0x18
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
ldrb r1, [r2, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x10]
|
||||
ldrb r1, [r2, #0xa]
|
||||
adds r0, r1, #0
|
||||
cmp r0, #0xff
|
||||
bne _0801B28A
|
||||
movs r0, #0x3c
|
||||
b _0801B29C
|
||||
_0801B28A:
|
||||
cmp r0, #0xfe
|
||||
bne _0801B29A
|
||||
movs r0, #0xf
|
||||
strb r0, [r2, #0xe]
|
||||
movs r0, #0xff
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0xa]
|
||||
b _0801B29E
|
||||
_0801B29A:
|
||||
movs r0, #0x96
|
||||
_0801B29C:
|
||||
strb r0, [r2, #0xe]
|
||||
_0801B29E:
|
||||
ldr r0, _0801B2BC @ =gUnk_080B77F4
|
||||
str r0, [r2, #0x48]
|
||||
movs r0, #0
|
||||
strb r0, [r2, #0x16]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x68
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #7
|
||||
bne _0801B2C0
|
||||
adds r0, r2, #0
|
||||
movs r1, #5
|
||||
bl InitializeAnimation
|
||||
b _0801B2C8
|
||||
.align 2, 0
|
||||
_0801B2BC: .4byte gUnk_080B77F4
|
||||
_0801B2C0:
|
||||
adds r0, r2, #0
|
||||
movs r1, #0x15
|
||||
bl InitializeAnimation
|
||||
_0801B2C8:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,42 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0800442E
|
||||
cmp r0, #0
|
||||
bne _0801B2DE
|
||||
adds r0, r4, #0
|
||||
bl RegisterCarryEntity
|
||||
_0801B2DE:
|
||||
movs r0, #8
|
||||
bl IsItemEquipped
|
||||
cmp r0, #1
|
||||
beq _0801B2F6
|
||||
cmp r0, #1
|
||||
blo _0801B2F2
|
||||
cmp r0, #2
|
||||
beq _0801B2FA
|
||||
b _0801B2FC
|
||||
_0801B2F2:
|
||||
movs r5, #1
|
||||
b _0801B2FC
|
||||
_0801B2F6:
|
||||
movs r5, #2
|
||||
b _0801B2FC
|
||||
_0801B2FA:
|
||||
movs r5, #0
|
||||
_0801B2FC:
|
||||
ldr r0, _0801B314 @ =gPlayerState
|
||||
adds r0, #0x92
|
||||
ldrh r0, [r0]
|
||||
ands r5, r0
|
||||
cmp r5, #0
|
||||
beq _0801B310
|
||||
movs r0, #0
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
_0801B310:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0801B314: .4byte gPlayerState
|
||||
.syntax divided
|
||||
@@ -1,65 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xf]
|
||||
movs r5, #8
|
||||
cmp r0, #0x28
|
||||
bhi _0801B3F4
|
||||
movs r5, #4
|
||||
ldr r1, [r4, #0x68]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #8
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0801B3C4
|
||||
adds r0, r1, #0
|
||||
subs r0, #0x10
|
||||
b _0801B3C8
|
||||
_0801B3C4:
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x10
|
||||
_0801B3C8:
|
||||
str r0, [r4, #0x68]
|
||||
ldr r1, [r4, #0x68]
|
||||
movs r2, #0xf0
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
subs r0, #1
|
||||
cmp r0, #0x7f
|
||||
bls _0801B3E0
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #8
|
||||
eors r1, r0
|
||||
str r1, [r4, #0x68]
|
||||
_0801B3E0:
|
||||
ldr r0, [r4, #0x68]
|
||||
ands r0, r2
|
||||
movs r2, #0x98
|
||||
lsls r2, r2, #1
|
||||
subs r2, r2, r0
|
||||
adds r0, r4, #0
|
||||
adds r1, r2, #0
|
||||
movs r3, #0
|
||||
bl SetAffineInfo
|
||||
_0801B3F4:
|
||||
ldrb r0, [r4, #0xf]
|
||||
ands r0, r5
|
||||
cmp r0, #0
|
||||
bne _0801B408
|
||||
ldrb r1, [r4, #0x1a]
|
||||
movs r0, #0x10
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x1a]
|
||||
b _0801B416
|
||||
_0801B408:
|
||||
ldrb r0, [r4, #0x1a]
|
||||
lsrs r2, r0, #4
|
||||
movs r1, #0x10
|
||||
rsbs r1, r1, #0
|
||||
ands r1, r0
|
||||
orrs r1, r2
|
||||
strb r1, [r4, #0x1a]
|
||||
_0801B416:
|
||||
pop {r4, r5, pc}
|
||||
.syntax divided
|
||||
@@ -1,207 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
movs r3, #1
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r5, [r4, #0xa]
|
||||
cmp r5, #0
|
||||
bne _08018FF6
|
||||
b _080190FC
|
||||
_08018FF6:
|
||||
ldrb r1, [r4, #0x18]
|
||||
subs r0, #5
|
||||
ands r0, r1
|
||||
orrs r0, r3
|
||||
strb r0, [r4, #0x18]
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
movs r0, #0x6a
|
||||
str r0, [r4, #0x74]
|
||||
ldrb r0, [r4, #0xb]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x40
|
||||
strb r0, [r1]
|
||||
movs r0, #0xa6
|
||||
strh r0, [r4, #0x12]
|
||||
ldrb r0, [r1]
|
||||
adds r6, r1, #0
|
||||
cmp r0, #0xe
|
||||
bne _08019026
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
b _0801902A
|
||||
_08019026:
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #2
|
||||
_0801902A:
|
||||
strh r0, [r4, #0x24]
|
||||
ldrb r0, [r4, #0x14]
|
||||
lsls r0, r0, #2
|
||||
strb r0, [r4, #0x15]
|
||||
ldr r2, _0801905C @ =gPlayerEntity
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x3c
|
||||
ldrb r0, [r0]
|
||||
adds r0, #1
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x3c
|
||||
strb r0, [r1]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x3b
|
||||
ldrb r0, [r0]
|
||||
subs r1, #1
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
adds r5, r2, #0
|
||||
cmp r0, #2
|
||||
bne _08019060
|
||||
movs r0, #1
|
||||
b _08019062
|
||||
.align 2, 0
|
||||
_0801905C: .4byte gPlayerEntity
|
||||
_08019060:
|
||||
movs r0, #0
|
||||
_08019062:
|
||||
strb r0, [r4, #0xb]
|
||||
ldrb r1, [r5, #0x1b]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x1b]
|
||||
movs r0, #0x3f
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1b]
|
||||
ldrb r0, [r4, #0x14]
|
||||
lsrs r0, r0, #1
|
||||
lsls r3, r0, #1
|
||||
adds r3, r3, r0
|
||||
lsls r3, r3, #2
|
||||
ldr r0, _080190F8 @ =gUnk_080B3E40
|
||||
adds r3, r3, r0
|
||||
movs r0, #0
|
||||
ldrsb r0, [r3, r0]
|
||||
ldrh r1, [r5, #0x2e]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r0, #1
|
||||
ldrsb r0, [r3, r0]
|
||||
ldrh r5, [r5, #0x32]
|
||||
adds r0, r0, r5
|
||||
strh r0, [r4, #0x32]
|
||||
ldrb r1, [r3, #2]
|
||||
movs r0, #1
|
||||
ands r1, r0
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
ldrb r1, [r3, #3]
|
||||
lsls r1, r1, #7
|
||||
movs r2, #0x7f
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
ldrb r0, [r3, #6]
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x58
|
||||
strb r0, [r5]
|
||||
movs r0, #4
|
||||
ldrsb r0, [r3, r0]
|
||||
str r0, [r4, #0x6c]
|
||||
movs r0, #5
|
||||
ldrsb r0, [r3, r0]
|
||||
str r0, [r4, #0x70]
|
||||
ldr r0, [r3, #8]
|
||||
str r0, [r4, #0x48]
|
||||
adds r0, r4, #0
|
||||
bl sub_0801766C
|
||||
ldrb r0, [r6]
|
||||
cmp r0, #0xe
|
||||
bne _080190E8
|
||||
ldrb r0, [r5]
|
||||
adds r0, #6
|
||||
strb r0, [r5]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x60
|
||||
movs r0, #0
|
||||
strh r0, [r1]
|
||||
_080190E8:
|
||||
ldrb r1, [r5]
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
movs r0, #0xfc
|
||||
bl SoundReq
|
||||
b _08019178
|
||||
.align 2, 0
|
||||
_080190F8: .4byte gUnk_080B3E40
|
||||
_080190FC:
|
||||
ldrb r1, [r4, #0x11]
|
||||
movs r0, #0x10
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #6
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x11]
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x1e]
|
||||
ldr r2, _08019168 @ =gUnk_080B3E40
|
||||
ldrb r1, [r4, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r2
|
||||
ldrb r1, [r0, #2]
|
||||
ands r1, r3
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
ldr r0, _0801916C @ =gPlayerState
|
||||
str r4, [r0, #0x2c]
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
movs r2, #3
|
||||
bl LoadSwapGFX
|
||||
adds r0, r4, #0
|
||||
bl sub_08079BD8
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0xa
|
||||
bne _08019170
|
||||
movs r0, #0x3c
|
||||
str r0, [r4, #0x78]
|
||||
ldrb r1, [r4, #0xa]
|
||||
movs r0, #0x43
|
||||
movs r2, #1
|
||||
bl CreateObject
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _08019172
|
||||
adds r0, r4, #0
|
||||
bl CopyPosition
|
||||
b _08019172
|
||||
.align 2, 0
|
||||
_08019168: .4byte gUnk_080B3E40
|
||||
_0801916C: .4byte gPlayerState
|
||||
_08019170:
|
||||
str r5, [r4, #0x78]
|
||||
_08019172:
|
||||
adds r0, r4, #0
|
||||
bl sub_0801917C
|
||||
_08019178:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,158 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, _08054B14 @ =gPlayerEntity
|
||||
ldrb r1, [r5, #0x14]
|
||||
movs r0, #0xe
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x14]
|
||||
ldr r1, [r4, #0x48]
|
||||
ldr r2, _08054B18 @ =gUnk_080FEEB0
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r0, r0, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
ldr r1, [r4, #0x48]
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1, #1]
|
||||
ldr r0, [r4, #0x48]
|
||||
movs r1, #4
|
||||
strb r1, [r0, #6]
|
||||
ldr r0, [r4, #0x48]
|
||||
strb r1, [r0, #7]
|
||||
ldrb r7, [r5, #0x1e]
|
||||
adds r6, r7, #0
|
||||
cmp r6, #0x36
|
||||
bhi _08054B06
|
||||
ldrh r0, [r5, #0x12]
|
||||
cmp r0, #6
|
||||
beq _08054B1C
|
||||
_08054B06:
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x1e]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
b _08054B68
|
||||
.align 2, 0
|
||||
_08054B14: .4byte gPlayerEntity
|
||||
_08054B18: .4byte gUnk_080FEEB0
|
||||
_08054B1C:
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
ldrb r2, [r5, #0x18]
|
||||
movs r1, #0x40
|
||||
ands r1, r2
|
||||
ldrb r3, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r3
|
||||
orrs r0, r1
|
||||
lsrs r2, r2, #7
|
||||
lsls r2, r2, #7
|
||||
movs r1, #0x7f
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
strb r0, [r4, #0x18]
|
||||
ldrb r0, [r4, #0x1e]
|
||||
cmp r6, r0
|
||||
beq _08054B52
|
||||
strb r7, [r4, #0x1e]
|
||||
ldrb r1, [r4, #0x1e]
|
||||
ldrh r2, [r4, #0x12]
|
||||
adds r0, r4, #0
|
||||
bl sub_080042D0
|
||||
_08054B52:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x5a
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x5b
|
||||
ldrb r0, [r0]
|
||||
adds r1, #1
|
||||
strb r0, [r1]
|
||||
_08054B68:
|
||||
movs r0, #0x10
|
||||
bl IsItemEquipped
|
||||
cmp r0, #1
|
||||
bhi _08054BFC
|
||||
ldrb r0, [r4, #0x1e]
|
||||
cmp r0, #0xff
|
||||
beq _08054BE8
|
||||
ldr r0, _08054BF4 @ =gPlayerEntity
|
||||
ldrb r0, [r0, #0x18]
|
||||
lsls r0, r0, #0x1e
|
||||
cmp r0, #0
|
||||
beq _08054BE8
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0xff
|
||||
bne _08054BE8
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #0x45
|
||||
movs r1, #0
|
||||
movs r2, #0x10
|
||||
bl CreateObject
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _08054BE8
|
||||
movs r3, #0x80
|
||||
lsls r3, r3, #0xa
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
movs r2, #0
|
||||
bl PositionRelative
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
adds r3, r5, #0
|
||||
adds r3, #0x29
|
||||
lsrs r1, r1, #0x1d
|
||||
ldrb r2, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
ldr r1, _08054BF8 @ =gUnk_080FEEB0
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0]
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x62
|
||||
strb r0, [r2]
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r0, #1
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x63
|
||||
strb r1, [r0]
|
||||
_08054BE8:
|
||||
ldr r1, _08054BF4 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
bl sub_08078E84
|
||||
b _08054C00
|
||||
.align 2, 0
|
||||
_08054BF4: .4byte gPlayerEntity
|
||||
_08054BF8: .4byte gUnk_080FEEB0
|
||||
_08054BFC:
|
||||
bl DeleteThisEntity
|
||||
_08054C00:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,76 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, _080A7860 @ =gPlayerState
|
||||
ldr r0, [r5, #0x2c]
|
||||
cmp r0, r4
|
||||
beq _080A7834
|
||||
bl DeleteThisEntity
|
||||
_080A7834:
|
||||
ldrb r0, [r5, #4]
|
||||
cmp r0, #0
|
||||
beq _080A78AE
|
||||
ldrb r0, [r5, #2]
|
||||
cmp r0, #0
|
||||
bne _080A7846
|
||||
str r0, [r5, #0x2c]
|
||||
bl DeleteThisEntity
|
||||
_080A7846:
|
||||
ldr r2, _080A7864 @ =gPlayerEntity
|
||||
adds r6, r2, #0
|
||||
adds r6, #0x5a
|
||||
ldrb r1, [r6]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A7868
|
||||
movs r0, #0
|
||||
str r0, [r5, #0x2c]
|
||||
bl DeleteThisEntity
|
||||
b _080A78B4
|
||||
.align 2, 0
|
||||
_080A7860: .4byte gPlayerState
|
||||
_080A7864: .4byte gPlayerEntity
|
||||
_080A7868:
|
||||
adds r0, r4, #0
|
||||
adds r1, r2, #0
|
||||
bl sub_080A78B8
|
||||
ldrb r1, [r6]
|
||||
movs r0, #0x20
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A7880
|
||||
movs r0, #0x77
|
||||
bl SoundReq
|
||||
_080A7880:
|
||||
ldrb r0, [r4, #0x1e]
|
||||
cmp r0, #0x8a
|
||||
bls _080A788A
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x1e]
|
||||
_080A788A:
|
||||
ldrb r1, [r6]
|
||||
movs r0, #8
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A78A4
|
||||
ldrb r0, [r4, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r4, #0
|
||||
bl sub_080A7B98
|
||||
b _080A78B4
|
||||
_080A78A4:
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
b _080A78B4
|
||||
_080A78AE:
|
||||
str r0, [r5, #0x2c]
|
||||
bl DeleteThisEntity
|
||||
_080A78B4:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,220 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r4, r0, #0
|
||||
adds r6, r1, #0
|
||||
ldr r0, _080A78E8 @ =gPlayerState
|
||||
ldrb r1, [r0, #0x1b]
|
||||
movs r0, #0x20
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A78FC
|
||||
ldrb r0, [r6, #0x1e]
|
||||
subs r0, #0x6a
|
||||
strb r0, [r4, #0x1e]
|
||||
ldr r0, _080A78EC @ =gRoomTransition
|
||||
ldr r0, [r0]
|
||||
movs r1, #4
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A78F0
|
||||
ldrb r1, [r4, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
adds r1, #0xb1
|
||||
b _080A78F2
|
||||
.align 2, 0
|
||||
_080A78E8: .4byte gPlayerState
|
||||
_080A78EC: .4byte gRoomTransition
|
||||
_080A78F0:
|
||||
ldrb r1, [r4, #0x1e]
|
||||
_080A78F2:
|
||||
ldrh r2, [r4, #0x12]
|
||||
adds r0, r4, #0
|
||||
bl sub_080042D0
|
||||
b _080A7912
|
||||
_080A78FC:
|
||||
ldrb r0, [r6, #0x1e]
|
||||
subs r0, #0x6a
|
||||
ldrb r1, [r4, #0x1e]
|
||||
cmp r0, r1
|
||||
beq _080A7912
|
||||
strb r0, [r4, #0x1e]
|
||||
ldrb r1, [r4, #0x1e]
|
||||
ldrh r2, [r4, #0x12]
|
||||
adds r0, r4, #0
|
||||
bl sub_080042D0
|
||||
_080A7912:
|
||||
ldr r2, _080A792C @ =gPlayerState
|
||||
ldrb r1, [r2, #0x1b]
|
||||
movs r0, #0x40
|
||||
ands r0, r1
|
||||
adds r7, r2, #0
|
||||
cmp r0, #0
|
||||
beq _080A7930
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
b _080A7958
|
||||
.align 2, 0
|
||||
_080A792C: .4byte gPlayerState
|
||||
_080A7930:
|
||||
ldrb r1, [r6, #0x14]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A7946
|
||||
ldrb r0, [r6, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
lsrs r2, r0, #0x1f
|
||||
movs r0, #1
|
||||
eors r2, r0
|
||||
b _080A794C
|
||||
_080A7946:
|
||||
ldrb r0, [r6, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
lsrs r2, r0, #0x1f
|
||||
_080A794C:
|
||||
lsls r2, r2, #6
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
_080A7958:
|
||||
strb r0, [r4, #0x18]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x41
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
mov r8, r2
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x3d
|
||||
cmp r0, #0
|
||||
beq _080A7A1C
|
||||
adds r3, r6, #0
|
||||
adds r3, #0x3d
|
||||
ldrb r0, [r3]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
beq _080A7980
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0x81
|
||||
bne _080A79AE
|
||||
_080A7980:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x3d
|
||||
ldrb r0, [r2]
|
||||
movs r1, #0
|
||||
strb r0, [r3]
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x3e
|
||||
ldrb r0, [r5]
|
||||
adds r3, r6, #0
|
||||
adds r3, #0x3e
|
||||
strb r0, [r3]
|
||||
movs r3, #0x42
|
||||
adds r3, r3, r4
|
||||
mov ip, r3
|
||||
ldrb r0, [r3]
|
||||
adds r3, r6, #0
|
||||
adds r3, #0x42
|
||||
strb r0, [r3]
|
||||
mov r0, ip
|
||||
strb r1, [r0]
|
||||
strb r1, [r5]
|
||||
strb r1, [r2]
|
||||
adds r5, r2, #0
|
||||
_080A79AE:
|
||||
ldr r0, [r7, #0x30]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x14
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080A79C4
|
||||
ldrb r1, [r7, #0x1b]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r7, #0x1b]
|
||||
b _080A7A1C
|
||||
_080A79C4:
|
||||
ldrb r0, [r7, #0x1b]
|
||||
cmp r0, #0
|
||||
beq _080A7A1C
|
||||
mov r1, r8
|
||||
ldrb r0, [r1]
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
cmp r1, #0x43
|
||||
beq _080A79E6
|
||||
cmp r1, #0x43
|
||||
bgt _080A79E0
|
||||
cmp r1, #0xd
|
||||
beq _080A79E6
|
||||
b _080A7A08
|
||||
_080A79E0:
|
||||
cmp r1, #0x44
|
||||
bne _080A7A08
|
||||
b _080A7A1C
|
||||
_080A79E6:
|
||||
ldrb r1, [r7, #0x1b]
|
||||
movs r0, #8
|
||||
orrs r0, r1
|
||||
strb r0, [r7, #0x1b]
|
||||
adds r1, r6, #0
|
||||
adds r1, #0x42
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r7, #0x1b]
|
||||
movs r0, #0x20
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080A7A1C
|
||||
movs r0, #0xfe
|
||||
ands r0, r1
|
||||
strb r0, [r7, #0x1b]
|
||||
b _080A7A1C
|
||||
_080A7A08:
|
||||
ldrb r0, [r7, #0x1b]
|
||||
movs r1, #0xc0
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
bne _080A7A1C
|
||||
strb r1, [r7, #0x1b]
|
||||
strb r1, [r7, #4]
|
||||
str r1, [r7, #0x2c]
|
||||
bl DeleteThisEntity
|
||||
_080A7A1C:
|
||||
adds r1, r5, #0
|
||||
ldrb r0, [r1]
|
||||
movs r2, #0
|
||||
ldrsb r2, [r1, r2]
|
||||
cmp r2, #0
|
||||
beq _080A7A36
|
||||
cmp r2, #0
|
||||
ble _080A7A32
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
b _080A7A36
|
||||
_080A7A32:
|
||||
adds r0, #1
|
||||
strb r0, [r5]
|
||||
_080A7A36:
|
||||
adds r0, r4, #0
|
||||
bl sub_080A7A54
|
||||
ldrb r0, [r4, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
cmp r0, #0
|
||||
bge _080A7A4C
|
||||
ldr r1, [r4, #0x48]
|
||||
ldrb r0, [r1]
|
||||
rsbs r0, r0, #0
|
||||
strb r0, [r1]
|
||||
_080A7A4C:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,47 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
movs r4, #0
|
||||
ldr r0, _08078970 @ =gCarriedEntity
|
||||
ldrb r1, [r0, #2]
|
||||
adds r2, r0, #0
|
||||
cmp r4, r1
|
||||
bhs _080789A6
|
||||
ldr r0, [r2, #0xc]
|
||||
cmp r0, r5
|
||||
bne _08078974
|
||||
subs r0, r1, #1
|
||||
b _0807898C
|
||||
.align 2, 0
|
||||
_08078970: .4byte gCarriedEntity
|
||||
_08078974:
|
||||
adds r4, #1
|
||||
ldrb r3, [r2, #2]
|
||||
cmp r4, r3
|
||||
bhs _080789A6
|
||||
lsls r0, r4, #2
|
||||
adds r1, r2, #0
|
||||
adds r1, #0xc
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
cmp r0, r5
|
||||
bne _08078974
|
||||
subs r0, r3, #1
|
||||
_0807898C:
|
||||
strb r0, [r2, #2]
|
||||
ldrb r0, [r2, #2]
|
||||
cmp r4, r0
|
||||
bhs _080789A6
|
||||
lsls r0, r4, #2
|
||||
adds r0, #0xc
|
||||
adds r1, r0, r2
|
||||
_0807899A:
|
||||
ldr r0, [r1, #4]
|
||||
stm r1!, {r0}
|
||||
adds r4, #1
|
||||
ldrb r0, [r2, #2]
|
||||
cmp r4, r0
|
||||
blo _0807899A
|
||||
_080789A6:
|
||||
pop {r4, r5, pc}
|
||||
.syntax divided
|
||||
@@ -1,20 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldr r2, _08078950 @ =gCarriedEntity
|
||||
ldrb r0, [r2, #2]
|
||||
cmp r0, #0x1f
|
||||
bhi _0807894C
|
||||
lsls r0, r0, #2
|
||||
adds r1, r2, #0
|
||||
adds r1, #0xc
|
||||
adds r0, r0, r1
|
||||
str r3, [r0]
|
||||
ldrb r0, [r2, #2]
|
||||
adds r0, #1
|
||||
strb r0, [r2, #2]
|
||||
_0807894C:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08078950: .4byte gCarriedEntity
|
||||
.syntax divided
|
||||
+12
-1
@@ -491,7 +491,18 @@ void ResetSystemPriority(void);
|
||||
*/
|
||||
extern LinkedList gEntityLists[9];
|
||||
extern Entity gItemGetEntities[7];
|
||||
extern Entity gCarriedEntity;
|
||||
|
||||
typedef struct {
|
||||
u8 unk_0;
|
||||
u8 unk_1;
|
||||
u8 count;
|
||||
u8 unk_3;
|
||||
u16 unk_4;
|
||||
u8 unk_6[2];
|
||||
Entity* unk_8;
|
||||
Entity* unk_c[0x20];
|
||||
} CarriedEntity;
|
||||
extern CarriedEntity gCarriedEntity;
|
||||
|
||||
/**
|
||||
* Current number of entities.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#ifndef NEW_PLAYER_H
|
||||
#define NEW_PLAYER_H
|
||||
|
||||
#include "entity.h"
|
||||
|
||||
// TODO Use new player entity struct everywhere once it is fully discovered.
|
||||
@@ -18,4 +21,6 @@ typedef struct {
|
||||
/*0x80*/ u8 unk_80[8];
|
||||
} PlayerEntity;
|
||||
|
||||
#define gNewPlayerEntity (*(PlayerEntity*)&gPlayerEntity)
|
||||
#define gNewPlayerEntity (*(PlayerEntity*)&gPlayerEntity)
|
||||
|
||||
#endif
|
||||
+1
-1
@@ -303,7 +303,7 @@ typedef struct {
|
||||
/*0xf*/ u8 field_0xf;
|
||||
/*0x10*/ u16 field_0x10;
|
||||
/*0x12*/ u8 field_0x12[6];
|
||||
/*0x18*/ u32 field_0x18;
|
||||
/*0x18*/ Entity* field_0x18;
|
||||
} ItemBehavior;
|
||||
|
||||
extern void (*const gPlayerItemFunctions[])(Entity*);
|
||||
|
||||
+1
-2
@@ -231,7 +231,6 @@ void EraseAllEntities(void) {
|
||||
}
|
||||
|
||||
extern Entity gUnk_030015A0[0x48];
|
||||
extern Entity gCarriedEntity;
|
||||
|
||||
NONMATCH("asm/non_matching/GetEmptyEntity.inc", Entity* GetEmptyEntity()) {
|
||||
u8 flags_ip;
|
||||
@@ -262,7 +261,7 @@ NONMATCH("asm/non_matching/GetEmptyEntity.inc", Entity* GetEmptyEntity()) {
|
||||
ClearDeletedEntity(ptr);
|
||||
return ptr;
|
||||
}
|
||||
} while (++ptr < &gCarriedEntity);
|
||||
} while (++ptr < (Entity*)&gCarriedEntity);
|
||||
|
||||
flags_ip = 0;
|
||||
rv = NULL;
|
||||
|
||||
+28
-1
@@ -246,6 +246,8 @@ extern void (*const gUnk_080FD138[])(void);
|
||||
|
||||
extern const u16 gUnk_080FD964[];
|
||||
|
||||
extern void sub_0801B170(void);
|
||||
|
||||
void GameTask(void) {
|
||||
static GameState* const sStates[] = {
|
||||
GameTask_Transition,
|
||||
@@ -1865,7 +1867,32 @@ void sub_0805373C(void) {
|
||||
gUnk_080FCD40[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053758.inc", void sub_08053758())
|
||||
void sub_08053758(void) {
|
||||
gMenu.overlayType = 1;
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gMenu.field_0xa = 0x1e;
|
||||
*((u8*)&gMenu + 0x10) = 0; // TODO
|
||||
gUI.field_0x6 = 1;
|
||||
gMapBottom.bgControlPtr = NULL;
|
||||
gMapTop.bgControlPtr = NULL;
|
||||
gRoomControls.camera_target = NULL;
|
||||
gRoomControls.scroll_y = 0;
|
||||
gRoomControls.scroll_x = 0;
|
||||
sub_0801B170();
|
||||
DispReset(0);
|
||||
gScreen.lcd.displayControl = 0x2640;
|
||||
gScreen.controls.layerFXControl = 0x2244;
|
||||
gScreen.controls.alphaBlend = 0x1000;
|
||||
gScreen.controls.windowInsideControl = 0x1f;
|
||||
gScreen.controls.windowOutsideControl = 0x3f;
|
||||
gScreen.controls.window0HorizontalDimensions = 0xf0;
|
||||
gScreen.controls.window0VerticalDimensions = 0x60;
|
||||
gScreen.bg1.control = 0x1c4e;
|
||||
gScreen.bg2.control = 0x1dc1;
|
||||
SoundReq(BGM_STORY);
|
||||
ResetSystemPriority();
|
||||
SetFade(5, 0x100);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800())
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ extern u8 gUnk_03003DE0;
|
||||
extern u8 gUnk_03000C30;
|
||||
|
||||
extern u8 gUpdateVisibleTiles;
|
||||
extern Entity gCarriedEntity;
|
||||
extern Entity* gPlayerClones[3];
|
||||
extern u16 gUnk_080B2CD8[];
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#include "item.h"
|
||||
#include "functions.h"
|
||||
#include "sound.h"
|
||||
#include "effects.h"
|
||||
#include "object.h"
|
||||
|
||||
extern void (*const gUnk_0811BE04[])(ItemBehavior*, u32);
|
||||
|
||||
@@ -12,6 +14,10 @@ extern s32 sub_0800875A(Entity*, u32, ItemBehavior*);
|
||||
|
||||
extern void UpdatePlayerMovement(void);
|
||||
|
||||
extern bool32 sub_0807B5B0(Entity*);
|
||||
|
||||
extern const s16 gUnk_0811BE16[];
|
||||
|
||||
void ItemMoleMitts(ItemBehavior* this, u32 arg1) {
|
||||
gUnk_0811BE04[this->stateID](this, arg1);
|
||||
}
|
||||
@@ -83,7 +89,64 @@ void sub_080771C8(ItemBehavior* this, u32 arg1) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/itemMoleMitts/sub_080772A8.inc", void sub_080772A8(ItemBehavior* this, u32 arg1))
|
||||
void sub_080772A8(ItemBehavior* this, u32 param_2) {
|
||||
Entity* effect;
|
||||
|
||||
if (((this->field_0x5[9] & 8) != 0) && sub_08077F10(this)) {
|
||||
this->field_0x5[2] = 1;
|
||||
}
|
||||
if (GetInventoryValue(ITEM_DIG_BUTTERFLY) == 1) {
|
||||
if ((this->field_0x5[9] & 7) != 3) {
|
||||
sub_08077E3C(this, 2);
|
||||
gPlayerEntity.speed = gUnk_0811BE16[this->field_0x5[9] & 7] << 1;
|
||||
} else {
|
||||
UpdateItemAnim(this);
|
||||
gPlayerEntity.speed = gUnk_0811BE16[this->field_0x5[9] & 7];
|
||||
}
|
||||
} else {
|
||||
UpdateItemAnim(this);
|
||||
gPlayerEntity.speed = gUnk_0811BE16[this->field_0x5[9] & 7];
|
||||
}
|
||||
gPlayerEntity.direction = gPlayerEntity.animationState << 2;
|
||||
if (gPlayerEntity.speed != 0) {
|
||||
UpdatePlayerMovement();
|
||||
}
|
||||
if ((this->field_0x5[9] & 0x10) != 0) {
|
||||
if (this->field_0x5[2] != 0) {
|
||||
gPlayerEntity.frameDuration = 1;
|
||||
if (sub_080774A0()) {
|
||||
this->field_0x5[2] = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
DeletePlayerItem(this, param_2);
|
||||
gPlayerState.field_0x3c[1] = 0;
|
||||
} else {
|
||||
if ((this->field_0x5[9] & 0x60) != 0) {
|
||||
gPlayerEntity.frameDuration = 1;
|
||||
if (sub_0807B5B0(&gPlayerEntity)) {
|
||||
SoundReq(SFX_108);
|
||||
CreateObjectWithParent(&gPlayerEntity, OBJECT_1E, this->field_0x5[9], 0);
|
||||
} else {
|
||||
sub_08077DF4(this, 0x51c);
|
||||
effect = CreateFx(&gPlayerEntity, FX_STARS_STRIKE, 0);
|
||||
if (effect != NULL) {
|
||||
effect->animationState = this->field_0x5[5];
|
||||
effect->spritePriority.b0 = gPlayerEntity.spritePriority.b0 - 1;
|
||||
}
|
||||
effect = CreateFx(&gPlayerEntity, FX_STARS_STRIKE, 0);
|
||||
if (effect != NULL) {
|
||||
effect->animationState = this->field_0x5[5];
|
||||
effect->spritePriority.b0 = gPlayerEntity.spritePriority.b0 - 1;
|
||||
effect->field_0xf = 1;
|
||||
}
|
||||
this->stateID = 3;
|
||||
this->field_0x5[0] = 1;
|
||||
SoundReq(SFX_ITEM_GLOVES_KNOCKBACK);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08077448(ItemBehavior* this, u32 arg1) {
|
||||
gPlayerEntity.direction = gPlayerEntity.animationState << 2 ^ 0x10;
|
||||
|
||||
@@ -1,17 +1,68 @@
|
||||
#include "item.h"
|
||||
#include "functions.h"
|
||||
#include "sound.h"
|
||||
|
||||
extern void (*const gUnk_0811BDB4[])(ItemBehavior*, u32);
|
||||
|
||||
u32 sub_08077F64(ItemBehavior* arg0, u32 unk);
|
||||
|
||||
u32 sub_080789A8(void);
|
||||
void sub_080762C4(ItemBehavior*, void*, u8, u32);
|
||||
void sub_08076088(ItemBehavior*, void*, u32);
|
||||
|
||||
void ItemTryPickupObject(ItemBehavior* this, u32 arg1) {
|
||||
gUnk_0811BDB4[this->stateID](this, arg1);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc", void ItemPickupCheck(ItemBehavior* this, u32 arg1))
|
||||
void ItemPickupCheck(ItemBehavior* this, u32 param_2) {
|
||||
Entity* entity;
|
||||
|
||||
void sub_080762C4(ItemBehavior* this, u32 arg1, u8 arg2, u32 arg3) {
|
||||
if (!(((gPlayerState.field_0x3[1] != 0) ||
|
||||
(((gPlayerState.jump_status != 0 && ((gPlayerState.flags & (PL_BUSY | PL_FALLING | PL_IN_MINECART)) == 0)) ||
|
||||
(gPlayerState.field_0x0[1] = gPlayerEntity.animationState | 0x80, 8 < gPlayerEntity.iframes)))))) {
|
||||
|
||||
switch (sub_080789A8()) {
|
||||
case 2:
|
||||
if (((gCarriedEntity.unk_8)->field_0x16 & 0xf) == 0) {
|
||||
sub_08076088(this, gCarriedEntity.unk_8, param_2);
|
||||
return;
|
||||
}
|
||||
entity = gCarriedEntity.unk_8;
|
||||
this->field_0x18 = entity;
|
||||
entity->action = 2;
|
||||
entity->subAction = 5;
|
||||
gPlayerState.framestate = 5;
|
||||
sub_080762C4(this, entity, 2, param_2);
|
||||
gUnk_0200AF00.unk_2e = 8;
|
||||
SoundReq(SFX_102);
|
||||
break;
|
||||
case 1:
|
||||
sub_080762C4(this, 0, 1, param_2);
|
||||
SoundReq(SFX_102);
|
||||
break;
|
||||
case 0:
|
||||
this->stateID = 5;
|
||||
this->field_0x5[2] = 0x0f;
|
||||
this->field_0xf = 6;
|
||||
gPlayerState.field_0xa = (8 >> param_2) | gPlayerState.field_0xa;
|
||||
gPlayerState.keepFacing = (8 >> param_2) | gPlayerState.keepFacing;
|
||||
if ((gPlayerState.flags & PL_NO_CAP) == 0) {
|
||||
sub_08077DF4(this, 0x378);
|
||||
} else {
|
||||
sub_08077DF4(this, 0x948);
|
||||
}
|
||||
SoundReq(SFX_88);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
sub_08077F50(this, param_2);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080762C4(ItemBehavior* this, void* arg1, u8 arg2, u32 arg3) {
|
||||
this->field_0x18 = arg1;
|
||||
gPlayerState.heldObject = arg2;
|
||||
sub_08077D38(this, arg3);
|
||||
@@ -25,7 +76,7 @@ void sub_08076488(ItemBehavior* this, u32 arg1) {
|
||||
|
||||
if (this->field_0x5[2] == 0) {
|
||||
if (sub_08077F64(this, arg1) != 0) {
|
||||
if (((*(u8*)((this->field_0x18) + 0x16) & 0xf0) == 0x10) && ((gRoomTransition.frameCount & 1U) != 0)) {
|
||||
if ((((this->field_0x18->field_0x16) & 0xf0) == 0x10) && ((gRoomTransition.frameCount & 1U) != 0)) {
|
||||
return;
|
||||
}
|
||||
UpdateItemAnim(this);
|
||||
|
||||
+78
-3
@@ -34,6 +34,17 @@ Entity* sub_0806D00C(Entity* this);
|
||||
|
||||
void sub_0806D4C0(Entity*, u32);
|
||||
|
||||
extern const u8 gUnk_08114100[];
|
||||
|
||||
typedef struct {
|
||||
s8 type;
|
||||
s8 x;
|
||||
s8 y;
|
||||
u8 direction;
|
||||
} struct_08114104;
|
||||
|
||||
extern const struct_08114104 gUnk_08114104[];
|
||||
|
||||
void BigGoron(Entity* this) {
|
||||
gUnk_081140D4[this->type](this);
|
||||
}
|
||||
@@ -85,7 +96,27 @@ Entity* sub_0806D00C(Entity* this) {
|
||||
return entity;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/bigGoron/sub_0806D02C.inc", void sub_0806D02C(Entity* this))
|
||||
void sub_0806D02C(Entity* this) {
|
||||
s32 tmp1;
|
||||
s32 tmp2;
|
||||
sub_0806D164(this);
|
||||
|
||||
gScreen.lcd.displayControl |= 0x4000;
|
||||
gScreen.controls.windowInsideControl = 0x3f3f;
|
||||
gScreen.controls.windowOutsideControl = 0x3d;
|
||||
|
||||
tmp1 = -(s16)gScreen.bg1.xOffset;
|
||||
tmp2 = tmp1 + 0x100;
|
||||
tmp1 = min(max(0, tmp1), 0xf0);
|
||||
tmp2 = min(max(0, tmp2), 0xf0);
|
||||
gScreen.controls.window1HorizontalDimensions = (tmp1 << 8) | tmp2;
|
||||
|
||||
tmp1 = -(s16)gScreen.bg1.yOffset;
|
||||
tmp2 = tmp1 + 0x100;
|
||||
tmp1 = min(max(0, tmp1), 0xa0);
|
||||
tmp2 = min(max(0, tmp2), 0xa0);
|
||||
gScreen.controls.window1VerticalDimensions = (tmp1 << 8) | tmp2;
|
||||
}
|
||||
|
||||
void sub_0806D0B0(Entity* this) {
|
||||
gMapTop.bgControlPtr = 0;
|
||||
@@ -310,7 +341,39 @@ void sub_0806D514(Entity* this) {
|
||||
sub_0806D520(this, 3);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/bigGoron/sub_0806D520.inc", void sub_0806D520(Entity* this, u32 param))
|
||||
void sub_0806D520(Entity* this, u32 param_2) {
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->field_0xf = gUnk_08114100[param_2] + 6;
|
||||
this->frameIndex = this->field_0xf;
|
||||
this->actionDelay = 8;
|
||||
}
|
||||
this->x.HALF.HI = this->parent->x.HALF.HI;
|
||||
this->y.HALF.HI = this->parent->y.HALF.HI;
|
||||
this->spriteOffsetX = this->parent->spriteOffsetX;
|
||||
this->spriteOffsetY = this->parent->spriteOffsetY;
|
||||
this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY;
|
||||
if (this->subAction != 0 ||
|
||||
CheckPlayerProximity(this->x.HALF.HI + param_2 * -0x10 + 0xc, this->y.HALF.HI, 0x18, 0x40)) {
|
||||
if (this->frameIndex >= this->field_0xf + 2) {
|
||||
return;
|
||||
}
|
||||
if (--this->actionDelay != 0) {
|
||||
return;
|
||||
}
|
||||
this->actionDelay = 8;
|
||||
this->frameIndex++;
|
||||
} else {
|
||||
if (this->frameIndex <= this->field_0xf) {
|
||||
return;
|
||||
}
|
||||
if (--this->actionDelay != 0) {
|
||||
return;
|
||||
}
|
||||
this->actionDelay = 8;
|
||||
this->frameIndex--;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806D5D4(void) {
|
||||
u32 itemSlot;
|
||||
@@ -357,7 +420,19 @@ void sub_0806D66C(Entity* this) {
|
||||
this->spriteOrientation.flipY = 2;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/bigGoron/sub_0806D67C.inc", void sub_0806D67C(Entity* this))
|
||||
void sub_0806D67C(Entity* this) {
|
||||
const struct_08114104* ptr = gUnk_08114104;
|
||||
while (ptr->type != -1) {
|
||||
Entity* effect = CreateFx(this, ptr->type, 0x40);
|
||||
if (effect != NULL) {
|
||||
effect->x.HALF.HI = ptr->x + effect->x.HALF.HI;
|
||||
effect->y.HALF.HI = ptr->y + effect->y.HALF.HI;
|
||||
effect->direction = ptr->direction;
|
||||
effect->speed = 0x100;
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806D6D0(void) {
|
||||
Entity* entity = FindEntity(NPC, BIG_GORON, 7, 2, 0);
|
||||
|
||||
+61
-3
@@ -10,10 +10,68 @@ extern u16 gUnk_08113078[];
|
||||
|
||||
extern void sub_08095BE0(Entity*, u32);
|
||||
|
||||
ASM_FUNC("asm/non_matching/librarians/Librarians.inc", void Librarians(Entity* this))
|
||||
extern const u8 gUnk_08114F30[];
|
||||
|
||||
ASM_FUNC("asm/non_matching/librarians/sub_0806BA34.inc",
|
||||
void sub_0806BA34(Entity* this, ScriptExecutionContext* context))
|
||||
void Librarians(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
sub_0807DD50(this);
|
||||
this->spriteRendering.b3 = gUnk_08114F30[this->spriteRendering.b3];
|
||||
}
|
||||
ExecuteScriptForEntity(this, NULL);
|
||||
HandleEntity0x82Actions(this);
|
||||
GetNextFrame(this);
|
||||
}
|
||||
|
||||
void sub_0806BA34(Entity* this, ScriptExecutionContext* context) {
|
||||
u32 gotBook1;
|
||||
u32 gotBook2;
|
||||
u32 gotBook3;
|
||||
u32 message = 0x4912;
|
||||
context->condition = 0;
|
||||
if (CheckLocalFlag(0x73)) {
|
||||
message = 0x4913;
|
||||
} else {
|
||||
gotBook1 = GetInventoryValue(ITEM_QST_BOOK1);
|
||||
gotBook2 = GetInventoryValue(ITEM_QST_BOOK2);
|
||||
gotBook3 = GetInventoryValue(ITEM_QST_BOOK3);
|
||||
if (gotBook1 == 1) {
|
||||
message = 0x4906;
|
||||
context->condition = 1;
|
||||
SetLocalFlag(0x6b);
|
||||
SetLocalFlag(0x6a);
|
||||
} else if (gotBook2 == 1) {
|
||||
message = 0x4907;
|
||||
context->condition = 1;
|
||||
SetLocalFlag(0x6b);
|
||||
SetLocalFlag(0x6a);
|
||||
} else if (gotBook3 == 1) {
|
||||
message = 0x4908;
|
||||
context->condition = 1;
|
||||
SetLocalFlag(0x6b);
|
||||
SetLocalFlag(0x6a);
|
||||
} else {
|
||||
if (CheckLocalFlag(0x6a)) {
|
||||
if (!CheckLocalFlag(0x6b)) {
|
||||
message = 0x4901;
|
||||
SetLocalFlag(0x6b);
|
||||
} else {
|
||||
if (gotBook1 == 0) {
|
||||
message = 0x4902;
|
||||
SetLocalFlag(0x6b);
|
||||
} else if (gotBook2 == 0) {
|
||||
message = 0x4903;
|
||||
SetLocalFlag(0x6d);
|
||||
} else if (gotBook3 == 0) {
|
||||
message = 0x4904;
|
||||
SetLocalFlag(0x70);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
MessageNoOverlap(message, this);
|
||||
}
|
||||
|
||||
void sub_0806BB1C(Entity* this, ScriptExecutionContext* context) {
|
||||
s32 item = 0xffffffff;
|
||||
|
||||
@@ -14,6 +14,11 @@ extern Hitbox gUnk_080B3E18;
|
||||
extern u8 gUnk_080B3DE0[];
|
||||
extern Hitbox* gUnk_080B3DE8[];
|
||||
|
||||
extern u32 sub_08007DD6(u32, const u16*);
|
||||
|
||||
extern const u16 gUnk_080B3DF4[];
|
||||
extern const u8 gUnk_08003E44[];
|
||||
|
||||
void PlayerItem11(Entity* this) {
|
||||
if (this->health) {
|
||||
this->iframes = 0;
|
||||
@@ -93,7 +98,66 @@ void sub_08018DE8(Entity* this) {
|
||||
sub_08078CD0(&gPlayerEntity);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItem11/sub_08018E68.inc", void sub_08018E68(Entity* this))
|
||||
void sub_08018E68(Entity* this) {
|
||||
s32 y;
|
||||
s32 x;
|
||||
if (this->child == NULL) {
|
||||
GetNextFrame(this);
|
||||
sub_08008790(this, 5);
|
||||
} else {
|
||||
if ((this->child->field_0x3a & 4) == 0) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if ((this->bitfield & 0x80) != 0) {
|
||||
sub_08018F6C(this);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (this->actionDelay-- != 0) {
|
||||
LinearMoveUpdate(this);
|
||||
|
||||
switch (this->direction) {
|
||||
case DirectionNorth:
|
||||
x = 0;
|
||||
y = -4;
|
||||
break;
|
||||
case DirectionSouth:
|
||||
x = 0;
|
||||
y = 4;
|
||||
break;
|
||||
case DirectionWest:
|
||||
x = -4;
|
||||
y = 0;
|
||||
break;
|
||||
case DirectionEast:
|
||||
x = 4;
|
||||
y = 0;
|
||||
break;
|
||||
}
|
||||
if (this->child != NULL) {
|
||||
this->child->direction = this->direction;
|
||||
CopyPosition(this, this->child);
|
||||
}
|
||||
if (this->type2 == 0) {
|
||||
sub_0800451C(this);
|
||||
}
|
||||
if (sub_08007DD6(sub_080B1A0C(this, x, y), gUnk_080B3DF4) != 0) {
|
||||
return;
|
||||
}
|
||||
if (GetRelativeCollisionTile(this, x, y) == 0x74) {
|
||||
return;
|
||||
}
|
||||
if (sub_080040D8(this, (u8*)gUnk_08003E44, this->x.HALF.HI + x, this->y.HALF.HI + y) == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->child == NULL) {
|
||||
InitializeAnimation(this, this->type + 0xd);
|
||||
}
|
||||
this->action++;
|
||||
sub_08018F6C(this);
|
||||
}
|
||||
|
||||
void sub_08018F6C(Entity* this) {
|
||||
if (this->child != NULL) {
|
||||
|
||||
@@ -1,26 +1,218 @@
|
||||
#define NENT_DEPRECATED
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "player.h"
|
||||
#include "new_player.h"
|
||||
#include "asm.h"
|
||||
#include "effects.h"
|
||||
#include "functions.h"
|
||||
#include "player.h"
|
||||
#include "new_player.h"
|
||||
#include "sound.h"
|
||||
#include "functions.h"
|
||||
#include "new_player.h"
|
||||
#include "player.h"
|
||||
|
||||
extern void (*const gUnk_081320A8[])(Entity*);
|
||||
|
||||
typedef struct {
|
||||
Entity base;
|
||||
u8 unk_68[4];
|
||||
u16 unk_6c;
|
||||
u16 unk_6e;
|
||||
} PlayerItem13Entity;
|
||||
extern bool32 ProcessMovement10(Entity*);
|
||||
|
||||
extern const s8 gUnk_081320C4[];
|
||||
|
||||
bool32 sub_080AD32C(PlayerItem13Entity*);
|
||||
void sub_080AD27C(PlayerItem13Entity*);
|
||||
u32 sub_0806F8DC(Entity*);
|
||||
|
||||
extern const u16 gUnk_081320CC[];
|
||||
extern const u32 gUnk_081320D4[];
|
||||
|
||||
void PlayerItem13(Entity* this) {
|
||||
gUnk_081320A8[this->subAction](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItem13/sub_080ACF2C.inc", void sub_080ACF2C(Entity* this))
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItem13/sub_080ACFCC.inc", void sub_080ACFCC(Entity* this))
|
||||
void sub_080ACFCC(PlayerItem13Entity* this) {
|
||||
Entity* child = super->child;
|
||||
if ((this->unk_6c == child->kind) || (this->unk_6e == child->id)) {
|
||||
if (child->action != 2) {
|
||||
sub_08079184();
|
||||
DeleteThisEntity();
|
||||
} else {
|
||||
if ((gPlayerState.heldObject == 0) || ((gNewPlayerEntity.unk_79 & 0x7f) != 0)) {
|
||||
sub_080AD27C(this);
|
||||
super->subAction++;
|
||||
super->flags &= 0x7f;
|
||||
super->direction = 0xff;
|
||||
super->zVelocity = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sub_08079184();
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItem13/sub_080AD040.inc", void sub_080AD040(Entity* this))
|
||||
void sub_080AD040(PlayerItem13Entity* this) {
|
||||
PlayerItem13Entity* child;
|
||||
u32 tile;
|
||||
u32 tmp;
|
||||
|
||||
child = (PlayerItem13Entity*)super->child;
|
||||
if ((child->base).action != 2) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if ((super->bitfield & 0x80) != 0) {
|
||||
super->z.WORD = 0;
|
||||
}
|
||||
if (super->speed != 0) {
|
||||
|
||||
if ((super->knockbackDuration & 0x80) != 0) {
|
||||
super->direction = super->knockbackDirection;
|
||||
super->knockbackDuration = 0;
|
||||
}
|
||||
if (GetRelativeCollisionTile(super, gUnk_081320C4[super->direction >> 2],
|
||||
gUnk_081320C4[(super->direction >> 2) + 1]) == 0x74) {
|
||||
LinearMoveUpdate(super);
|
||||
} else {
|
||||
tile = sub_080B1B0C(super);
|
||||
if ((tile != 0x24) && (tile != 0x26)) {
|
||||
ProcessMovement10(super);
|
||||
}
|
||||
}
|
||||
if (GravityUpdate(super, 0x2000) == 0) {
|
||||
(child->base).zVelocity = super->zVelocity;
|
||||
(child->base).x = super->x;
|
||||
(child->base).y = super->y;
|
||||
(child->base).z = super->z;
|
||||
tile = GetTileUnderEntity(super);
|
||||
switch (tile) {
|
||||
case 0xd:
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
case 0x13:
|
||||
case 0x5a:
|
||||
if (child == this) {
|
||||
|
||||
switch (tile) {
|
||||
case 0xd:
|
||||
CreateFx(super, FX_FALL_DOWN, 0);
|
||||
break;
|
||||
case 0x5a:
|
||||
CreateFx(super, FX_LAVA_SPLASH, 0);
|
||||
break;
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
CreateFx(super, FX_WATER_SPLASH, 0);
|
||||
break;
|
||||
case 0x13:
|
||||
CreateFx(super, FX_GREEN_SPLASH, 0);
|
||||
break;
|
||||
}
|
||||
(child->base).subAction = 4;
|
||||
} else {
|
||||
(child->base).subAction = 3;
|
||||
}
|
||||
DeleteThisEntity();
|
||||
break;
|
||||
}
|
||||
if (super->child == super) {
|
||||
if (super->type2 != 0xff) {
|
||||
if (super->type2 == 0x0f) {
|
||||
CreateFx(super, super->actionDelay, 0x80);
|
||||
} else {
|
||||
CreateObjectWithParent(super, super->type2, super->actionDelay, 0);
|
||||
}
|
||||
}
|
||||
DeleteThisEntity();
|
||||
} else {
|
||||
if (super->actionDelay != 0 || sub_080AD32C(child)) {
|
||||
if (super->actionDelay == 1) {
|
||||
SoundReq(SFX_104);
|
||||
}
|
||||
UpdateSpriteForCollisionLayer(super);
|
||||
child->base.subAction = 3;
|
||||
child->base.spriteRendering.b3 = super->spriteRendering.b3;
|
||||
child->base.spriteOrientation.flipY = super->spriteOrientation.flipY;
|
||||
child->base.spritePriority.b0 = super->spritePriority.b0;
|
||||
DeleteThisEntity();
|
||||
} else {
|
||||
SoundReq(SFX_104);
|
||||
super->actionDelay++;
|
||||
super->zVelocity = 0x10000;
|
||||
super->speed /= 2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sub_0800451C(super);
|
||||
sub_0806F8DC(super);
|
||||
CopyPosition(super, (Entity*)child);
|
||||
(child->base).zVelocity = super->zVelocity;
|
||||
(child->base).direction = super->direction;
|
||||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
tmp = gPlayerEntity.frame & 1;
|
||||
if (tmp != 0) {
|
||||
SoundReq(SFX_PLY_VO5);
|
||||
sub_080AD27C(this);
|
||||
return;
|
||||
}
|
||||
if ((gPlayerState.heldObject != 0) && ((gNewPlayerEntity.unk_79 & 0x80) == 0)) {
|
||||
return;
|
||||
}
|
||||
sub_080AD27C(this);
|
||||
super->flags &= 0x7f;
|
||||
super->direction = 0xff;
|
||||
super->zVelocity = tmp & 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080AD274(Entity* this) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItem13/sub_080AD27C.inc", void sub_080AD27C(Entity* this))
|
||||
void sub_080AD27C(PlayerItem13Entity* this) {
|
||||
u32 tmp;
|
||||
PlayerItem13Entity* child = (PlayerItem13Entity*)super->child;
|
||||
gNewPlayerEntity.unk_74 = NULL;
|
||||
if ((this->unk_6c == (u16)(child->base).kind) && (this->unk_6e == (u16)(child->base).id)) {
|
||||
if (child != this) {
|
||||
(child->base).subAction = 2;
|
||||
} else {
|
||||
super->spritePriority.b1 = 3;
|
||||
}
|
||||
super->hitbox = (child->base).hitbox;
|
||||
tmp = super->field_0x16 >> 4;
|
||||
super->speed = gUnk_081320CC[tmp];
|
||||
super->zVelocity = gUnk_081320D4[tmp];
|
||||
(child->base).z.HALF.HI += 8;
|
||||
super->z.HALF.HI = (child->base).z.HALF.HI;
|
||||
super->collisionLayer = (child->base).collisionLayer;
|
||||
super->y.HALF.HI = gPlayerEntity.y.HALF.HI;
|
||||
super->x.HALF.HI = gPlayerEntity.x.HALF.HI;
|
||||
super->field_0x3c = gPlayerEntity.field_0x3c;
|
||||
super->flags |= 0x80;
|
||||
sub_0801766C(super);
|
||||
} else {
|
||||
sub_08079184();
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_080AD32C(Entity* this) {
|
||||
bool32 sub_080AD32C(PlayerItem13Entity* this) {
|
||||
bool32 result = FALSE;
|
||||
if (((this->field_0x16 & 0xf0) == 0x10) || ((this->kind == OBJECT && ((this->id == 5 || (this->id == 0x7d)))))) {
|
||||
if (((super->field_0x16 & 0xf0) == 0x10) ||
|
||||
((super->kind == OBJECT && ((super->id == 5 || (super->id == 0x7d)))))) {
|
||||
result = TRUE;
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -1,45 +1,54 @@
|
||||
#define NENT_DEPRECATED
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "functions.h"
|
||||
#include "asm.h"
|
||||
#include "item.h"
|
||||
|
||||
typedef struct {
|
||||
Entity base;
|
||||
u32 unk_68;
|
||||
} PlayerItemBombEntity;
|
||||
|
||||
extern void (*const gUnk_080B77C8[])(Entity*);
|
||||
void sub_0801B418(Entity*);
|
||||
void sub_0801B3A4(Entity*);
|
||||
void sub_0801B3A4(PlayerItemBombEntity*);
|
||||
|
||||
extern void (*const gUnk_080B77D8[])(Entity*);
|
||||
|
||||
void PlayerItemBomb(Entity* this) {
|
||||
extern const Hitbox gUnk_080B77F4;
|
||||
|
||||
void PlayerItemBomb(PlayerItemBombEntity* this) {
|
||||
u8 uVar1, uVar2;
|
||||
|
||||
gUnk_080B77C8[this->action](this);
|
||||
GetNextFrame(this);
|
||||
// TODO regalloc
|
||||
uVar2 = uVar1 = this->action;
|
||||
gUnk_080B77C8[super->action](super);
|
||||
GetNextFrame(super);
|
||||
uVar2 = uVar1 = super->action;
|
||||
if (uVar1 != 0x03) {
|
||||
if (this->actionDelay != 0) {
|
||||
if (this->field_0x68.HALF.LO == 7) {
|
||||
this->actionDelay -= 1;
|
||||
if (super->actionDelay != 0) {
|
||||
if (*(u8*)&this->unk_68 == 7) {
|
||||
super->actionDelay -= 1;
|
||||
}
|
||||
if (this->actionDelay == 0) {
|
||||
this->field_0xf = 0x50;
|
||||
*(u32*)&this->field_0x68 = 0;
|
||||
this->spriteRendering.b0 = 3;
|
||||
SetAffineInfo(this, 0x100, 0x100, 0);
|
||||
if (super->actionDelay == 0) {
|
||||
super->field_0xf = 0x50;
|
||||
this->unk_68 = 0;
|
||||
super->spriteRendering.b0 = 3;
|
||||
SetAffineInfo(super, 0x100, 0x100, 0);
|
||||
}
|
||||
} else {
|
||||
if (this->field_0xf != 0) {
|
||||
if (this->field_0xf-- == 0x01) {
|
||||
if ((uVar1 == 0x02) && (this->subAction == 1)) {
|
||||
if (super->field_0xf != 0) {
|
||||
if (super->field_0xf-- == 0x01) {
|
||||
if ((uVar1 == 0x02) && (super->subAction == 1)) {
|
||||
gPlayerState.heldObject = 0;
|
||||
}
|
||||
this->action = 0x03;
|
||||
this->spritePriority.b1 = 2;
|
||||
this->actionDelay = 0x0f;
|
||||
this->spriteSettings.draw = 0;
|
||||
sub_0805EC60(this);
|
||||
FreeCarryEntity(this);
|
||||
CreateObjectWithParent(this, 0x20, 0, 0);
|
||||
sub_0801B418(this);
|
||||
super->action = 0x03;
|
||||
super->spritePriority.b1 = 2;
|
||||
super->actionDelay = 0x0f;
|
||||
super->spriteSettings.draw = 0;
|
||||
sub_0805EC60(super);
|
||||
FreeCarryEntity(super);
|
||||
CreateObjectWithParent(super, 0x20, 0, 0);
|
||||
sub_0801B418(super);
|
||||
} else {
|
||||
sub_0801B3A4(this);
|
||||
}
|
||||
@@ -48,9 +57,50 @@ void PlayerItemBomb(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemBomb/sub_0801B250.inc", void sub_0801B250(Entity* this))
|
||||
void sub_0801B250(PlayerItemBombEntity* this) {
|
||||
super->spriteSettings.draw = 1;
|
||||
super->action = 1;
|
||||
super->spritePriority.b1 = 3;
|
||||
super->flags &= 0x7f;
|
||||
if (super->type == 0xff) {
|
||||
super->actionDelay = 0x3c;
|
||||
} else if (super->type == 0xfe) {
|
||||
super->actionDelay = 0x0f;
|
||||
super->type = 0xff;
|
||||
} else {
|
||||
super->actionDelay = 0x96;
|
||||
}
|
||||
super->hitbox = (Hitbox*)&gUnk_080B77F4;
|
||||
super->field_0x16 = 0;
|
||||
if (*(u8*)&this->unk_68 == 7) {
|
||||
InitializeAnimation(super, 5);
|
||||
} else {
|
||||
InitializeAnimation(super, 0x15);
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemBomb/sub_0801B2CC.inc", void sub_0801B2CC(Entity* this))
|
||||
void sub_0801B2CC(PlayerItemBombEntity* this) {
|
||||
u16 unaff_r5;
|
||||
|
||||
if (!sub_0800442E(super)) {
|
||||
RegisterCarryEntity(super);
|
||||
}
|
||||
switch (IsItemEquipped(ITEM_REMOTE_BOMBS)) {
|
||||
case 0:
|
||||
unaff_r5 = 1;
|
||||
break;
|
||||
case 1:
|
||||
unaff_r5 = 2;
|
||||
break;
|
||||
case 2:
|
||||
unaff_r5 = 0;
|
||||
break;
|
||||
}
|
||||
if ((unaff_r5 & gPlayerState.field_0x92) != 0) {
|
||||
super->actionDelay = 0;
|
||||
super->field_0xf = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801B318(Entity* this) {
|
||||
gUnk_080B77D8[this->subAction](this);
|
||||
@@ -87,7 +137,28 @@ void sub_0801B38C(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemBomb/sub_0801B3A4.inc", void sub_0801B3A4(Entity* this))
|
||||
void sub_0801B3A4(PlayerItemBombEntity* this) {
|
||||
u32 tmp;
|
||||
if (super->field_0xf >= 0x29) {
|
||||
tmp = 8;
|
||||
} else {
|
||||
tmp = 4;
|
||||
if ((this->unk_68 & 0x8000) != 0) {
|
||||
this->unk_68 -= 0x10;
|
||||
} else {
|
||||
this->unk_68 += 0x10;
|
||||
}
|
||||
if (0x7f < (this->unk_68 & 0xf0) - 1) {
|
||||
this->unk_68 ^= 0x8000;
|
||||
}
|
||||
SetAffineInfo(super, 0x130 - (this->unk_68 & 0xf0), 0x130 - (this->unk_68 & 0xf0), 0);
|
||||
}
|
||||
if ((super->field_0xf & tmp) == 0) {
|
||||
super->palette.b.b0 = 0;
|
||||
} else {
|
||||
super->palette.b.b0 = super->palette.b.b4;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801B418(Entity* this) {
|
||||
s32 x;
|
||||
|
||||
@@ -1,18 +1,104 @@
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "asm.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "effects.h"
|
||||
#include "object.h"
|
||||
|
||||
extern void (*const gUnk_080B3E30[])(Entity*);
|
||||
|
||||
typedef struct {
|
||||
Entity base;
|
||||
u8 unk_68;
|
||||
u8 unk_69[3];
|
||||
u32 unk_6c;
|
||||
u32 unk_70;
|
||||
u32 unk_74;
|
||||
u32 unk_78;
|
||||
} PlayerItemBowEntity;
|
||||
|
||||
typedef struct {
|
||||
s8 x;
|
||||
s8 y;
|
||||
u8 spriteSettings;
|
||||
u8 unk_3;
|
||||
s8 unk_4;
|
||||
s8 unk_5;
|
||||
u8 animIndex;
|
||||
u8 unk_7;
|
||||
Hitbox* hitbox;
|
||||
} struct_080B3E40;
|
||||
|
||||
extern const struct_080B3E40 gUnk_080B3E40[];
|
||||
|
||||
void sub_0801917C(PlayerItemBowEntity*);
|
||||
|
||||
void PlayerItemBow(Entity* this) {
|
||||
gUnk_080B3E30[(this->action)](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemBow/sub_08018FE4.inc", void sub_08018FE4(Entity* this))
|
||||
void sub_08018FE4(PlayerItemBowEntity* this) {
|
||||
Entity* object;
|
||||
const struct_080B3E40* ptr;
|
||||
super->action = 1;
|
||||
if (super->type != 0) {
|
||||
super->spriteSettings.draw = 1;
|
||||
super->flags |= 0x80;
|
||||
this->unk_74 = 0x6a;
|
||||
super->hurtType = super->type2;
|
||||
super->spriteIndex = 0xa6;
|
||||
if (super->hurtType == 0x0e) {
|
||||
super->speed = 0x400;
|
||||
} else {
|
||||
super->speed = 0x300;
|
||||
}
|
||||
super->direction = super->animationState << 2;
|
||||
super->field_0x3c = gPlayerEntity.field_0x3c + 1;
|
||||
super->flags2 = gPlayerEntity.flags2;
|
||||
if (super->collisionLayer == 2) {
|
||||
super->type2 = 1;
|
||||
} else {
|
||||
super->type2 = 0;
|
||||
}
|
||||
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
|
||||
ptr = &gUnk_080B3E40[super->animationState >> 1];
|
||||
super->x.HALF.HI = gPlayerEntity.x.HALF.HI + ptr->x;
|
||||
super->y.HALF.HI = gPlayerEntity.y.HALF.HI + ptr->y;
|
||||
super->spriteSettings.flipX = ptr->spriteSettings;
|
||||
super->spriteSettings.flipY = ptr->unk_3;
|
||||
super->animIndex = ptr->animIndex;
|
||||
this->unk_6c = ptr->unk_4;
|
||||
this->unk_70 = ptr->unk_5;
|
||||
super->hitbox = ptr->hitbox;
|
||||
sub_0801766C(super);
|
||||
if (super->hurtType == 0x0e) {
|
||||
super->animIndex += 6;
|
||||
super->spriteVramOffset = 0;
|
||||
}
|
||||
InitializeAnimation(super, super->animIndex);
|
||||
SoundReq(SFX_FC);
|
||||
} else {
|
||||
super->updatePriority = 6;
|
||||
super->frameIndex = 0xff;
|
||||
super->spriteSettings.flipX = gUnk_080B3E40[super->animationState >> 1].spriteSettings;
|
||||
gPlayerState.item = super;
|
||||
LoadSwapGFX(super, 1, 3);
|
||||
sub_08079BD8(super);
|
||||
if (this->unk_68 == 0xa) {
|
||||
this->unk_78 = 0x3c;
|
||||
object = CreateObject(OBJECT_43, super->type, 1);
|
||||
if (object != NULL) {
|
||||
CopyPosition(super, object);
|
||||
}
|
||||
} else {
|
||||
this->unk_78 = 0;
|
||||
}
|
||||
sub_0801917C(this);
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemBow/sub_0801917C.inc", void sub_0801917C(Entity* this))
|
||||
ASM_FUNC("asm/non_matching/playerItemBow/sub_0801917C.inc", void sub_0801917C(PlayerItemBowEntity* this))
|
||||
|
||||
void sub_08019410(Entity* this) {
|
||||
if (this->actionDelay < 0xf) {
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "functions.h"
|
||||
#include "item.h"
|
||||
#include "object.h"
|
||||
|
||||
extern void (*const gUnk_080FEEA8[])(Entity*);
|
||||
|
||||
void sub_08054AC8(Entity*);
|
||||
|
||||
extern const s8 gUnk_080FEEB0[];
|
||||
|
||||
void PlayerItemLantern(Entity* this) {
|
||||
gUnk_080FEEA8[this->action](this);
|
||||
this->bitfield = 0;
|
||||
@@ -29,4 +33,40 @@ void sub_08054A60(Entity* this) {
|
||||
sub_08054AC8(this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemLantern/sub_08054AC8.inc", void sub_08054AC8(Entity* this))
|
||||
void sub_08054AC8(Entity* this) {
|
||||
Entity* object;
|
||||
this->animationState = gPlayerEntity.animationState & 0xe;
|
||||
this->hitbox->offset_x = gUnk_080FEEB0[this->animationState];
|
||||
this->hitbox->offset_y = gUnk_080FEEB0[this->animationState + 1];
|
||||
this->hitbox->width = 4;
|
||||
this->hitbox->height = 4;
|
||||
if (!((gPlayerEntity.frameIndex < 0x37) && ((u32)gPlayerEntity.spriteIndex == 6))) {
|
||||
this->frameIndex = 0xff;
|
||||
this->flags &= ~ENT_COLLIDE;
|
||||
} else {
|
||||
this->flags |= ENT_COLLIDE;
|
||||
this->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX;
|
||||
this->spriteSettings.flipY = gPlayerEntity.spriteSettings.flipY;
|
||||
if (gPlayerEntity.frameIndex != this->frameIndex) {
|
||||
this->frameIndex = gPlayerEntity.frameIndex;
|
||||
sub_080042D0(this, this->frameIndex, this->spriteIndex);
|
||||
}
|
||||
this->frame = gPlayerEntity.frame;
|
||||
this->frameSpriteSettings = gPlayerEntity.frameSpriteSettings;
|
||||
}
|
||||
if (IsItemEquipped(ITEM_LANTERN_ON) < 2) {
|
||||
if (((this->frameIndex != 0xff) && (gPlayerEntity.spriteSettings.draw != 0)) && (this->actionDelay-- == 0)) {
|
||||
this->actionDelay = 4;
|
||||
object = CreateObject(OBJECT_45, 0, 0x10);
|
||||
if (object != NULL) {
|
||||
PositionRelative(this, object, 0, 0x20000);
|
||||
object->spritePriority.b0 = this->spritePriority.b0;
|
||||
object->spriteOffsetX = gUnk_080FEEB0[this->animationState];
|
||||
object->spriteOffsetY = gUnk_080FEEB0[this->animationState + 1];
|
||||
}
|
||||
}
|
||||
sub_08078E84(this, &gPlayerEntity);
|
||||
} else {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
#define NENT_DEPRECATED
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "sound.h"
|
||||
|
||||
extern void (*const gUnk_0812905C[])(Entity*);
|
||||
|
||||
extern u8 gUnk_08129096[];
|
||||
|
||||
typedef struct {
|
||||
Entity base;
|
||||
u8 unk_68;
|
||||
} PlayerItemSwordEntity;
|
||||
|
||||
void sub_080A78B8(PlayerItemSwordEntity*, Entity*);
|
||||
void sub_080A7B98(PlayerItemSwordEntity*);
|
||||
|
||||
void sub_080A7A54(PlayerItemSwordEntity*);
|
||||
|
||||
void PlayerItemSword(Entity* this) {
|
||||
gUnk_0812905C[this->action](this);
|
||||
if (this->type == 0) {
|
||||
@@ -18,20 +30,122 @@ ASM_FUNC("asm/non_matching/playerItemSword/sub_080A758C.inc", void sub_080A758C(
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemSword/sub_080A76CC.inc", void sub_080A76CC(Entity* this))
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7824.inc", void sub_080A7824(Entity* this))
|
||||
void sub_080A7824(PlayerItemSwordEntity* this) {
|
||||
if (gPlayerState.item != super) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if (gPlayerState.field_0x3[1] != 0) {
|
||||
if (gPlayerState.jump_status == 0) {
|
||||
gPlayerState.item = NULL;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
if ((gPlayerEntity.frame & 0x80) != 0) {
|
||||
gPlayerState.item = NULL;
|
||||
DeleteThisEntity();
|
||||
} else {
|
||||
sub_080A78B8(this, &gPlayerEntity);
|
||||
if ((gPlayerEntity.frame & 0x20) != 0) {
|
||||
SoundReq(SFX_PLY_VO3);
|
||||
}
|
||||
if (super->frameIndex > 0x8a) {
|
||||
super->frameIndex = 0xff;
|
||||
}
|
||||
if ((gPlayerEntity.frame & 8) != 0) {
|
||||
super->flags |= ENT_COLLIDE;
|
||||
sub_080A7B98(this);
|
||||
} else {
|
||||
super->flags &= ~ENT_COLLIDE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
gPlayerState.item = NULL;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemSword/sub_080A78B8.inc", void sub_080A78B8(Entity* this))
|
||||
void sub_080A78B8(PlayerItemSwordEntity* this, Entity* param_2) {
|
||||
u32 flipX;
|
||||
|
||||
void sub_080A7A54(Entity* this) {
|
||||
if ((gPlayerState.sword_state & 0x20) != 0) {
|
||||
super->frameIndex = param_2->frameIndex - 0x6a;
|
||||
if ((gRoomTransition.frameCount & 4) != 0) {
|
||||
sub_080042D0(super, (super->animationState >> 1) + 0xb1, super->spriteIndex);
|
||||
} else {
|
||||
sub_080042D0(super, super->frameIndex, super->spriteIndex);
|
||||
}
|
||||
} else {
|
||||
if (param_2->frameIndex - 0x6a != super->frameIndex) {
|
||||
super->frameIndex = param_2->frameIndex - 0x6a;
|
||||
sub_080042D0(super, (u32)super->frameIndex, super->spriteIndex);
|
||||
}
|
||||
}
|
||||
if ((gPlayerState.sword_state & 0x40) != 0) {
|
||||
super->spriteSettings.flipX = 0;
|
||||
} else {
|
||||
if ((param_2->animationState & 2) != 0) {
|
||||
flipX = param_2->spriteSettings.flipX ^ 1;
|
||||
} else {
|
||||
flipX = param_2->spriteSettings.flipX;
|
||||
}
|
||||
super->spriteSettings.flipX = flipX;
|
||||
}
|
||||
if ((super->bitfield & 0x80) != 0) {
|
||||
if ((param_2->iframes == 0) || ((u8)param_2->iframes == 0x81)) {
|
||||
param_2->iframes = super->iframes;
|
||||
param_2->knockbackDirection = super->knockbackDirection;
|
||||
param_2->knockbackDuration = super->knockbackDuration;
|
||||
super->knockbackDuration = 0;
|
||||
super->knockbackDirection = 0;
|
||||
super->iframes = 0;
|
||||
}
|
||||
if ((gPlayerState.flags & 0x8000000) != 0) {
|
||||
gPlayerState.sword_state |= 0x80;
|
||||
} else if (gPlayerState.sword_state != 0) {
|
||||
switch (super->bitfield & 0x7f) {
|
||||
case 0x44:
|
||||
break;
|
||||
case 0x43:
|
||||
case 0xd:
|
||||
gPlayerState.sword_state |= 8;
|
||||
param_2->knockbackDuration = 2;
|
||||
if ((gPlayerState.sword_state & 0x20) == 0) {
|
||||
gPlayerState.sword_state &= 0xfe;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if ((gPlayerState.sword_state & 0xc0) == 0) {
|
||||
gPlayerState.sword_state = 0;
|
||||
gPlayerState.field_0x3[1] = 0;
|
||||
gPlayerState.item = NULL;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (super->iframes != 0) {
|
||||
if (super->iframes >= 1) {
|
||||
super->iframes--;
|
||||
} else {
|
||||
super->iframes++;
|
||||
}
|
||||
}
|
||||
sub_080A7A54(this);
|
||||
if ((*(u8*)&super->spriteSettings * 0x2000000) < 0) { // TODO
|
||||
super->hitbox->offset_x = -super->hitbox->offset_x;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A7A54(PlayerItemSwordEntity* this) {
|
||||
u8* tmp;
|
||||
|
||||
tmp = &gUnk_08129096[(gPlayerEntity.frameIndex - 0x6a) * 4];
|
||||
this->hitbox->offset_x = tmp[0];
|
||||
this->hitbox->offset_y = tmp[1];
|
||||
this->hitbox->width = tmp[2];
|
||||
this->hitbox->height = tmp[3];
|
||||
super->hitbox->offset_x = tmp[0];
|
||||
super->hitbox->offset_y = tmp[1];
|
||||
super->hitbox->width = tmp[2];
|
||||
super->hitbox->height = tmp[3];
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7A84.inc", void sub_080A7A84(Entity* this))
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7B98.inc", void sub_080A7B98(Entity* this))
|
||||
ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7B98.inc", void sub_080A7B98(PlayerItemSwordEntity* this))
|
||||
|
||||
+18
-2
@@ -819,9 +819,25 @@ s32 sub_08078904(Entity* entity) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/RegisterCarryEntity.inc", void RegisterCarryEntity(Entity* a))
|
||||
void RegisterCarryEntity(Entity* this) {
|
||||
if (gCarriedEntity.count < 0x20) {
|
||||
gCarriedEntity.unk_c[gCarriedEntity.count] = this;
|
||||
gCarriedEntity.count++;
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/FreeCarryEntity.inc", void FreeCarryEntity(Entity* a))
|
||||
void FreeCarryEntity(Entity* this) {
|
||||
u32 index;
|
||||
for (index = 0; index < gCarriedEntity.count; index++) {
|
||||
if (gCarriedEntity.unk_c[index] == this) {
|
||||
gCarriedEntity.count--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (; index < gCarriedEntity.count; index++) {
|
||||
gCarriedEntity.unk_c[index] = gCarriedEntity.unk_c[index + 1];
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080789A8.inc", u32 sub_080789A8())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user