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
|
||||
|
||||
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
|
||||
sub_0805E870: @ 0x0805E870
|
||||
sub sp, #4
|
||||
|
@ -2934,4 +2782,4 @@ _0805FD1C:
|
|||
bl DeleteThisEntity
|
||||
_0805FD20:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.align 2, 0
|
|
@ -530,7 +530,8 @@ SECTIONS {
|
|||
src/sub_0805E3A0.o(.text);
|
||||
asm/code_0805E3B0.o(.text);
|
||||
asm/getEmptyEntity.o(.text);
|
||||
asm/code_0805E744.o(.text);
|
||||
src/entity.o(.text);
|
||||
asm/code_0805E84C.o(.text);
|
||||
/* npcs */
|
||||
src/npc/gentari.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