mirror of https://github.com/zeldaret/tmc.git
start bird.c
This commit is contained in:
parent
e8bf4aa165
commit
76483d30c3
363
asm/bird.s
363
asm/bird.s
|
@ -6,369 +6,6 @@
|
|||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Bird
|
||||
Bird: @ 0x0809CF24
|
||||
push {lr}
|
||||
ldr r2, _0809CF38 @ =gUnk_08123EC0
|
||||
ldrb r1, [r0, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0809CF38: .4byte gUnk_08123EC0
|
||||
|
||||
thumb_func_start sub_0809CF3C
|
||||
sub_0809CF3C: @ 0x0809CF3C
|
||||
push {lr}
|
||||
ldr r2, _0809CF50 @ =gUnk_08123EEC
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0809CF50: .4byte gUnk_08123EEC
|
||||
|
||||
thumb_func_start sub_0809CF54
|
||||
sub_0809CF54: @ 0x0809CF54
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
movs r0, #0x31
|
||||
strb r0, [r4, #0xe]
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
ldr r0, _0809CFDC @ =0xFFFE8000
|
||||
str r0, [r4, #0x20]
|
||||
ldr r0, _0809CFE0 @ =0xFFC74000
|
||||
str r0, [r4, #0x34]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
movs r0, #0xf8
|
||||
lsls r0, r0, #8
|
||||
strh r0, [r1]
|
||||
movs r0, #0xa0
|
||||
lsls r0, r0, #2
|
||||
strh r0, [r4, #0x24]
|
||||
movs r0, #8
|
||||
strb r0, [r4, #0x15]
|
||||
subs r1, #0x30
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
ldr r0, _0809CFE4 @ =gRoomControls
|
||||
ldrh r0, [r0, #0xa]
|
||||
strh r0, [r4, #0x2e]
|
||||
ldr r0, _0809CFE8 @ =0x00000123
|
||||
bl PlaySFX
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl InitAnimationForceUpdate
|
||||
movs r0, #0x95
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _0809CFD8
|
||||
str r4, [r5, #0x50]
|
||||
movs r3, #0x80
|
||||
lsls r3, r3, #0xc
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
movs r2, #0
|
||||
bl PositionRelative
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
bl ResolveEntityOnTop
|
||||
_0809CFD8:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0809CFDC: .4byte 0xFFFE8000
|
||||
_0809CFE0: .4byte 0xFFC74000
|
||||
_0809CFE4: .4byte gRoomControls
|
||||
_0809CFE8: .4byte 0x00000123
|
||||
|
||||
thumb_func_start sub_0809CFEC
|
||||
sub_0809CFEC: @ 0x0809CFEC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0806F69C
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
movs r2, #0
|
||||
ldrsh r1, [r0, r2]
|
||||
adds r0, r4, #0
|
||||
bl sub_08003FC4
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _0809D018
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0809D026
|
||||
strb r0, [r4, #0xf]
|
||||
b _0809D026
|
||||
_0809D018:
|
||||
adds r0, r4, #0
|
||||
bl sub_080040A8
|
||||
cmp r0, #0
|
||||
bne _0809D026
|
||||
bl DeleteThisEntity
|
||||
_0809D026:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0809D030
|
||||
sub_0809D030: @ 0x0809D030
|
||||
push {lr}
|
||||
ldr r2, _0809D044 @ =gUnk_08123EF4
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0809D044: .4byte gUnk_08123EF4
|
||||
|
||||
thumb_func_start sub_0809D048
|
||||
sub_0809D048: @ 0x0809D048
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x17
|
||||
bl InitAnimationForceUpdate
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0809D06C
|
||||
sub_0809D06C: @ 0x0809D06C
|
||||
push {lr}
|
||||
ldr r2, _0809D080 @ =gUnk_08123EFC
|
||||
ldrb r1, [r0, #0xd]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0809D080: .4byte gUnk_08123EFC
|
||||
|
||||
thumb_func_start sub_0809D084
|
||||
sub_0809D084: @ 0x0809D084
|
||||
push {lr}
|
||||
adds r1, r0, #0
|
||||
ldr r0, [r1, #0x50]
|
||||
cmp r0, #0
|
||||
beq _0809D0A8
|
||||
ldrb r2, [r0, #0xf]
|
||||
cmp r2, #0
|
||||
beq _0809D0A0
|
||||
movs r3, #0x80
|
||||
lsls r3, r3, #0xc
|
||||
movs r2, #0
|
||||
bl PositionRelative
|
||||
b _0809D0A8
|
||||
_0809D0A0:
|
||||
ldrb r0, [r1, #0xd]
|
||||
adds r0, #1
|
||||
strb r0, [r1, #0xd]
|
||||
str r2, [r1, #0x20]
|
||||
_0809D0A8:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0809D0AC
|
||||
sub_0809D0AC: @ 0x0809D0AC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #5
|
||||
bl sub_080044EC
|
||||
cmp r0, #1
|
||||
bhi _0809D0F0
|
||||
movs r2, #0
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xa]
|
||||
movs r1, #1
|
||||
strb r1, [r4, #0xc]
|
||||
str r2, [r4, #0x34]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x38
|
||||
strb r1, [r0]
|
||||
movs r0, #0x45
|
||||
bl SetLocalFlag
|
||||
movs r0, #0x72
|
||||
bl PlaySFX
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x11
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0809D0F0
|
||||
adds r0, r4, #0
|
||||
bl sub_0806FAD8
|
||||
_0809D0F0:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0809D0F4
|
||||
sub_0809D0F4: @ 0x0809D0F4
|
||||
push {lr}
|
||||
ldr r2, _0809D108 @ =gUnk_08123F04
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0809D108: .4byte gUnk_08123F04
|
||||
|
||||
thumb_func_start sub_0809D10C
|
||||
sub_0809D10C: @ 0x0809D10C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x17
|
||||
bl InitAnimationForceUpdate
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0809D130
|
||||
sub_0809D130: @ 0x0809D130
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldr r0, _0809D148 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0809D14C
|
||||
adds r0, r2, #0
|
||||
bl sub_0800445C
|
||||
b _0809D170
|
||||
.align 2, 0
|
||||
_0809D148: .4byte gPlayerState
|
||||
_0809D14C:
|
||||
adds r0, r2, #0
|
||||
bl sub_08017850
|
||||
cmp r0, #0
|
||||
beq _0809D170
|
||||
movs r0, #0x17
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateItemEntity
|
||||
ldr r0, _0809D174 @ =gUnk_02002A40
|
||||
ldr r1, [r0, #0x40]
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #0x15
|
||||
orrs r1, r2
|
||||
str r1, [r0, #0x40]
|
||||
bl DeleteThisEntity
|
||||
_0809D170:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0809D174: .4byte gUnk_02002A40
|
||||
|
||||
thumb_func_start sub_0809D178
|
||||
sub_0809D178: @ 0x0809D178
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0809D19C
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x5a
|
||||
movs r0, #0x80
|
||||
strb r0, [r1]
|
||||
_0809D19C:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0809D1E8
|
||||
bl Random
|
||||
movs r1, #3
|
||||
ands r1, r0
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
bl Random
|
||||
movs r1, #0xf
|
||||
ands r0, r1
|
||||
adds r0, #0x10
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x59
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
bl Random
|
||||
movs r1, #1
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
beq _0809D1EE
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
b _0809D1EE
|
||||
_0809D1E8:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_0809D1EE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0809D1F0
|
||||
sub_0809D1F0: @ 0x0809D1F0
|
||||
push {r4, r5, r6, r7, lr}
|
||||
|
|
|
@ -45,6 +45,7 @@ extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
|
|||
extern u32 LoadFixedGFX(Entity*, u32);
|
||||
extern void ExecuteScriptCommandSet(Entity*, void *);
|
||||
extern void _DmaFill32(u32, void*, u32);
|
||||
extern Entity* CreateItemEntity(u32, u32, u32);
|
||||
|
||||
// Unidentified
|
||||
extern u32 sub_0806ED78(Entity*);
|
||||
|
@ -259,4 +260,6 @@ extern void sub_0802F45C(Entity*);
|
|||
extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
|
||||
extern void sub_08004542(Entity*);
|
||||
extern void sub_08077B20();
|
||||
extern u32 sub_080040A8(Entity*);
|
||||
extern u32 sub_08017850(Entity*);
|
||||
#endif
|
||||
|
|
|
@ -824,6 +824,7 @@ SECTIONS {
|
|||
src/object/bakerOven.o(.text);
|
||||
asm/object93.o(.text);
|
||||
src/object/windTribeFlag.o(.text);
|
||||
src/object/bird.o(.text);
|
||||
asm/bird.o(.text);
|
||||
asm/object96.o(.text);
|
||||
asm/object97.o(.text);
|
||||
|
|
|
@ -0,0 +1,144 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "flags.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern void (*const gUnk_08123EC0[])(Entity*);
|
||||
extern void (*const gUnk_08123EEC[])(Entity*);
|
||||
extern void (*const gUnk_08123EF4[])(Entity*);
|
||||
extern void (*const gUnk_08123EFC[])(Entity*);
|
||||
extern void (*const gUnk_08123F04[])(Entity*);
|
||||
|
||||
void Bird(Entity* this) {
|
||||
gUnk_08123EC0[this->entityType.form](this);
|
||||
}
|
||||
|
||||
void sub_0809CF3C(Entity* this) {
|
||||
gUnk_08123EEC[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0809CF54(Entity* this) {
|
||||
Entity* target;
|
||||
|
||||
this->action++;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
this->actionDelay = 0x31;
|
||||
this->field_0xf = 1;
|
||||
this->field_0x20 = -0x18000;
|
||||
this->height.WORD = -0x38C000;
|
||||
this->field_0x68.HWORD = -0x800;
|
||||
this->nonPlanarMovement = 0x280;
|
||||
this->direction = 8;
|
||||
this->collisionLayer = 2;
|
||||
this->x.HALF.HI = gRoomControls.roomScrollX;
|
||||
PlaySFX(0x123);
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
InitAnimationForceUpdate(this, 0);
|
||||
target = CreateObject(0x95, 1, 0);
|
||||
if (target != NULL) {
|
||||
target->parent = this;
|
||||
PositionRelative(this, target, 0, 0x80000);
|
||||
ResolveEntityOnTop(this, target);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0809CFEC(Entity* this) {
|
||||
|
||||
sub_0806F69C(this);
|
||||
sub_08003FC4(this, *(s16*)&this->field_0x68.HWORD);
|
||||
if (this->actionDelay != 0) {
|
||||
if (--this->actionDelay == 0) {
|
||||
this->field_0xf = 0;
|
||||
}
|
||||
} else if (sub_080040A8(this) == 0) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
|
||||
void sub_0809D030(Entity* this) {
|
||||
gUnk_08123EF4[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0809D048(Entity* this) {
|
||||
this->action++;
|
||||
this->collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
InitAnimationForceUpdate(this, 0x17);
|
||||
}
|
||||
|
||||
void sub_0809D06C(Entity* this) {
|
||||
gUnk_08123EFC[this->previousActionFlag](this);
|
||||
}
|
||||
|
||||
void sub_0809D084(Entity* this) {
|
||||
u32 temp;
|
||||
|
||||
if (this->parent != NULL) {
|
||||
temp = this->parent->field_0xf;
|
||||
if (temp != 0) {
|
||||
PositionRelative(this->parent, this, 0, 0x80000);
|
||||
} else {
|
||||
this->previousActionFlag++;
|
||||
this->field_0x20 = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0809D0AC(Entity* this) {
|
||||
Entity* fx;
|
||||
|
||||
if (sub_080044EC(this, 0x1800) < 2) {
|
||||
(this->entityType).form = 2;
|
||||
this->action = 1;
|
||||
this->height.WORD = 0;
|
||||
this->collisionLayer = 1;
|
||||
SetLocalFlag(0x45);
|
||||
PlaySFX(0x72);
|
||||
fx = CreateFx(this, 0x11, 0);
|
||||
if (fx != NULL) {
|
||||
sub_0806FAD8(this, fx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0809D0F4(Entity* this) {
|
||||
gUnk_08123F04[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0809D10C(Entity* this) {
|
||||
this->action++;
|
||||
this->collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
InitAnimationForceUpdate(this, 0x17);
|
||||
}
|
||||
|
||||
void sub_0809D130(Entity* this) {
|
||||
if ((gPlayerState.flags.all & 0x80) != 0) {
|
||||
sub_0800445C(this);
|
||||
} else if (sub_08017850(this) != 0) {
|
||||
CreateItemEntity(0x17, 0, 0);
|
||||
gUnk_02002A40.windcrests |= 0x10000000;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0809D178(Entity* this) {
|
||||
|
||||
if (this->action == 0) {
|
||||
this->action++;
|
||||
this->collisionLayer = 2;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
this->frames.all = 0x80;
|
||||
}
|
||||
if ((this->frames.all & 0x80) != 0) {
|
||||
InitializeAnimation(this, Random() & 3);
|
||||
this->frameDuration = (Random() & 0xf) + 0x10;
|
||||
this->spriteSettings.b.flipX = FALSE;
|
||||
if ((Random() & 1) != 0) {
|
||||
this->spriteSettings.b.flipX = TRUE;
|
||||
}
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
}
|
|
@ -5,9 +5,7 @@
|
|||
|
||||
extern void DeleteThisEntity();
|
||||
extern void sub_08080CB4(Entity*);
|
||||
extern int sub_08017850(Entity*);
|
||||
extern void CreateItemEntity(u32, u32, u32);
|
||||
|
||||
extern u32 sub_08017850(Entity*);
|
||||
static void sub_0808E6A0(Entity*);
|
||||
static void sub_0808E6E4(Entity*);
|
||||
static void sub_0808E714(Entity*);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
extern void CreateItemEntity(u32, u32, u32);
|
||||
extern Entity* CreateItemEntity(u32, u32, u32);
|
||||
extern void DeleteThisEntity();
|
||||
extern void sub_08080CB4(Entity*);
|
||||
|
||||
|
|
Loading…
Reference in New Issue