add some entity functions

This commit is contained in:
Behemoth 2020-08-05 17:34:18 +02:00
parent e2bbe039de
commit b4513a1b4f
3 changed files with 133 additions and 154 deletions

View File

@ -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
@ -2934,4 +2782,4 @@ _0805FD1C:
bl DeleteThisEntity bl DeleteThisEntity
_0805FD20: _0805FD20:
pop {r4, r5, pc} pop {r4, r5, pc}
.align 2, 0 .align 2, 0

View File

@ -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);

130
src/entity.c Normal file
View File

@ -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;
}