mirror of https://github.com/zeldaret/tmc.git
Decompile object10
This commit is contained in:
parent
5ebbffc50d
commit
cc8ef3a260
|
@ -1,652 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Object10
|
||||
Object10: @ 0x08084824
|
||||
push {lr}
|
||||
ldr r2, _08084838 @ =gUnk_08120560
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08084838: .4byte gUnk_08120560
|
||||
|
||||
thumb_func_start sub_0808483C
|
||||
sub_0808483C: @ 0x0808483C
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x19]
|
||||
movs r0, #0x3f
|
||||
ands r0, r1
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x19]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #4
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
ldrh r2, [r4, #0x2e]
|
||||
movs r1, #0x10
|
||||
rsbs r1, r1, #0
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
movs r2, #8
|
||||
orrs r0, r2
|
||||
strh r0, [r4, #0x2e]
|
||||
ldrh r0, [r4, #0x32]
|
||||
ands r1, r0
|
||||
orrs r1, r2
|
||||
strh r1, [r4, #0x32]
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
ldr r2, _080848C0 @ =gRoomControls
|
||||
ldrh r0, [r2, #6]
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
movs r3, #0x3f
|
||||
ands r1, r3
|
||||
movs r5, #0x32
|
||||
ldrsh r0, [r4, r5]
|
||||
ldrh r2, [r2, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r3
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x74
|
||||
strh r1, [r5]
|
||||
adds r0, r4, #0
|
||||
movs r1, #8
|
||||
bl InitializeAnimation
|
||||
ldr r0, _080848C4 @ =0x00004016
|
||||
ldrh r1, [r5]
|
||||
adds r4, #0x38
|
||||
ldrb r2, [r4]
|
||||
bl SetTile
|
||||
movs r0, #0x89
|
||||
lsls r0, r0, #1
|
||||
bl SoundReq
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_080848C0: .4byte gRoomControls
|
||||
_080848C4: .4byte 0x00004016
|
||||
|
||||
thumb_func_start sub_080848C8
|
||||
sub_080848C8: @ 0x080848C8
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _08084980 @ =gPlayerState
|
||||
adds r0, #0xa0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #5
|
||||
bne _08084994
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
movs r5, #1
|
||||
strb r5, [r0]
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x11]
|
||||
subs r0, #0x12
|
||||
ands r0, r1
|
||||
movs r1, #6
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x11]
|
||||
ldr r0, _08084984 @ =gUnk_08120574
|
||||
str r0, [r4, #0x48]
|
||||
ldrb r1, [r4, #0xa]
|
||||
adds r1, #1
|
||||
lsls r0, r1, #4
|
||||
subs r0, r0, r1
|
||||
strb r0, [r4, #0xf]
|
||||
ldr r2, _08084988 @ =gPlayerEntity
|
||||
ldrh r0, [r4, #0x2e]
|
||||
ldrh r1, [r2, #0x2e]
|
||||
subs r0, r0, r1
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x78
|
||||
strh r0, [r3]
|
||||
ldrh r1, [r4, #0x32]
|
||||
ldrh r0, [r2, #0x32]
|
||||
subs r1, r1, r0
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x7a
|
||||
strh r1, [r0]
|
||||
ldrh r0, [r3]
|
||||
cmp r0, #0
|
||||
beq _0808493C
|
||||
lsls r0, r1, #0x10
|
||||
cmp r0, #0
|
||||
beq _0808493C
|
||||
ldr r0, _0808498C @ =gPlayerClones
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r0, [r1]
|
||||
str r5, [r0, #0x70]
|
||||
_0808493C:
|
||||
ldr r0, _08084990 @ =0x00000315
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x74
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl sub_08000152
|
||||
ldrb r1, [r4, #0xa]
|
||||
adds r1, #1
|
||||
ldr r0, _08084980 @ =gPlayerState
|
||||
ldr r0, [r0, #0x2c]
|
||||
adds r0, #0x68
|
||||
ldrb r3, [r0]
|
||||
movs r0, #1
|
||||
movs r2, #0
|
||||
bl sub_08077CF8
|
||||
str r0, [r4, #0x54]
|
||||
cmp r0, #0
|
||||
beq _0808496A
|
||||
str r4, [r0, #0x50]
|
||||
_0808496A:
|
||||
adds r0, r4, #0
|
||||
bl sub_0801766C
|
||||
adds r0, r4, #0
|
||||
bl sub_0806FDA0
|
||||
adds r0, r4, #0
|
||||
bl sub_080849D8
|
||||
b _080849D6
|
||||
.align 2, 0
|
||||
_08084980: .4byte gPlayerState
|
||||
_08084984: .4byte gUnk_08120574
|
||||
_08084988: .4byte gPlayerEntity
|
||||
_0808498C: .4byte gPlayerClones
|
||||
_08084990: .4byte 0x00000315
|
||||
_08084994:
|
||||
cmp r0, #4
|
||||
beq _080849C4
|
||||
ldr r0, _080849BC @ =0x00000315
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x74
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl sub_08000152
|
||||
ldr r1, _080849C0 @ =gPlayerClones
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
str r1, [r0]
|
||||
bl DeleteThisEntity
|
||||
b _080849D6
|
||||
.align 2, 0
|
||||
_080849BC: .4byte 0x00000315
|
||||
_080849C0: .4byte gPlayerClones
|
||||
_080849C4:
|
||||
ldrb r2, [r4, #0x18]
|
||||
lsls r1, r2, #0x1e
|
||||
lsrs r1, r1, #0x1e
|
||||
movs r0, #1
|
||||
eors r1, r0
|
||||
subs r0, #5
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
_080849D6:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_080849D8
|
||||
sub_080849D8: @ 0x080849D8
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xf]
|
||||
adds r1, r0, #0
|
||||
cmp r1, #1
|
||||
bne _080849EE
|
||||
movs r0, #0x76
|
||||
bl SoundReq
|
||||
ldrb r0, [r4, #0xf]
|
||||
b _080849F2
|
||||
_080849EE:
|
||||
cmp r1, #0
|
||||
beq _080849F6
|
||||
_080849F2:
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
_080849F6:
|
||||
ldr r2, _08084A3C @ =gPlayerState
|
||||
adds r3, r2, #0
|
||||
adds r3, #0xa0
|
||||
ldrb r0, [r3]
|
||||
cmp r0, #5
|
||||
beq _08084A04
|
||||
b _08084AF8
|
||||
_08084A04:
|
||||
ldr r0, _08084A40 @ =gPlayerClones
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _08084AF8
|
||||
adds r0, r2, #0
|
||||
adds r0, #0xa8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x13
|
||||
beq _08084AF8
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _08084AF8
|
||||
ldr r5, _08084A44 @ =gPlayerEntity
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x3d
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
ble _08084A48
|
||||
movs r0, #1
|
||||
strb r0, [r3]
|
||||
b _08084AF8
|
||||
.align 2, 0
|
||||
_08084A3C: .4byte gPlayerState
|
||||
_08084A40: .4byte gPlayerClones
|
||||
_08084A44: .4byte gPlayerEntity
|
||||
_08084A48:
|
||||
adds r0, r4, #0
|
||||
bl sub_080B1AA8
|
||||
adds r0, r4, #0
|
||||
bl sub_08084B1C
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x78
|
||||
ldrh r0, [r0]
|
||||
ldrh r1, [r5, #0x2e]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0x2e]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x7a
|
||||
ldrh r0, [r0]
|
||||
ldrh r5, [r5, #0x32]
|
||||
adds r0, r0, r5
|
||||
strh r0, [r4, #0x32]
|
||||
adds r0, r4, #0
|
||||
bl sub_08084CAC
|
||||
adds r0, r4, #0
|
||||
bl sub_080085B0
|
||||
ldrh r2, [r4, #0x2a]
|
||||
ldr r1, _08084AB8 @ =0x00006666
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
cmp r0, r1
|
||||
beq _08084AEA
|
||||
movs r3, #0
|
||||
ldr r5, _08084ABC @ =gUnk_0812056C
|
||||
ldrh r1, [r5]
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
cmp r1, r0
|
||||
beq _08084AA6
|
||||
adds r2, r5, #0
|
||||
_08084A94:
|
||||
adds r2, #2
|
||||
adds r3, #1
|
||||
cmp r3, #3
|
||||
bhi _08084AA6
|
||||
ldrh r1, [r2]
|
||||
ldrh r0, [r4, #0x2a]
|
||||
ands r0, r1
|
||||
cmp r1, r0
|
||||
bne _08084A94
|
||||
_08084AA6:
|
||||
cmp r3, #4
|
||||
bne _08084AC0
|
||||
movs r0, #0
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x18]
|
||||
subs r0, #4
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
b _08084ADE
|
||||
.align 2, 0
|
||||
_08084AB8: .4byte 0x00006666
|
||||
_08084ABC: .4byte gUnk_0812056C
|
||||
_08084AC0:
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _08084AE4
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
beq _08084AEA
|
||||
ldrb r2, [r4, #0x18]
|
||||
lsls r1, r2, #0x1e
|
||||
lsrs r1, r1, #0x1e
|
||||
movs r0, #1
|
||||
eors r1, r0
|
||||
subs r0, #5
|
||||
ands r0, r2
|
||||
_08084ADE:
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
b _08084B16
|
||||
_08084AE4:
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
b _08084B16
|
||||
_08084AEA:
|
||||
ldr r0, _08084AF4 @ =gPlayerState
|
||||
adds r0, #0xa0
|
||||
movs r1, #1
|
||||
strb r1, [r0]
|
||||
b _08084B16
|
||||
.align 2, 0
|
||||
_08084AF4: .4byte gPlayerState
|
||||
_08084AF8:
|
||||
bl DeleteClones
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x30
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
ldr r0, [r4, #0x54]
|
||||
bl DeleteEntity
|
||||
ldr r0, _08084B18 @ =0x0000018F
|
||||
bl SoundReq
|
||||
bl DeleteThisEntity
|
||||
_08084B16:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08084B18: .4byte 0x0000018F
|
||||
|
||||
thumb_func_start sub_08084B1C
|
||||
sub_08084B1C: @ 0x08084B1C
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
adds r4, r0, #0
|
||||
ldr r3, _08084CA4 @ =gPlayerEntity
|
||||
ldrb r0, [r3, #0x10]
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x60
|
||||
ldrh r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x60
|
||||
strh r1, [r0]
|
||||
ldrb r0, [r3, #0x1e]
|
||||
strb r0, [r4, #0x1e]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x5b
|
||||
ldrb r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x5b
|
||||
strb r0, [r1]
|
||||
ldrh r0, [r3, #0x12]
|
||||
strh r0, [r4, #0x12]
|
||||
ldrb r0, [r3, #0x15]
|
||||
strb r0, [r4, #0x15]
|
||||
ldrb r0, [r3, #0x14]
|
||||
strb r0, [r4, #0x14]
|
||||
ldrb r0, [r3, #0x18]
|
||||
movs r1, #1
|
||||
mov r8, r1
|
||||
movs r1, #0x40
|
||||
ands r1, r0
|
||||
ldrb r2, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
mov sb, r0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
ldrb r1, [r3, #0x19]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x19]
|
||||
movs r7, #0x3f
|
||||
adds r0, r7, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x19]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
movs r0, #0x29
|
||||
adds r0, r0, r4
|
||||
mov ip, r0
|
||||
movs r6, #7
|
||||
lsrs r1, r1, #0x1d
|
||||
ldrb r2, [r0]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
mov sl, r0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
mov r1, ip
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r3, #0x1b]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x1b]
|
||||
adds r0, r7, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1b]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x38
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x38
|
||||
strb r1, [r0]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3b
|
||||
ldrb r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x3b
|
||||
strb r0, [r1]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3f
|
||||
ldrb r0, [r0]
|
||||
adds r1, #4
|
||||
strb r0, [r1]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x3c
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x3c
|
||||
strb r1, [r0]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x40
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x40
|
||||
strb r1, [r0]
|
||||
ldr r1, [r4, #0x54]
|
||||
adds r0, r4, #0
|
||||
bl CopyPosition
|
||||
ldr r5, _08084CA8 @ =gPlayerState
|
||||
ldrb r0, [r5, #4]
|
||||
cmp r0, #0
|
||||
beq _08084C6A
|
||||
ldr r1, [r4, #0x54]
|
||||
ldr r0, [r5, #0x2c]
|
||||
adds r0, #0x44
|
||||
ldrb r0, [r0]
|
||||
adds r1, #0x44
|
||||
strb r0, [r1]
|
||||
ldr r1, [r4, #0x54]
|
||||
ldr r0, [r5, #0x2c]
|
||||
ldrb r0, [r0, #0x1e]
|
||||
strb r0, [r1, #0x1e]
|
||||
ldr r3, [r4, #0x54]
|
||||
ldr r0, [r5, #0x2c]
|
||||
ldrb r1, [r0, #0x18]
|
||||
lsls r1, r1, #0x19
|
||||
lsrs r1, r1, #0x1f
|
||||
mov r0, r8
|
||||
ands r1, r0
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r3, #0x18]
|
||||
mov r0, sb
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3, #0x18]
|
||||
ldr r3, [r4, #0x54]
|
||||
ldr r0, [r5, #0x2c]
|
||||
ldrb r1, [r0, #0x19]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r3, #0x19]
|
||||
adds r0, r7, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3, #0x19]
|
||||
ldr r2, [r4, #0x54]
|
||||
ldr r0, [r5, #0x2c]
|
||||
adds r0, #0x29
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x1d
|
||||
lsrs r0, r0, #0x1d
|
||||
adds r2, #0x29
|
||||
ands r6, r0
|
||||
ldrb r1, [r2]
|
||||
mov r0, sl
|
||||
ands r0, r1
|
||||
orrs r0, r6
|
||||
strb r0, [r2]
|
||||
ldr r1, [r4, #0x54]
|
||||
ldrb r0, [r1, #0x18]
|
||||
lsls r0, r0, #0x19
|
||||
cmp r0, #0
|
||||
bge _08084C6A
|
||||
ldr r1, [r1, #0x48]
|
||||
ldrb r0, [r1]
|
||||
rsbs r0, r0, #0
|
||||
strb r0, [r1]
|
||||
_08084C6A:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl sub_0806FEBC
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl sub_0806FEBC
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
adds r2, r4, #0
|
||||
bl sub_0806FEBC
|
||||
adds r0, r4, #0
|
||||
movs r1, #3
|
||||
movs r2, #0
|
||||
bl sub_0806FEBC
|
||||
ldr r0, [r4, #0x54]
|
||||
adds r1, r4, #0
|
||||
bl sub_08078E84
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08084CA4: .4byte gPlayerEntity
|
||||
_08084CA8: .4byte gPlayerState
|
||||
|
||||
thumb_func_start sub_08084CAC
|
||||
sub_08084CAC: @ 0x08084CAC
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
ldr r6, _08084D18 @ =gPlayerClones
|
||||
ldrb r0, [r5, #0xa]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r6
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x70]
|
||||
cmp r0, #0
|
||||
bne _08084D32
|
||||
ldrb r0, [r5, #0x14]
|
||||
movs r2, #6
|
||||
ands r2, r0
|
||||
lsls r2, r2, #1
|
||||
ldr r0, _08084D1C @ =gUnk_080B4468
|
||||
adds r2, r2, r0
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r5, r1]
|
||||
movs r3, #0
|
||||
ldrsh r1, [r2, r3]
|
||||
adds r0, r0, r1
|
||||
ldr r4, _08084D20 @ =gRoomControls
|
||||
ldrh r1, [r4, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
movs r3, #0x3f
|
||||
ands r0, r3
|
||||
movs r7, #0x32
|
||||
ldrsh r1, [r5, r7]
|
||||
movs r7, #2
|
||||
ldrsh r2, [r2, r7]
|
||||
adds r1, r1, r2
|
||||
ldrh r2, [r4, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r3
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x38
|
||||
ldrb r1, [r1]
|
||||
bl GetTileType
|
||||
bl sub_080B1B54
|
||||
cmp r0, #0x72
|
||||
bne _08084D24
|
||||
ldr r2, [r6]
|
||||
movs r1, #1
|
||||
ldrb r5, [r5, #0xa]
|
||||
lsls r1, r5
|
||||
ldr r0, [r2, #0x6c]
|
||||
orrs r0, r1
|
||||
b _08084D30
|
||||
.align 2, 0
|
||||
_08084D18: .4byte gPlayerClones
|
||||
_08084D1C: .4byte gUnk_080B4468
|
||||
_08084D20: .4byte gRoomControls
|
||||
_08084D24:
|
||||
ldr r2, [r6]
|
||||
movs r1, #1
|
||||
ldrb r5, [r5, #0xa]
|
||||
lsls r1, r5
|
||||
ldr r0, [r2, #0x6c]
|
||||
bics r0, r1
|
||||
_08084D30:
|
||||
str r0, [r2, #0x6c]
|
||||
_08084D32:
|
||||
pop {r4, r5, r6, r7, pc}
|
|
@ -42665,16 +42665,6 @@
|
|||
"size": 56,
|
||||
"type": "animation"
|
||||
},
|
||||
{
|
||||
"path": "object10/gUnk_0812056C.bin",
|
||||
"start": 1181036,
|
||||
"size": 8
|
||||
},
|
||||
{
|
||||
"path": "object10/gUnk_08120574.bin",
|
||||
"start": 1181044,
|
||||
"size": 8
|
||||
},
|
||||
{
|
||||
"path": "animations/gSpriteAnimations_Railtrack_0.bin",
|
||||
"start": 1181156,
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08120560:: @ 08120560
|
||||
.4byte sub_0808483C
|
||||
.4byte sub_080848C8
|
||||
.4byte sub_080849D8
|
||||
|
||||
gUnk_0812056C:: @ 0812056C
|
||||
.incbin "object10/gUnk_0812056C.bin"
|
||||
|
||||
gUnk_08120574:: @ 08120574
|
||||
.incbin "object10/gUnk_08120574.bin"
|
|
@ -255,4 +255,5 @@ extern void sub_080ADD70(void);
|
|||
extern bool32 sub_080AE4CC(Entity*, u32, u32, u32);
|
||||
extern void sub_080AE58C(Entity*, u32, u32);
|
||||
extern void sub_080AF284(void);
|
||||
extern bool32 sub_080B1B54(u32);
|
||||
#endif
|
||||
|
|
|
@ -46,7 +46,7 @@ typedef enum {
|
|||
OBJECT_D,
|
||||
OBJECT_E,
|
||||
SPECIAL_FX,
|
||||
OBJECT_10,
|
||||
PLAYER_CLONE,
|
||||
OBJECT_11,
|
||||
OBJECT_12,
|
||||
RAILTRACK,
|
||||
|
@ -242,7 +242,7 @@ void ChestSpawner();
|
|||
void ObjectD();
|
||||
void ObjectE();
|
||||
void SpecialFx();
|
||||
void Object10();
|
||||
void PlayerClone();
|
||||
void Object11();
|
||||
void Object12();
|
||||
void Railtrack();
|
||||
|
|
|
@ -636,7 +636,7 @@ SECTIONS {
|
|||
src/object/objectD.o(.text);
|
||||
src/object/objectE.o(.text);
|
||||
src/object/specialFx.o(.text);
|
||||
asm/object/object10.o(.text);
|
||||
src/object/playerClone.o(.text);
|
||||
src/object/object11.o(.text);
|
||||
src/object/object12.o(.text);
|
||||
src/object/railtrack.o(.text);
|
||||
|
@ -1354,7 +1354,7 @@ SECTIONS {
|
|||
data/animations/object/objectD.o(.rodata);
|
||||
src/object/specialFx.o(.rodata);
|
||||
data/animations/object/specialFx.o(.rodata);
|
||||
data/const/object/object10.o(.rodata);
|
||||
src/object/playerClone.o(.rodata);
|
||||
src/object/object11.o(.rodata);
|
||||
src/object/object12.o(.rodata);
|
||||
data/const/object/railtrack.o(.rodata);
|
||||
|
|
|
@ -18,7 +18,7 @@ void (*const gObjectFunctions[])(Entity*) = {
|
|||
[OBJECT_D] = ObjectD,
|
||||
[OBJECT_E] = ObjectE,
|
||||
[SPECIAL_FX] = SpecialFx,
|
||||
[OBJECT_10] = Object10,
|
||||
[PLAYER_CLONE] = PlayerClone,
|
||||
[OBJECT_11] = Object11,
|
||||
[OBJECT_12] = Object12,
|
||||
[RAILTRACK] = Railtrack,
|
||||
|
|
|
@ -0,0 +1,187 @@
|
|||
#define NENT_DEPRECATED
|
||||
#include "entity.h"
|
||||
#include "room.h"
|
||||
#include "asm.h"
|
||||
#include "sound.h"
|
||||
#include "player.h"
|
||||
#include "functions.h"
|
||||
#include "effects.h"
|
||||
|
||||
typedef struct {
|
||||
Entity base;
|
||||
u8 filler[0x4];
|
||||
u32 unk6c;
|
||||
u32 unk70;
|
||||
u16 tilePos;
|
||||
u16 unk76;
|
||||
u16 unk78;
|
||||
u16 unk7a;
|
||||
} PlayerCloneEntity;
|
||||
|
||||
extern Entity* sub_08077CF8(u32 subtype, u32 form, u32 parameter, u32 unk);
|
||||
extern const s16 gUnk_080B4468[];
|
||||
|
||||
void PlayerClone_Init(PlayerCloneEntity*);
|
||||
void PlayerClone_Action1(PlayerCloneEntity*);
|
||||
void PlayerClone_Action2(PlayerCloneEntity*);
|
||||
void sub_08084B1C(PlayerCloneEntity*);
|
||||
void sub_08084CAC(PlayerCloneEntity*);
|
||||
|
||||
void PlayerClone(Entity* this) {
|
||||
static void (*const actionFuncs[])(PlayerCloneEntity*) = {
|
||||
PlayerClone_Init,
|
||||
PlayerClone_Action1,
|
||||
PlayerClone_Action2,
|
||||
};
|
||||
|
||||
actionFuncs[this->action]((PlayerCloneEntity*)this);
|
||||
}
|
||||
|
||||
void PlayerClone_Init(PlayerCloneEntity* this) {
|
||||
super->action = 1;
|
||||
super->spriteRendering.b3 = 2;
|
||||
super->spritePriority.b0 = 4;
|
||||
super->x.HALF.HI = (super->x.HALF.HI & 0xfff0) | 8;
|
||||
super->y.HALF.HI = (super->y.HALF.HI & 0xfff0) | 8;
|
||||
this->tilePos = COORD_TO_TILE(super);
|
||||
InitializeAnimation(super, 8);
|
||||
SetTile(0x4016, this->tilePos, super->collisionLayer);
|
||||
SoundReq(SFX_112);
|
||||
}
|
||||
|
||||
const u16 PlayerCloneCollisions[] = { 0x2206, 0x6044, 0x4460, 0x622 };
|
||||
|
||||
void PlayerClone_Action1(PlayerCloneEntity* this) {
|
||||
static const Hitbox PlayerCloneHitbox = { 0, -3, { 5, 3, 3, 5 }, 6, 6 };
|
||||
|
||||
if (gPlayerState.chargeState.action == 5) {
|
||||
super->spriteSettings.draw = 1;
|
||||
super->health = 1;
|
||||
super->action = 2;
|
||||
super->updatePriority = 6;
|
||||
super->hitbox = (Hitbox*)&PlayerCloneHitbox;
|
||||
super->field_0xf = (super->type + 1) * 15;
|
||||
this->unk78 = super->x.HALF.HI - gPlayerEntity.x.HALF.HI;
|
||||
this->unk7a = super->y.HALF.HI - gPlayerEntity.y.HALF.HI;
|
||||
if ((this->unk78 != 0) && (this->unk7a != 0)) {
|
||||
((PlayerCloneEntity*)gPlayerClones[super->type])->unk70 = 1;
|
||||
}
|
||||
sub_08000152(0x315, this->tilePos, super->collisionLayer);
|
||||
super->child = sub_08077CF8(1, super->type + 1, 0, ((GenericEntity*)gPlayerState.item)->field_0x68.HALF.LO);
|
||||
if (super->child != NULL) {
|
||||
super->child->parent = super;
|
||||
}
|
||||
sub_0801766C(super);
|
||||
sub_0806FDA0(super);
|
||||
PlayerClone_Action2(this);
|
||||
} else if (gPlayerState.chargeState.action != 4) {
|
||||
sub_08000152(0x315, this->tilePos, super->collisionLayer);
|
||||
gPlayerClones[super->type] = NULL;
|
||||
DeleteThisEntity();
|
||||
} else {
|
||||
super->spriteSettings.draw ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerClone_Action2(PlayerCloneEntity* this) {
|
||||
u32 index;
|
||||
|
||||
if (super->field_0xf == 1) {
|
||||
SoundReq(SFX_PLY_VO2);
|
||||
super->field_0xf--;
|
||||
} else if (super->field_0xf != 0) {
|
||||
super->field_0xf--;
|
||||
}
|
||||
|
||||
if (gPlayerState.chargeState.action == 5 && gPlayerClones[super->type] != NULL && gPlayerState.framestate != 19 &&
|
||||
super->health != 0) {
|
||||
if (gPlayerEntity.iframes >= 1) {
|
||||
gPlayerState.chargeState.action = 1;
|
||||
} else {
|
||||
sub_080B1AA8(super);
|
||||
sub_08084B1C(this);
|
||||
super->x.HALF.HI = gPlayerEntity.x.HALF.HI + this->unk78;
|
||||
super->y.HALF.HI = gPlayerEntity.y.HALF.HI + this->unk7a;
|
||||
sub_08084CAC(this);
|
||||
sub_080085B0(super);
|
||||
if ((super->collisions & 0x6666) != 0x6666) {
|
||||
for (index = 0; index <= 3; index++) {
|
||||
if (PlayerCloneCollisions[index] == (PlayerCloneCollisions[index] & super->collisions)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (index == 4) {
|
||||
super->actionDelay = 0;
|
||||
super->spriteSettings.draw = 1;
|
||||
return;
|
||||
} else {
|
||||
if (super->actionDelay != 0) {
|
||||
if (--super->actionDelay != 0) {
|
||||
super->spriteSettings.draw ^= 1;
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
super->actionDelay = 30;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
gPlayerState.chargeState.action = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
DeleteClones();
|
||||
CreateFx(super, FX_SPARKLE_SECRET, 0);
|
||||
DeleteEntity(super->child);
|
||||
SoundReq(SFX_18F);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_08084B1C(PlayerCloneEntity* this) {
|
||||
super->flags = gPlayerEntity.flags;
|
||||
super->spriteVramOffset = gPlayerEntity.spriteVramOffset;
|
||||
super->frameIndex = gPlayerEntity.frameIndex;
|
||||
super->frameSpriteSettings = gPlayerEntity.frameSpriteSettings;
|
||||
super->spriteIndex = gPlayerEntity.spriteIndex;
|
||||
super->direction = gPlayerEntity.direction;
|
||||
super->animationState = gPlayerEntity.animationState;
|
||||
super->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX;
|
||||
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
|
||||
super->spritePriority.b0 = gPlayerEntity.spritePriority.b0;
|
||||
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
|
||||
super->collisionLayer = gPlayerEntity.collisionLayer;
|
||||
super->flags2 = gPlayerEntity.flags2;
|
||||
super->hitType = gPlayerEntity.hitType;
|
||||
super->field_0x3c = gPlayerEntity.field_0x3c;
|
||||
super->hurtType = gPlayerEntity.hurtType;
|
||||
CopyPosition(super, super->child);
|
||||
if (gPlayerState.field_0x3[1] != 0) {
|
||||
super->child->damage = gPlayerState.item->damage;
|
||||
super->child->frameIndex = gPlayerState.item->frameIndex;
|
||||
super->child->spriteSettings.flipX = gPlayerState.item->spriteSettings.flipX;
|
||||
super->child->spriteRendering.b3 = gPlayerState.item->spriteRendering.b3;
|
||||
super->child->spritePriority.b0 = gPlayerState.item->spritePriority.b0;
|
||||
if (super->child->spriteSettings.flipX) {
|
||||
super->child->hitbox->offset_x = -super->child->hitbox->offset_x;
|
||||
}
|
||||
}
|
||||
sub_0806FEBC(super, 0, 0);
|
||||
sub_0806FEBC(super, 1, 0);
|
||||
sub_0806FEBC(super, 2, super);
|
||||
sub_0806FEBC(super, 3, 0);
|
||||
sub_08078E84(super->child, super);
|
||||
}
|
||||
|
||||
void sub_08084CAC(PlayerCloneEntity* this) {
|
||||
const s16* ptr;
|
||||
|
||||
if (((PlayerCloneEntity*)gPlayerClones[super->type])->unk70 == 0) {
|
||||
ptr = &gUnk_080B4468[super->animationState & 6];
|
||||
if (sub_080B1B54(GetTileType(COORD_TO_TILE_OFFSET(super, -ptr[0], -ptr[1]), super->collisionLayer)) == 0x72) {
|
||||
((PlayerCloneEntity*)gPlayerClones[0])->unk6c |= (1 << super->type);
|
||||
} else {
|
||||
((PlayerCloneEntity*)gPlayerClones[0])->unk6c &= ~(1 << super->type);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3501,7 +3501,7 @@ void SurfaceAction_CloneTile(Entity* this) {
|
|||
break;
|
||||
}
|
||||
if (n > i) {
|
||||
Entity* e = CreateObjectWithParent(this, OBJECT_10, i, 0);
|
||||
Entity* e = CreateObjectWithParent(this, PLAYER_CLONE, i, 0);
|
||||
gPlayerClones[i] = e;
|
||||
if (e != NULL) {
|
||||
CopyPosition(this, e);
|
||||
|
|
Loading…
Reference in New Issue