This commit is contained in:
theo3 2020-06-16 15:04:52 -07:00
parent 8740036073
commit 0dbd3a87c6
5 changed files with 140 additions and 248 deletions

View File

@ -6,252 +6,6 @@
.text
thumb_func_start Keese
Keese: @ 0x08021D64
push {r4, r5, lr}
adds r5, r0, #0
ldr r4, _08021D7C @ =gUnk_080CB69C
bl GetNextFunction
lsls r0, r0, #2
adds r0, r0, r4
ldr r1, [r0]
adds r0, r5, #0
bl _call_via_r1
pop {r4, r5, pc}
.align 2, 0
_08021D7C: .4byte gUnk_080CB69C
thumb_func_start sub_08021D80
sub_08021D80: @ 0x08021D80
push {lr}
ldr r2, _08021D94 @ =gUnk_080CB6B4
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08021D94: .4byte gUnk_080CB6B4
thumb_func_start sub_08021D98
sub_08021D98: @ 0x08021D98
push {lr}
ldr r1, _08021DA4 @ =gUnk_080CB69C
bl sub_0804AA30
pop {pc}
.align 2, 0
_08021DA4: .4byte gUnk_080CB69C
thumb_func_start sub_08021DA8
sub_08021DA8: @ 0x08021DA8
push {r4, lr}
adds r4, r0, #0
bl sub_0806F520
cmp r0, #0
beq _08021DC4
ldr r0, _08021DC8 @ =gUnk_080CB6C4
ldrb r1, [r4, #0xd]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
_08021DC4:
pop {r4, pc}
.align 2, 0
_08021DC8: .4byte gUnk_080CB6C4
thumb_func_start sub_08021DCC
sub_08021DCC: @ 0x08021DCC
movs r1, #2
strb r1, [r0, #0xd]
bx lr
.align 2, 0
thumb_func_start sub_08021DD4
sub_08021DD4: @ 0x08021DD4
push {lr}
bl sub_0806F4E8
pop {pc}
thumb_func_start sub_08021DDC
sub_08021DDC: @ 0x08021DDC
push {r4, lr}
adds r4, r0, #0
bl sub_0806F3E4
cmp r0, #0
beq _08021DEE
adds r0, r4, #0
bl sub_0804A7D4
_08021DEE:
pop {r4, pc}
thumb_func_start sub_08021DF0
sub_08021DF0: @ 0x08021DF0
push {r4, lr}
adds r4, r0, #0
bl sub_0804A720
ldrb r0, [r4, #0xa]
cmp r0, #0
beq _08021E14
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #0x39
rsbs r0, r0, #0
ands r0, r1
movs r1, #8
orrs r0, r1
strb r0, [r2]
ldr r0, _08021E48 @ =0x0000FFF0
strh r0, [r4, #0x36]
_08021E14:
bl Random
movs r1, #0x1f
ands r0, r1
strb r0, [r4, #0x15]
movs r0, #1
strb r0, [r4, #0x1c]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
subs r0, #9
ands r0, r1
movs r1, #3
orrs r0, r1
strb r0, [r2]
adds r1, r4, #0
adds r1, #0x38
movs r0, #3
strb r0, [r1]
adds r0, r4, #0
bl UpdateSpriteOrderAndFlip
adds r0, r4, #0
bl sub_08021EF0
pop {r4, pc}
.align 2, 0
_08021E48: .4byte 0x0000FFF0
thumb_func_start sub_08021E4C
sub_08021E4C: @ 0x08021E4C
push {r4, r5, lr}
adds r4, r0, #0
adds r1, r4, #0
adds r1, #0x78
ldrh r0, [r1]
cmp r0, #0
beq _08021E5E
subs r0, #1
strh r0, [r1]
_08021E5E:
adds r1, r4, #0
adds r1, #0x7a
ldrh r0, [r1]
cmp r0, #0
beq _08021E6C
subs r0, #1
strh r0, [r1]
_08021E6C:
adds r0, r4, #0
bl sub_08004274
adds r2, r4, #0
adds r2, #0x5a
ldrb r1, [r2]
movs r0, #0x80
ands r0, r1
adds r5, r2, #0
cmp r0, #0
beq _08021E8A
adds r0, r4, #0
bl sub_08021F24
b _08021E90
_08021E8A:
adds r0, r4, #0
bl sub_080AEFB4
_08021E90:
ldr r1, _08021EA0 @ =gUnk_080CB6D0
ldrb r0, [r5]
adds r0, r0, r1
ldrb r1, [r0]
adds r0, r4, #0
adds r0, #0x63
strb r1, [r0]
pop {r4, r5, pc}
.align 2, 0
_08021EA0: .4byte gUnk_080CB6D0
thumb_func_start sub_08021EA4
sub_08021EA4: @ 0x08021EA4
push {lr}
adds r1, r0, #0
ldrb r0, [r1, #0xe]
subs r0, #1
strb r0, [r1, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _08021EBA
adds r0, r1, #0
bl sub_08021EF0
_08021EBA:
pop {pc}
thumb_func_start sub_08021EBC
sub_08021EBC: @ 0x08021EBC
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xe]
cmp r0, #0
beq _08021ECC
subs r0, #1
strb r0, [r4, #0xe]
b _08021EE8
_08021ECC:
ldr r0, _08021EEC @ =gLinkEntity
movs r2, #0x2e
ldrsh r1, [r0, r2]
movs r3, #0x32
ldrsh r2, [r0, r3]
adds r0, r4, #0
movs r3, #0x70
bl sub_0806FCB8
cmp r0, #0
beq _08021EE8
adds r0, r4, #0
bl sub_08021EF0
_08021EE8:
pop {r4, pc}
.align 2, 0
_08021EEC: .4byte gLinkEntity
thumb_func_start sub_08021EF0
sub_08021EF0: @ 0x08021EF0
push {r4, lr}
adds r4, r0, #0
movs r0, #1
strb r0, [r4, #0xc]
bl Random
ldr r2, _08021F20 @ =gUnk_080CB6D6
movs r1, #0xf
ands r1, r0
lsls r1, r1, #1
adds r1, r1, r2
ldrh r1, [r1]
adds r0, r4, #0
adds r0, #0x78
strh r1, [r0]
adds r1, r4, #0
adds r1, #0x7a
movs r0, #0x3c
strh r0, [r1]
adds r0, r4, #0
movs r1, #0
bl InitializeAnimation
pop {r4, pc}
.align 2, 0
_08021F20: .4byte gUnk_080CB6D6
thumb_func_start sub_08021F24
sub_08021F24: @ 0x08021F24
push {r4, lr}

View File

@ -4,6 +4,8 @@
#include "global.h"
#include "entity.h"
extern u32 GetNextFunction(Entity*);
extern void Octorok(Entity*);
extern void Chuchu(Entity*);
extern void Leever(Entity*);

View File

@ -80,7 +80,8 @@ typedef struct Entity {
u8 spriteAnimation[3];
struct {
u8 b0 : 3;
u8 b1 : 5;
u8 b1 : 3;
u8 b2 : 2;
} PACKED ticks;
u16 collisions;
union SplitWord x;
@ -135,7 +136,7 @@ typedef struct Entity {
u8 field_0x6d;
u8 filler4[6];
u32* heldObjectPtr;
u8 filler3[2];
u16 field_0x78;
u16 itemCooldown;
u32 field_0x7c;
u16 field_0x80;

View File

@ -327,6 +327,7 @@ SECTIONS {
asm/darkNut.o(.text);
asm/hangingSeed.o(.text);
asm/beetle.o(.text);
src/keese.o(.text);
asm/keese.o(.text);
asm/doorMimic.o(.text);
asm/rockChuchu.o(.text);

134
src/keese.c Normal file
View File

@ -0,0 +1,134 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
#include "link.h"
extern void sub_0804AA30(Entity*, void *);
extern u32 sub_0806F520(void);
extern void sub_0806F4E8(Entity*);
extern u32 sub_0806F3E4(void);
extern void sub_0804A7D4(Entity*);
extern void sub_0804A720(Entity*);
extern u32 Random();
extern void UpdateSpriteOrderAndFlip(Entity*);
extern void sub_08021EF0(Entity*);
extern void sub_08004274(Entity*);
extern void sub_080AEFB4(Entity*);
extern void sub_08021F24(Entity*);
extern u32 sub_0806FCB8(Entity*, s32, s32, u32);
extern void InitializeAnimation(Entity*, u32);
extern void (*gUnk_080CB69C[])(Entity*);
extern void (*gUnk_080CB6B4[])(Entity*);
extern void (*gUnk_080CB6C4[])(Entity*);
extern u8 gUnk_080CB6D0[];
extern u16 gUnk_080CB6D6[];
extern u8 gUnk_080CB6D0[];
void Keese(Entity *this)
{
gUnk_080CB69C[GetNextFunction(this)](this);
}
void sub_08021D80(Entity *this)
{
gUnk_080CB6B4[this->action](this);
}
void sub_08021d98(Entity *this)
{
sub_0804AA30(this, &gUnk_080CB69C);
}
void sub_08021DA8(Entity *this)
{
if (sub_0806F520()) {
gUnk_080CB6C4[this->previousActionFlag](this);
}
}
void sub_08021DCC(Entity *this)
{
this->previousActionFlag = 2;
}
void sub_08021DD4(Entity *this)
{
sub_0806F4E8(this);
}
void sub_08021DDC(Entity *this)
{
if (sub_0806F3E4()) {
sub_0804A7D4(this);
}
}
void sub_08021DF0(Entity *this)
{
sub_0804A720(this);
if ((this->entityType).parameter1 != 0) {
this->ticks.b1 = 1;
this->height.HALF.HI = -0x10;
}
this->direction = Random() & 0x1f;
this->filler[0] = 1;
this->ticks.b0 = 3;
this->collisionLayer = 3;
UpdateSpriteOrderAndFlip(this);
sub_08021EF0(this);
}
void sub_08021E4C(Entity *this)
{
if (this->field_0x78 != 0) {
this->field_0x78--;
}
if (this->itemCooldown != 0) {
(this->itemCooldown)--;
}
sub_08004274(this);
if ((this->frames.b.f3) != 0) {
sub_08021F24(this);
}
else {
sub_080AEFB4(this);
}
this->spriteOffsetY = gUnk_080CB6D0[this->frames.all];
}
void sub_08021EA4(Entity *this)
{
if (--this->parameter3 == 0) {
sub_08021EF0(this);
}
}
void sub_08021EBC(Entity *this)
{
s32 iVar1;
if (this->parameter3 != 0) {
this->parameter3--;
}
else {
iVar1 = sub_0806FCB8(this, gLinkEntity.x.HALF.HI, gLinkEntity.y.HALF.HI, 0x70);
if (iVar1 != 0) {
sub_08021EF0(this);
}
}
}
void sub_08021EF0(Entity *this)
{
u32 uVar1;
this->action = 1;
this->field_0x78 = gUnk_080CB6D6[Random() & 0xf];
this->itemCooldown = 0x3c;
InitializeAnimation(this, 0);
}