Decompile object10

This commit is contained in:
Tal Hayon 2022-03-13 00:12:16 +02:00
parent 5ebbffc50d
commit cc8ef3a260
9 changed files with 194 additions and 684 deletions

View File

@ -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}

View File

@ -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,

View File

@ -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"

View File

@ -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

View File

@ -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();

View File

@ -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);

View File

@ -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,

187
src/object/playerClone.c Normal file
View File

@ -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);
}
}
}

View File

@ -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);