mirror of https://github.com/zeldaret/tmc.git
object86.c OK
This commit is contained in:
parent
6f08201b71
commit
bde7b45adb
|
@ -4,125 +4,6 @@
|
|||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_080A29BC
|
||||
sub_080A29BC: @ 0x080A29BC
|
||||
push {lr}
|
||||
movs r1, #2
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A29C8
|
||||
sub_080A29C8: @ 0x080A29C8
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
adds r6, r2, #0
|
||||
movs r0, #0xf
|
||||
movs r1, #2
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _080A29F4
|
||||
ldr r1, _080A29F8 @ =gRoomControls
|
||||
ldrh r0, [r1, #6]
|
||||
adds r0, r0, r4
|
||||
strh r0, [r2, #0x2e]
|
||||
ldrh r0, [r1, #8]
|
||||
adds r0, r0, r5
|
||||
strh r0, [r2, #0x32]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x38
|
||||
strb r6, [r0]
|
||||
_080A29F4:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_080A29F8: .4byte gRoomControls
|
||||
|
||||
thumb_func_start sub_080A29FC
|
||||
sub_080A29FC: @ 0x080A29FC
|
||||
push {lr}
|
||||
movs r1, #0x11
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A2A08
|
||||
sub_080A2A08: @ 0x080A2A08
|
||||
push {lr}
|
||||
movs r1, #6
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A2A14
|
||||
sub_080A2A14: @ 0x080A2A14
|
||||
push {lr}
|
||||
movs r1, #0xb
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A2A20
|
||||
sub_080A2A20: @ 0x080A2A20
|
||||
push {r4, lr}
|
||||
adds r4, r1, #0
|
||||
adds r3, r2, #0
|
||||
movs r1, #0
|
||||
adds r2, r4, #0
|
||||
bl CreateObjectWithParent
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _080A2A38
|
||||
movs r0, #5
|
||||
strb r0, [r1, #0xe]
|
||||
_080A2A38:
|
||||
adds r0, r1, #0
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_080A2A3C
|
||||
sub_080A2A3C: @ 0x080A2A3C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r1, #0
|
||||
adds r5, r2, #0
|
||||
adds r6, r3, #0
|
||||
movs r1, #0
|
||||
adds r2, r4, #0
|
||||
adds r3, r5, #0
|
||||
bl CreateObjectWithParent
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _080A2A5E
|
||||
movs r0, #5
|
||||
strb r0, [r1, #0xe]
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x86
|
||||
strh r6, [r0]
|
||||
_080A2A5E:
|
||||
adds r0, r1, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_080A2A64
|
||||
sub_080A2A64: @ 0x080A2A64
|
||||
push {lr}
|
||||
movs r1, #0x20
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _080A2A80
|
||||
adds r3, r2, #0
|
||||
adds r3, #0x29
|
||||
ldrb r0, [r3]
|
||||
movs r1, #7
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
_080A2A80:
|
||||
adds r0, r2, #0
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A2A84
|
||||
sub_080A2A84: @ 0x080A2A84
|
||||
|
|
217
asm/object49.s
217
asm/object49.s
|
@ -6,223 +6,6 @@
|
|||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Object49
|
||||
Object49: @ 0x0808F0A0
|
||||
push {lr}
|
||||
ldr r2, _0808F0B4 @ =gUnk_08121E5C
|
||||
ldrb r1, [r0, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808F0B4: .4byte gUnk_08121E5C
|
||||
|
||||
thumb_func_start sub_0808F0B8
|
||||
sub_0808F0B8: @ 0x0808F0B8
|
||||
push {lr}
|
||||
ldr r2, _0808F0CC @ =gUnk_08121E88
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808F0CC: .4byte gUnk_08121E88
|
||||
|
||||
thumb_func_start sub_0808F0D0
|
||||
sub_0808F0D0: @ 0x0808F0D0
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
movs r1, #0x49
|
||||
movs r2, #2
|
||||
movs r3, #0
|
||||
bl CreateObjectWithParent
|
||||
str r0, [r5, #0x54]
|
||||
cmp r0, #0
|
||||
bne _0808F0E8
|
||||
bl DeleteThisEntity
|
||||
_0808F0E8:
|
||||
movs r6, #1
|
||||
strb r6, [r5, #0xc]
|
||||
ldr r0, _0808F148 @ =0x0000FF40
|
||||
strh r0, [r5, #0x36]
|
||||
bl Random
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x3f
|
||||
ands r4, r0
|
||||
bl Random
|
||||
ands r0, r6
|
||||
cmp r0, #0
|
||||
beq _0808F106
|
||||
rsbs r4, r4, #0
|
||||
_0808F106:
|
||||
ldr r0, [r5, #0x50]
|
||||
ldrh r0, [r0, #0x2e]
|
||||
adds r0, r0, r4
|
||||
strh r0, [r5, #0x2e]
|
||||
bl Random
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x1f
|
||||
ands r4, r0
|
||||
bl Random
|
||||
ands r0, r6
|
||||
cmp r0, #0
|
||||
beq _0808F124
|
||||
rsbs r4, r4, #0
|
||||
_0808F124:
|
||||
ldr r0, [r5, #0x50]
|
||||
ldrh r0, [r0, #0x32]
|
||||
adds r0, r0, r4
|
||||
strh r0, [r5, #0x32]
|
||||
movs r0, #0x90
|
||||
lsls r0, r0, #2
|
||||
str r0, [r5, #0x74]
|
||||
movs r0, #0xa0
|
||||
lsls r0, r0, #1
|
||||
str r0, [r5, #0x78]
|
||||
adds r0, r5, #0
|
||||
movs r1, #3
|
||||
bl InitializeAnimation
|
||||
adds r0, r5, #0
|
||||
bl sub_0808F14C
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0808F148: .4byte 0x0000FF40
|
||||
|
||||
thumb_func_start sub_0808F14C
|
||||
sub_0808F14C: @ 0x0808F14C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0808F2B0
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #6
|
||||
adds r0, r4, #0
|
||||
bl sub_08003FC4
|
||||
cmp r0, #0
|
||||
bne _0808F16E
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x84
|
||||
bl PlaySFX
|
||||
_0808F16E:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0808F170
|
||||
sub_0808F170: @ 0x0808F170
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x74]
|
||||
subs r0, #0x20
|
||||
str r0, [r4, #0x74]
|
||||
ldr r1, [r4, #0x78]
|
||||
adds r1, #0x20
|
||||
str r1, [r4, #0x78]
|
||||
adds r0, r4, #0
|
||||
movs r2, #8
|
||||
movs r3, #2
|
||||
bl sub_0806FCF4
|
||||
ldr r1, [r4, #0x78]
|
||||
ldr r0, _0808F1A0 @ =0x000001FF
|
||||
cmp r1, r0
|
||||
bls _0808F198
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
_0808F198:
|
||||
adds r0, r4, #0
|
||||
bl sub_0808F2B0
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0808F1A0: .4byte 0x000001FF
|
||||
|
||||
thumb_func_start sub_0808F1A4
|
||||
sub_0808F1A4: @ 0x0808F1A4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, [r4, #0x78]
|
||||
adds r1, #0x10
|
||||
str r1, [r4, #0x78]
|
||||
ldr r0, [r4, #0x74]
|
||||
adds r0, #0x10
|
||||
str r0, [r4, #0x74]
|
||||
adds r0, r4, #0
|
||||
movs r2, #8
|
||||
movs r3, #2
|
||||
bl sub_0806FCF4
|
||||
ldr r1, [r4, #0x78]
|
||||
ldr r0, _0808F1D4 @ =0x000003FF
|
||||
cmp r1, r0
|
||||
bls _0808F1D8
|
||||
ldr r1, [r4, #0x54]
|
||||
movs r0, #0xff
|
||||
strb r0, [r1, #0xc]
|
||||
bl DeleteThisEntity
|
||||
b _0808F1DE
|
||||
.align 2, 0
|
||||
_0808F1D4: .4byte 0x000003FF
|
||||
_0808F1D8:
|
||||
adds r0, r4, #0
|
||||
bl sub_0808F2B0
|
||||
_0808F1DE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0808F1E0
|
||||
sub_0808F1E0: @ 0x0808F1E0
|
||||
push {lr}
|
||||
ldr r2, _0808F1F4 @ =gUnk_08121E98
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808F1F4: .4byte gUnk_08121E98
|
||||
|
||||
thumb_func_start sub_0808F1F8
|
||||
sub_0808F1F8: @ 0x0808F1F8
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r2, [r4, #0x19]
|
||||
movs r0, #3
|
||||
orrs r2, r0
|
||||
strb r2, [r4, #0x19]
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r3, [r4, #0x50]
|
||||
ldrb r1, [r3, #0x19]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
movs r0, #0x3f
|
||||
ands r2, r0
|
||||
orrs r2, r1
|
||||
strb r2, [r4, #0x19]
|
||||
ldrb r1, [r3, #0x1b]
|
||||
lsrs r1, r1, #6
|
||||
lsls r1, r1, #6
|
||||
ldrb r2, [r4, #0x1b]
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1b]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r0, [r2]
|
||||
movs r1, #7
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl InitializeAnimation
|
||||
adds r0, r4, #0
|
||||
bl sub_0808F244
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0808F244
|
||||
sub_0808F244: @ 0x0808F244
|
||||
push {r4, lr}
|
||||
|
|
181
asm/object86.s
181
asm/object86.s
|
@ -1,181 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Object86
|
||||
Object86: @ 0x08099DB8
|
||||
push {lr}
|
||||
ldr r2, _08099DCC @ =gUnk_081237F8
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08099DCC: .4byte gUnk_081237F8
|
||||
|
||||
thumb_func_start sub_08099DD0
|
||||
sub_08099DD0: @ 0x08099DD0
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x38
|
||||
movs r6, #0
|
||||
movs r5, #1
|
||||
strb r5, [r0]
|
||||
ldrb r0, [r4, #0x19]
|
||||
movs r1, #0xc0
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x19]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r0, [r2]
|
||||
movs r1, #7
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
strb r6, [r4, #0xd]
|
||||
movs r0, #0x46
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
beq _08099E04
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0xc]
|
||||
strb r6, [r4, #0x1e]
|
||||
b _08099E0E
|
||||
_08099E04:
|
||||
strb r5, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl InitializeAnimation
|
||||
_08099E0E:
|
||||
pop {r4, r5, r6, pc}
|
||||
|
||||
thumb_func_start sub_08099E10
|
||||
sub_08099E10: @ 0x08099E10
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x74
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _08099E54
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
adds r5, r0, #0
|
||||
cmp r1, #1
|
||||
bne _08099E3E
|
||||
ldrb r0, [r4, #0xd]
|
||||
cmp r0, #0
|
||||
bne _08099E3E
|
||||
strb r0, [r5]
|
||||
adds r0, r4, #0
|
||||
bl sub_08099ECC
|
||||
_08099E3E:
|
||||
ldrb r1, [r5]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08099E54
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl InitializeAnimation
|
||||
_08099E54:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08099E58
|
||||
sub_08099E58: @ 0x08099E58
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetNextFrame
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x5a
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08099E88
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r0, [r4, #0xe]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #3
|
||||
bne _08099E88
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0x1e]
|
||||
_08099E88:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08099E8C
|
||||
sub_08099E8C: @ 0x08099E8C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08099EC4 @ =gLinkEntity
|
||||
movs r2, #0xc
|
||||
movs r3, #0xc
|
||||
bl sub_080041A0
|
||||
cmp r0, #0
|
||||
beq _08099EC2
|
||||
ldrb r0, [r4, #0xd]
|
||||
cmp r0, #0
|
||||
bne _08099EB2
|
||||
adds r0, r4, #0
|
||||
bl sub_08099ECC
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1e
|
||||
bl sub_0805E4E0
|
||||
_08099EB2:
|
||||
movs r0, #0x75
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _08099EC2
|
||||
movs r0, #7
|
||||
bl sub_0805B390
|
||||
_08099EC2:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08099EC4: .4byte gLinkEntity
|
||||
|
||||
thumb_func_start nullsub_534
|
||||
nullsub_534: @ 0x08099EC8
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08099ECC
|
||||
sub_08099ECC: @ 0x08099ECC
|
||||
push {r4, lr}
|
||||
movs r4, #0
|
||||
movs r1, #1
|
||||
strb r1, [r0, #0xd]
|
||||
ldr r1, _08099EF4 @ =gLinkEntity
|
||||
bl CopyPosition
|
||||
ldr r2, _08099EF8 @ =gLinkState
|
||||
movs r0, #3
|
||||
strb r0, [r2, #0xc]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x38
|
||||
strb r4, [r0]
|
||||
ldr r0, [r2, #0x30]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #8
|
||||
orrs r0, r1
|
||||
str r0, [r2, #0x30]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08099EF4: .4byte gLinkEntity
|
||||
_08099EF8: .4byte gLinkState
|
222
include/entity.h
222
include/entity.h
|
@ -1,3 +1,4 @@
|
|||
// clang-format off
|
||||
#ifndef ENTITY_H
|
||||
#define ENTITY_H
|
||||
|
||||
|
@ -39,118 +40,115 @@ union SplitHWord {
|
|||
} PACKED;
|
||||
|
||||
typedef struct Entity {
|
||||
u32* field_0x0;
|
||||
u32* field_0x4;
|
||||
EntityType entityType;
|
||||
u8 action;
|
||||
u8 previousActionFlag;
|
||||
u8 actionDelay;
|
||||
u8 field_0xf;
|
||||
u8 flags;
|
||||
u8 scriptedScene : 4;
|
||||
u8 scriptedScene2 : 4;
|
||||
s16 spriteTileSize;
|
||||
u8 animationState;
|
||||
u8 direction;
|
||||
u8 possibleBool;
|
||||
u8 field_0x17;
|
||||
union {
|
||||
u8 raw;
|
||||
struct {
|
||||
u8 ss0 : 2;
|
||||
u8 ss2 : 1;
|
||||
u8 ss3 : 1;
|
||||
u8 ss4 : 1;
|
||||
u8 ss5 : 1;
|
||||
u8 ss6 : 1;
|
||||
u8 ss7 : 1;
|
||||
} PACKED b;
|
||||
} PACKED spriteSettings;
|
||||
|
||||
struct {
|
||||
u8 b0 : 2;
|
||||
u8 b1 : 2;
|
||||
u8 b2 : 2;
|
||||
u8 b3 : 2;
|
||||
} PACKED spriteOrder;
|
||||
|
||||
u8 palette;
|
||||
struct {
|
||||
u8 b0 : 4;
|
||||
u8 b1 : 2;
|
||||
u8 b2 : 2;
|
||||
} PACKED spriteOrientation;
|
||||
u8 filler[1];
|
||||
u8 field_0x1d;
|
||||
u8 frameIndex;
|
||||
u8 lastFrameIndex;
|
||||
s32 field_0x20;
|
||||
s16 nonPlanarMovement;
|
||||
u8 spriteAnimation[3];
|
||||
struct {
|
||||
u8 b0 : 3;
|
||||
u8 b1 : 3;
|
||||
u8 b2 : 2;
|
||||
} PACKED ticks;
|
||||
u16 collisions;
|
||||
union SplitWord x;
|
||||
union SplitWord y;
|
||||
union SplitWord height; // todo
|
||||
u8 collisionLayer;
|
||||
s8 interactType;
|
||||
u8 field_0x3a;
|
||||
u8 flags2;
|
||||
u8 field_0x3c;
|
||||
u8 field_0x3d;
|
||||
u8 field_0x3e;
|
||||
u8 damageType;
|
||||
u8 field_0x40;
|
||||
u8 bitfield;
|
||||
u8 field_0x42;
|
||||
u8 field_0x43;
|
||||
u8 field_0x44;
|
||||
u8 currentHealth;
|
||||
s16 field_0x46;
|
||||
BoundingBox* boundingBox;
|
||||
u8 field_0x4c;
|
||||
u8 field_0x4d;
|
||||
u8 field_0x4e;
|
||||
u8 field_0x4f;
|
||||
struct Entity* parent;
|
||||
struct Entity* attachedEntity;
|
||||
u8 animIndex;
|
||||
u8 frameDuration;
|
||||
union {
|
||||
u8 all;
|
||||
struct {
|
||||
u8 f0 : 1;
|
||||
u8 f1 : 5;
|
||||
u8 f2 : 1;
|
||||
u8 f3 : 1;
|
||||
} PACKED b;
|
||||
} PACKED frames;
|
||||
u8 frameSpriteSettings;
|
||||
Frame* animPtr;
|
||||
u16 spriteVramOffset;
|
||||
u8 spriteOffsetX;
|
||||
u8 spriteOffsetY;
|
||||
u32* otherEntity;
|
||||
u8 field_0x68;
|
||||
u8 field_0x69;
|
||||
union SplitHWord field_0x6a;
|
||||
u8 field_0x6c;
|
||||
u8 field_0x6d;
|
||||
u8 filler4[6];
|
||||
u16 field_0x74;
|
||||
u16 field_0x76;
|
||||
union SplitHWord field_0x78;
|
||||
u16 field_0x7a;
|
||||
union SplitWord field_0x7c;
|
||||
u16 field_0x80;
|
||||
u16 field_0x82;
|
||||
union SplitHWord cutsceneBeh;
|
||||
u16 field_0x86;
|
||||
|
||||
/*0x00*/ u32* field_0x0;
|
||||
/*0x04*/ u32* field_0x4;
|
||||
/*0x08*/ EntityType entityType;
|
||||
/*0x0c*/ u8 action;
|
||||
/*0x0d*/ u8 previousActionFlag;
|
||||
/*0x0e*/ u8 actionDelay;
|
||||
/*0x0f*/ u8 field_0xf;
|
||||
/*0x10*/ u8 flags;
|
||||
/*0x11*/ u8 scriptedScene : 4;
|
||||
/* */ u8 scriptedScene2 : 4;
|
||||
/*0x12*/ s16 spriteTileSize;
|
||||
/*0x14*/ u8 animationState;
|
||||
/*0x15*/ u8 direction;
|
||||
/*0x16*/ u8 possibleBool;
|
||||
/*0x17*/ u8 field_0x17;
|
||||
/*0x18*/ union {
|
||||
/* */ u8 raw;
|
||||
/* */ struct {
|
||||
/* */ u8 ss0 : 2;
|
||||
/* */ u8 ss2 : 1;
|
||||
/* */ u8 ss3 : 1;
|
||||
/* */ u8 ss4 : 1;
|
||||
/* */ u8 ss5 : 1;
|
||||
/* */ u8 ss6 : 1;
|
||||
/* */ u8 ss7 : 1;
|
||||
/* */ } PACKED b;
|
||||
/* */ } PACKED spriteSettings;
|
||||
/*0x19*/ struct {
|
||||
/* */ u8 b0 : 2;
|
||||
/* */ u8 b1 : 2;
|
||||
/* */ u8 b2 : 2;
|
||||
/* */ u8 b3 : 2;
|
||||
/* */ } PACKED spriteOrder;
|
||||
/*0x1a*/ u8 palette;
|
||||
/*0x1b*/ struct {
|
||||
/* */ u8 b0 : 4;
|
||||
/* */ u8 b1 : 2;
|
||||
/* */ u8 b2 : 2;
|
||||
/* */ } PACKED spriteOrientation;
|
||||
/*0x1c*/ u8 filler[1];
|
||||
/*0x1d*/ u8 field_0x1d;
|
||||
/*0x1e*/ u8 frameIndex;
|
||||
/*0x1f*/ u8 lastFrameIndex;
|
||||
/*0x20*/ s32 field_0x20;
|
||||
/*0x24*/ s16 nonPlanarMovement;
|
||||
/*0x26*/ u8 spriteAnimation[3];
|
||||
/*0x29*/ struct {
|
||||
/* */ u8 b0 : 3;
|
||||
/* */ u8 b1 : 3;
|
||||
/* */ u8 b2 : 2;
|
||||
/* */ } PACKED ticks;
|
||||
/*0x2a*/ u16 collisions;
|
||||
/*0x2c*/ union SplitWord x;
|
||||
/*0x30*/ union SplitWord y;
|
||||
/*0x34*/ union SplitWord height; // todo
|
||||
/*0x38*/ u8 collisionLayer;
|
||||
/*0x39*/ s8 interactType;
|
||||
/*0x3a*/ u8 field_0x3a;
|
||||
/*0x3b*/ u8 flags2;
|
||||
/*0x3c*/ u8 field_0x3c;
|
||||
/*0x3d*/ u8 hurtBlinkTime;
|
||||
/*0x3e*/ u8 field_0x3e;
|
||||
/*0x3f*/ u8 damageType;
|
||||
/*0x40*/ u8 field_0x40;
|
||||
/*0x41*/ u8 bitfield;
|
||||
/*0x42*/ u8 field_0x42;
|
||||
/*0x43*/ u8 field_0x43;
|
||||
/*0x44*/ u8 field_0x44;
|
||||
/*0x45*/ u8 currentHealth;
|
||||
/*0x46*/ s16 field_0x46;
|
||||
/*0x48*/ BoundingBox* boundingBox;
|
||||
/*0x4c*/ u8 field_0x4c;
|
||||
/*0x4d*/ u8 field_0x4d;
|
||||
/*0x4e*/ u8 field_0x4e;
|
||||
/*0x4f*/ u8 field_0x4f;
|
||||
/*0x50*/ struct Entity* parent;
|
||||
/*0x54*/ struct Entity* attachedEntity;
|
||||
/*0x58*/ u8 animIndex;
|
||||
/*0x59*/ u8 frameDuration;
|
||||
/*0x5a*/ union {
|
||||
/* */ u8 all;
|
||||
/* */ struct {
|
||||
/* */ u8 f0 : 1;
|
||||
/* */ u8 f1 : 5;
|
||||
/* */ u8 f2 : 1;
|
||||
/* */ u8 f3 : 1;
|
||||
/* */ } PACKED b;
|
||||
/* */ } PACKED frames;
|
||||
/*0x5b*/ u8 frameSpriteSettings;
|
||||
/*0x5c*/ Frame* animPtr;
|
||||
/*0x60*/ u16 spriteVramOffset;
|
||||
/*0x62*/ u8 spriteOffsetX;
|
||||
/*0x64*/ u8 spriteOffsetY;
|
||||
/*0x64*/ u32* otherEntity;
|
||||
/*0x68*/ u8 field_0x68;
|
||||
/*0x69*/ u8 field_0x69;
|
||||
/*0x6a*/ union SplitHWord field_0x6a;
|
||||
/*0x6c*/ u8 field_0x6c;
|
||||
/*0x6d*/ u8 field_0x6d;
|
||||
/*0x6e*/ u8 filler4[6];
|
||||
/*0x74*/ u16 field_0x74;
|
||||
/*0x76*/ u16 field_0x76;
|
||||
/*0x78*/ union SplitHWord field_0x78;
|
||||
/*0x7a*/ u16 field_0x7a;
|
||||
/*0x7c*/ union SplitWord field_0x7c;
|
||||
/*0x80*/ u16 field_0x80;
|
||||
/*0x82*/ u16 field_0x82;
|
||||
/*0x84*/ union SplitHWord cutsceneBeh;
|
||||
/*0x86*/ u16 field_0x86;
|
||||
} Entity;
|
||||
|
||||
#define COORD_TO_TILE(entity) \
|
||||
|
|
|
@ -729,6 +729,7 @@ SECTIONS {
|
|||
src/heartContainer.o(.text);
|
||||
asm/heartContainer.o(.text);
|
||||
asm/object48.o(.text);
|
||||
src/object49.o(.text);
|
||||
asm/object49.o(.text);
|
||||
asm/backgroundCloud.o(.text);
|
||||
asm/object4B.o(.text);
|
||||
|
@ -789,7 +790,7 @@ SECTIONS {
|
|||
asm/bigPushableLever.o(.text);
|
||||
asm/smallIceBlock.o(.text);
|
||||
asm/bigIceBlock.o(.text);
|
||||
asm/object86.o(.text);
|
||||
src/object86.o(.text);
|
||||
asm/object87.o(.text);
|
||||
asm/macroBook.o(.text);
|
||||
asm/object89.o(.text);
|
||||
|
@ -858,6 +859,7 @@ SECTIONS {
|
|||
src/createObject.o(.text);
|
||||
src/createObjectWithParent.o(.text);
|
||||
asm/createFx.o(.text);
|
||||
src/code_080A29BC.o(.text);
|
||||
asm/code_080A29BC.o(.text);
|
||||
asm/playSFX.o(.text);
|
||||
asm/code_080A3480.o(.text);
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "room.h"
|
||||
|
||||
void sub_080A29BC(Entity *parent)
|
||||
{
|
||||
CreateFx(parent, 2, 0);
|
||||
}
|
||||
|
||||
void sub_080A29C8(s32 xOff, s32 yOff, u32 layer)
|
||||
{
|
||||
Entity *pEVar1;
|
||||
|
||||
pEVar1 = CreateObject(0xf, 2, 0);
|
||||
if (pEVar1 != NULL) {
|
||||
pEVar1->x.HALF.HI = gRoomControls.roomOriginX + xOff;
|
||||
pEVar1->y.HALF.HI = gRoomControls.roomOriginY + yOff;
|
||||
pEVar1->collisionLayer = layer;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A29FC(Entity *parent)
|
||||
{
|
||||
CreateFx(parent, 0x11, 0);
|
||||
}
|
||||
|
||||
void sub_080A2A08(Entity *parent)
|
||||
{
|
||||
CreateFx(parent, 0x6, 0);
|
||||
}
|
||||
|
||||
void sub_080A2A14(Entity *parent)
|
||||
{
|
||||
CreateFx(parent, 0xb, 0);
|
||||
}
|
||||
|
||||
Entity * sub_080A2A20(Entity *parent, u32 form, u32 parameter)
|
||||
{
|
||||
Entity *pEVar1;
|
||||
|
||||
pEVar1 = CreateObjectWithParent(parent, 0, form, parameter);
|
||||
if (pEVar1 != NULL) {
|
||||
pEVar1->actionDelay = 5;
|
||||
}
|
||||
return pEVar1;
|
||||
}
|
||||
|
||||
Entity * sub_080A2A3C(Entity *parent, u32 form, u32 subtype, u32 param_4)
|
||||
{
|
||||
Entity *ent;
|
||||
|
||||
ent = CreateObjectWithParent(parent, 0, form, subtype);
|
||||
if (ent != NULL) {
|
||||
ent->actionDelay = 5;
|
||||
ent->field_0x86 = param_4;
|
||||
}
|
||||
return ent;
|
||||
}
|
||||
|
||||
Entity * sub_080A2A64(Entity *parent)
|
||||
{
|
||||
Entity *pEVar1;
|
||||
|
||||
pEVar1 = CreateFx(parent, 0x20, 0);
|
||||
if (pEVar1 != NULL) {
|
||||
pEVar1->ticks.b0 = 7;
|
||||
}
|
||||
return pEVar1;
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
extern u32 Random(void);
|
||||
extern void sub_0808F2B0(Entity*);
|
||||
extern u32 sub_08003FC4(Entity*, u32);
|
||||
void sub_0808F14C(Entity*);
|
||||
extern void PlaySFX(u32);
|
||||
extern void sub_0806FCF4(Entity*, u32, u32, u32);
|
||||
extern void sub_0808F244(Entity*);
|
||||
|
||||
extern void (*const gUnk_08121E5C[])(Entity*);
|
||||
extern void (*const gUnk_08121E88[])(Entity*);
|
||||
extern void (*const gUnk_08121E98[])(Entity*);
|
||||
|
||||
void Object49(Entity* this) {
|
||||
gUnk_08121E5C[this->entityType.form](this);
|
||||
}
|
||||
|
||||
void sub_0808F0B8(Entity* this) {
|
||||
gUnk_08121E88[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0808F0D0(Entity* this) {
|
||||
u32 offsetX;
|
||||
u32 offsetY;
|
||||
Entity* ent;
|
||||
u32 uVar3;
|
||||
|
||||
ent = CreateObjectWithParent(this, 0x49, 2, 0);
|
||||
this->attachedEntity = ent;
|
||||
if (ent == NULL) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
this->action = 1;
|
||||
this->height.HALF.HI = -0xc0;
|
||||
offsetX = Random() % 64;
|
||||
if ((Random() & 1) != 0) {
|
||||
offsetX = -offsetX;
|
||||
}
|
||||
this->x.HALF.HI = this->parent->x.HALF.HI + offsetX;
|
||||
offsetY = Random() % 32;
|
||||
if ((Random() & 1) != 0) {
|
||||
offsetY = -offsetY;
|
||||
}
|
||||
this->y.HALF.HI = this->parent->y.HALF.HI + offsetY;
|
||||
*(u32*)&this->field_0x74 = 0x240;
|
||||
*(u32*)&this->field_0x78 = 0x140;
|
||||
InitializeAnimation(this, 3);
|
||||
sub_0808F14C(this);
|
||||
}
|
||||
|
||||
void sub_0808F14C(Entity* this) {
|
||||
sub_0808F2B0(this);
|
||||
if (sub_08003FC4(this, 0x2000) == 0) {
|
||||
this->action++;
|
||||
PlaySFX(0x84);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808F170(Entity *this)
|
||||
{
|
||||
*(u32 *)&this->field_0x74 -= 0x20;
|
||||
*(u32 *)&this->field_0x78 += 0x20;
|
||||
sub_0806FCF4(this, *(u32 *)&this->field_0x78, 8, 2);
|
||||
if (*(u32 *)&this->field_0x78 > 0x1ff) {
|
||||
this->action++;
|
||||
}
|
||||
sub_0808F2B0(this);
|
||||
}
|
||||
|
||||
void sub_0808F1A4(Entity *this)
|
||||
{
|
||||
*(u32 *)&this->field_0x78 += 0x10;
|
||||
*(u32 *)&this->field_0x74 += 0x10;
|
||||
sub_0806FCF4(this, *(u32 *)&this->field_0x78, 8, 2);
|
||||
if (*(u32 *)&this->field_0x78 > 0x3ff) {
|
||||
this->attachedEntity->action = 0xff;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
else {
|
||||
sub_0808F2B0(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808F1E0(Entity *this)
|
||||
{
|
||||
gUnk_08121E98[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0808F1F8(Entity *this)
|
||||
{
|
||||
u8 bVar1;
|
||||
|
||||
this->spriteOrder.b0 = 3;
|
||||
this->action++;
|
||||
this->spriteOrder.b3 = this->parent->spriteOrder.b3;
|
||||
this->spriteOrientation.b2 = this->parent->spriteOrientation.b2;
|
||||
this->ticks.b0 = 7;
|
||||
InitializeAnimation(this, 1);
|
||||
sub_0808F244(this);
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "link.h"
|
||||
#include "flags.h"
|
||||
|
||||
extern u32 sub_080041A0(Entity*, Entity*, u32, u32);
|
||||
void sub_08099ECC(Entity*);
|
||||
extern void sub_0805E4E0(Entity*, u32);
|
||||
extern void sub_0805B390(u32);
|
||||
extern void CopyPosition(Entity*, Entity*);
|
||||
|
||||
extern void (*const gUnk_081237F8[])(Entity*);
|
||||
|
||||
void Object86(Entity* this) {
|
||||
gUnk_081237F8[this->action](this);
|
||||
}
|
||||
|
||||
void sub_08099DD0(Entity* this) {
|
||||
this->collisionLayer = 1;
|
||||
this->spriteOrder.b3 = 3;
|
||||
this->ticks.b0 = 7;
|
||||
this->previousActionFlag = 0;
|
||||
if (GetInventoryValue(0x46)) {
|
||||
this->action = 4;
|
||||
this->frameIndex = 0;
|
||||
} else {
|
||||
this->action = 1;
|
||||
InitializeAnimation(this, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08099E10(Entity* this) {
|
||||
if (CheckLocalFlag(0x74)) {
|
||||
GetNextFrame(this);
|
||||
if ((this->frames.all == 1) && (this->previousActionFlag == 0)) {
|
||||
this->frames.all = 0;
|
||||
sub_08099ECC(this);
|
||||
}
|
||||
if (this->frames.b.f3) {
|
||||
this->action = 2;
|
||||
InitializeAnimation(this, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08099E58(Entity *this)
|
||||
{
|
||||
GetNextFrame(this);
|
||||
if (this->frames.b.f3) {
|
||||
this->frames.b.f3 = 0;
|
||||
this->actionDelay++;
|
||||
if (this->actionDelay == 3) {
|
||||
this->action = 3;
|
||||
this->frameIndex = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08099E8C(Entity *this)
|
||||
{
|
||||
if (sub_080041A0(this, &gLinkEntity, 0xc, 0xc)) {
|
||||
if (this->previousActionFlag == 0) {
|
||||
sub_08099ECC(this);
|
||||
sub_0805E4E0(this, 0x1e);
|
||||
}
|
||||
if (CheckLocalFlag(0x75)) {
|
||||
sub_0805B390(0x7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_534(Entity* this) {}
|
||||
|
||||
void sub_08099ECC(Entity *this)
|
||||
{
|
||||
this->previousActionFlag = 1;
|
||||
CopyPosition(this, &gLinkEntity);
|
||||
gLinkState.linkAction = 3;
|
||||
gLinkState.filler12[4] = 0;
|
||||
gLinkState.flags.all |= 0x8000;
|
||||
}
|
Loading…
Reference in New Issue