mirror of https://github.com/zeldaret/tmc.git
add some entity functions
This commit is contained in:
parent
e2bbe039de
commit
b4513a1b4f
|
@ -5,158 +5,6 @@
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start sub_0805E744
|
|
||||||
sub_0805E744: @ 0x0805E744
|
|
||||||
push {lr}
|
|
||||||
ldr r1, _0805E760 @ =gUnk_030011E8
|
|
||||||
movs r0, #0xee
|
|
||||||
lsls r0, r0, #2
|
|
||||||
adds r2, r1, r0
|
|
||||||
_0805E74E:
|
|
||||||
ldr r0, [r1]
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0805E764
|
|
||||||
adds r1, #0x88
|
|
||||||
cmp r1, r2
|
|
||||||
blo _0805E74E
|
|
||||||
movs r0, #0
|
|
||||||
b _0805E766
|
|
||||||
.align 2, 0
|
|
||||||
_0805E760: .4byte gUnk_030011E8
|
|
||||||
_0805E764:
|
|
||||||
adds r0, r1, #0
|
|
||||||
_0805E766:
|
|
||||||
pop {pc}
|
|
||||||
|
|
||||||
thumb_func_start sub_0805E768
|
|
||||||
sub_0805E768: @ 0x0805E768
|
|
||||||
push {lr}
|
|
||||||
ldr r1, _0805E778 @ =GetEmptyEntity
|
|
||||||
cmp r0, #9
|
|
||||||
bne _0805E772
|
|
||||||
ldr r1, _0805E77C @ =sub_0805E8D4
|
|
||||||
_0805E772:
|
|
||||||
bl _call_via_r1
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0805E778: .4byte GetEmptyEntity
|
|
||||||
_0805E77C: .4byte sub_0805E8D4
|
|
||||||
|
|
||||||
thumb_func_start DeleteThisEntity
|
|
||||||
DeleteThisEntity: @ 0x0805E780
|
|
||||||
push {lr}
|
|
||||||
ldr r0, _0805E794 @ =gUnk_03003DD0
|
|
||||||
ldr r0, [r0, #8]
|
|
||||||
bl sub_0805E79C
|
|
||||||
ldr r0, _0805E798 @ =gUnk_03005F24
|
|
||||||
bl _call_via_r0
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0805E794: .4byte gUnk_03003DD0
|
|
||||||
_0805E798: .4byte gUnk_03005F24
|
|
||||||
|
|
||||||
thumb_func_start sub_0805E79C
|
|
||||||
sub_0805E79C: @ 0x0805E79C
|
|
||||||
push {lr}
|
|
||||||
adds r1, r0, #0
|
|
||||||
ldrb r0, [r1, #8]
|
|
||||||
ldr r2, _0805E7B4 @ =DeleteEntity
|
|
||||||
cmp r0, #9
|
|
||||||
bne _0805E7AA
|
|
||||||
ldr r2, _0805E7B8 @ =sub_0805E900
|
|
||||||
_0805E7AA:
|
|
||||||
adds r0, r1, #0
|
|
||||||
bl _call_via_r2
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0805E7B4: .4byte DeleteEntity
|
|
||||||
_0805E7B8: .4byte sub_0805E900
|
|
||||||
|
|
||||||
thumb_func_start DeleteEntity
|
|
||||||
DeleteEntity: @ 0x0805E7BC
|
|
||||||
push {r4, r5, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
ldr r0, [r4, #4]
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0805E84A
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_080AE068
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0801D230
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0806FE84
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_080788E0
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_08078954
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0805EC60
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_08017744
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0805E92C
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0807DB08
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0806FBEC
|
|
||||||
ldr r0, [r4, #0x64]
|
|
||||||
bl sub_0801DA0C
|
|
||||||
movs r5, #0
|
|
||||||
str r5, [r4, #0x64]
|
|
||||||
ldrb r0, [r4, #8]
|
|
||||||
cmp r0, #3
|
|
||||||
bne _0805E818
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804AA1C
|
|
||||||
_0805E818:
|
|
||||||
ldrb r1, [r4, #0x10]
|
|
||||||
movs r0, #0x7f
|
|
||||||
ands r0, r1
|
|
||||||
strb r0, [r4, #0x10]
|
|
||||||
ldrb r1, [r4, #0x18]
|
|
||||||
movs r0, #4
|
|
||||||
rsbs r0, r0, #0
|
|
||||||
ands r0, r1
|
|
||||||
strb r0, [r4, #0x18]
|
|
||||||
adds r0, r4, #0
|
|
||||||
adds r0, #0x3c
|
|
||||||
strb r5, [r0]
|
|
||||||
adds r0, #5
|
|
||||||
strb r5, [r0]
|
|
||||||
adds r0, #1
|
|
||||||
strb r5, [r0]
|
|
||||||
adds r0, #3
|
|
||||||
strb r5, [r0]
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0805EA98
|
|
||||||
str r5, [r4, #4]
|
|
||||||
movs r0, #1
|
|
||||||
rsbs r0, r0, #0
|
|
||||||
str r0, [r4]
|
|
||||||
_0805E84A:
|
|
||||||
pop {r4, r5, pc}
|
|
||||||
|
|
||||||
thumb_func_start sub_0805E84C
|
|
||||||
sub_0805E84C: @ 0x0805E84C
|
|
||||||
push {r4, r5, lr}
|
|
||||||
ldr r4, _0805E86C @ =gLinkEntity
|
|
||||||
movs r0, #0xaa
|
|
||||||
lsls r0, r0, #6
|
|
||||||
adds r5, r4, r0
|
|
||||||
_0805E856:
|
|
||||||
ldr r0, [r4]
|
|
||||||
cmp r0, #0
|
|
||||||
bge _0805E862
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0805E870
|
|
||||||
_0805E862:
|
|
||||||
adds r4, #0x88
|
|
||||||
cmp r4, r5
|
|
||||||
blo _0805E856
|
|
||||||
pop {r4, r5, pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0805E86C: .4byte gLinkEntity
|
|
||||||
|
|
||||||
thumb_func_start sub_0805E870
|
thumb_func_start sub_0805E870
|
||||||
sub_0805E870: @ 0x0805E870
|
sub_0805E870: @ 0x0805E870
|
||||||
sub sp, #4
|
sub sp, #4
|
||||||
|
|
|
@ -530,7 +530,8 @@ SECTIONS {
|
||||||
src/sub_0805E3A0.o(.text);
|
src/sub_0805E3A0.o(.text);
|
||||||
asm/code_0805E3B0.o(.text);
|
asm/code_0805E3B0.o(.text);
|
||||||
asm/getEmptyEntity.o(.text);
|
asm/getEmptyEntity.o(.text);
|
||||||
asm/code_0805E744.o(.text);
|
src/entity.o(.text);
|
||||||
|
asm/code_0805E84C.o(.text);
|
||||||
/* npcs */
|
/* npcs */
|
||||||
src/npc/gentari.o(.text);
|
src/npc/gentari.o(.text);
|
||||||
src/npc/festari.o(.text);
|
src/npc/festari.o(.text);
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
#include "global.h"
|
||||||
|
#include "entity.h"
|
||||||
|
|
||||||
|
extern Entity gUnk_030011E8[7];
|
||||||
|
|
||||||
|
Entity* sub_0805E744(void)
|
||||||
|
|
||||||
|
{
|
||||||
|
Entity* pEVar1 = gUnk_030011E8;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (pEVar1->field_0x0 == NULL) {
|
||||||
|
return pEVar1;
|
||||||
|
}
|
||||||
|
pEVar1 = pEVar1 + 1;
|
||||||
|
} while (pEVar1 < &gUnk_030011E8[7]);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern Entity* GetEmptyEntity();
|
||||||
|
extern Entity* sub_0805E8D4();
|
||||||
|
|
||||||
|
Entity* sub_0805E768(int type)
|
||||||
|
|
||||||
|
{
|
||||||
|
Entity* (*getter)(void) = NULL;
|
||||||
|
if (type == 9) {
|
||||||
|
getter = sub_0805E8D4;
|
||||||
|
} else {
|
||||||
|
getter = GetEmptyEntity;
|
||||||
|
}
|
||||||
|
return getter();
|
||||||
|
}
|
||||||
|
typedef struct {
|
||||||
|
int field_0x0;
|
||||||
|
int field_0x4;
|
||||||
|
Entity* field_0x8;
|
||||||
|
int field_0xc;
|
||||||
|
} struct_03003DD0;
|
||||||
|
|
||||||
|
extern struct_03003DD0 gUnk_03003DD0;
|
||||||
|
extern u32 _call_via_r0(u32*);
|
||||||
|
extern void gUnk_03005F24();
|
||||||
|
extern void sub_0805E79C(Entity*);
|
||||||
|
|
||||||
|
void DeleteThisEntity(void)
|
||||||
|
|
||||||
|
{
|
||||||
|
sub_0805E79C(gUnk_03003DD0.field_0x8);
|
||||||
|
_call_via_r0((u32*)&gUnk_03005F24);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void DeleteEntity(Entity*);
|
||||||
|
extern void sub_0805E900(Entity*);
|
||||||
|
|
||||||
|
void sub_0805E79C(Entity* ent)
|
||||||
|
|
||||||
|
{
|
||||||
|
void (*deleter)(Entity*) = NULL;
|
||||||
|
if (ent->entityType.type == 9) {
|
||||||
|
deleter = sub_0805E900;
|
||||||
|
} else {
|
||||||
|
deleter = DeleteEntity;
|
||||||
|
}
|
||||||
|
deleter(ent);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void sub_080AE068();
|
||||||
|
extern void sub_0801D230();
|
||||||
|
extern void sub_0806FE84();
|
||||||
|
extern void sub_080788E0();
|
||||||
|
extern void sub_08078954();
|
||||||
|
extern void sub_0805EC60();
|
||||||
|
extern void sub_08017744();
|
||||||
|
extern void sub_0805E92C();
|
||||||
|
extern void sub_0807DB08();
|
||||||
|
extern void sub_0806FBEC();
|
||||||
|
extern void sub_0801DA0C();
|
||||||
|
extern void sub_0804AA1C();
|
||||||
|
extern void sub_0805EA98(); // Unlink
|
||||||
|
|
||||||
|
void DeleteEntity(Entity* ent)
|
||||||
|
|
||||||
|
{
|
||||||
|
if (ent->field_0x4) {
|
||||||
|
sub_080AE068(ent);
|
||||||
|
sub_0801D230(ent);
|
||||||
|
sub_0806FE84(ent);
|
||||||
|
sub_080788E0(ent);
|
||||||
|
sub_08078954(ent);
|
||||||
|
sub_0805EC60(ent);
|
||||||
|
sub_08017744(ent);
|
||||||
|
sub_0805E92C(ent);
|
||||||
|
sub_0807DB08(ent);
|
||||||
|
sub_0806FBEC(ent);
|
||||||
|
sub_0801DA0C(ent->otherEntity);
|
||||||
|
ent->otherEntity = NULL;
|
||||||
|
if ((ent->entityType).type == '\x03') {
|
||||||
|
sub_0804AA1C(ent);
|
||||||
|
}
|
||||||
|
ent->flags = ent->flags & 0x7f;
|
||||||
|
ent->spriteSettings = ent->spriteSettings;
|
||||||
|
ent->spriteSettings.b.draw = 0;
|
||||||
|
ent->field_0x3c = 0;
|
||||||
|
ent->bitfield = 0;
|
||||||
|
ent->field_0x42 = 0;
|
||||||
|
ent->currentHealth = 0;
|
||||||
|
sub_0805EA98(ent);
|
||||||
|
ent->field_0x4 = NULL;
|
||||||
|
ent->field_0x0 = (u32*)0xffffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern Entity gLinkEntity;
|
||||||
|
void sub_0805E870(Entity*);
|
||||||
|
|
||||||
|
void sub_0805E84C(void)
|
||||||
|
|
||||||
|
{
|
||||||
|
Entity* pEVar1 = &gLinkEntity;
|
||||||
|
do {
|
||||||
|
if ((int)pEVar1->field_0x0 < 0) {
|
||||||
|
sub_0805E870(pEVar1);
|
||||||
|
}
|
||||||
|
pEVar1 = pEVar1 + 1;
|
||||||
|
} while (pEVar1 < (&gLinkEntity + 80));
|
||||||
|
return;
|
||||||
|
}
|
Loading…
Reference in New Issue