mirror of https://github.com/zeldaret/tmc.git
keese.c
This commit is contained in:
parent
8740036073
commit
0dbd3a87c6
246
asm/keese.s
246
asm/keese.s
|
@ -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}
|
||||
|
|
|
@ -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*);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue