entity stuff

This commit is contained in:
theo 2020-05-19 01:16:01 -07:00
parent b6b0248051
commit c0ce9ad010
4 changed files with 63 additions and 8 deletions

View File

@ -2,15 +2,18 @@
#define ENTITY_H #define ENTITY_H
#include "global.h" #include "global.h"
typedef struct {
u8 type;
u8 subtype;
u8 parameter1;
u8 parameter2;
} EntityType;
typedef struct typedef struct
{ {
u32 *field_0x0; u32 *field_0x0;
u32 * field_0x4; u32 * field_0x4;
u8 type; EntityType entityType;
u8 subtype;
u8 parameter1;
u8 parameter2;
u8 action; u8 action;
u8 previousActionFlag; u8 previousActionFlag;
u8 parameter3; u8 parameter3;
@ -79,4 +82,5 @@ typedef struct
u8 filler[12]; u8 filler[12];
u32 * field_0x84; u32 * field_0x84;
} Entity; } Entity;
#endif #endif

View File

@ -3,7 +3,7 @@
#include "global.h" #include "global.h"
typedef struct { typedef struct {
u8 entityType; u8 entityType;
u8 unk; u8 field_0x1;
u8 entitySubtype; u8 entitySubtype;
u8 entityParameter1; u8 entityParameter1;
u32 entityParameter2; u32 entityParameter2;

View File

@ -10,9 +10,9 @@ Entity * CreateEnemy(u32 subtype, u32 param1)
enemy = sub_0805E678(); enemy = sub_0805E678();
if (enemy != NULL) { if (enemy != NULL) {
enemy->type = 3; (enemy->entityType).type = 3;
enemy->subtype = subtype; (enemy->entityType).subtype = subtype;
enemy->parameter1 = param1; (enemy->entityType).parameter1 = param1;
sub_0805EA2C(enemy,4); sub_0805EA2C(enemy,4);
} }
return enemy; return enemy;

51
src/createEntity.c Normal file
View File

@ -0,0 +1,51 @@
#include "entity.h"
#include "entityData.h"
#include "global.h"
extern Entity * sub_0805EB9C(u32, u32);
extern Entity * sub_0805E768();
extern void sub_0804AEB0(Entity *, EntityData *);
extern u32 sub_0804AF0C(Entity *, EntityData *);
extern void sub_08016A30(Entity *);
extern u32 gUnk_03000BF0;
Entity * CreateEntity(EntityData *param_1)
{
Entity *preexisting;
Entity *entity;
s32 type;
type = param_1->entityType & 15;
if (((param_1->field_0x1 & 240) == 80) &&
(preexisting = sub_0805EB9C(type,param_1->entitySubtype), preexisting != NULL)) {
entity = NULL;
}
else {
entity = sub_0805E768(); //Get empty entity
if (entity != NULL) {
(entity->entityType).type = type;
(entity->entityType).subtype = param_1->entitySubtype;
(entity->entityType).parameter1 = param_1->entityParameter1;
sub_0804AEB0(entity,param_1);
if ((param_1->field_0x1 & 240) != 16) {
(entity->entityType).parameter2 = *(u8 *)&param_1->entityParameter2;
/* i suspect this is where the entity's behavior is defined. Not sure. */
entity->parameter3 = (u8)((u32)param_1->entityParameter2 >> 8);
if ((type != 9) && (sub_0804AF0C(entity,param_1), entity->field_0x4 != NULL)) {
if ((param_1->entityType & 16) == 0) {
if ((param_1->entityType & 32) != 0) {
entity->collisionLayer = 2;
return entity;
}
if ((gUnk_03000BF0 & 2) == 0) {
sub_08016A30(entity);
return entity;
}
}
entity->collisionLayer = 1;
}
}
}
}
return entity;
}