object86.c OK

This commit is contained in:
theo3 2020-07-08 19:45:04 -07:00
parent 6f08201b71
commit bde7b45adb
8 changed files with 365 additions and 630 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

69
src/code_080A29BC.c Normal file
View File

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

102
src/object49.c Normal file
View File

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

81
src/object86.c Normal file
View File

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