mirror of https://github.com/zeldaret/tmc.git
175 lines
5.4 KiB
C
175 lines
5.4 KiB
C
// clang-format off
|
|
#ifndef ENTITY_H
|
|
#define ENTITY_H
|
|
|
|
#include "global.h"
|
|
#include "sprite.h"
|
|
|
|
typedef struct {
|
|
void* entity1;
|
|
void* entity2;
|
|
u8 filler[14];
|
|
} UnkStruct;
|
|
|
|
typedef struct {
|
|
u8 type;
|
|
u8 subtype;
|
|
u8 form;
|
|
u8 parameter;
|
|
} EntityType;
|
|
|
|
typedef struct {
|
|
u8 unknown[6];
|
|
u8 field_0x6;
|
|
u8 field_0x7;
|
|
u8 unknown2[4];
|
|
} BoundingBox;
|
|
|
|
typedef struct Entity {
|
|
/*0x00*/ struct Entity* field_0x0;
|
|
/*0x04*/ struct Entity* field_0x4;
|
|
/*0x08*/ EntityType entityType;
|
|
/*0x0c*/ u8 action;
|
|
/*0x0d*/ u8 previousActionFlag;
|
|
/*0x0e*/ u8 actionDelay;
|
|
/*0x0f*/ u8 field_0xf;
|
|
/*0x10*/ u8 flags;
|
|
/*0x11*/ u8 scriptedScene : 4;
|
|
/* */ u8 scriptedScene2 : 4;
|
|
/*0x12*/ s16 spriteIndex;
|
|
/*0x14*/ u8 animationState;
|
|
/*0x15*/ u8 direction;
|
|
/*0x16*/ u8 field_0x16;
|
|
/*0x17*/ u8 field_0x17;
|
|
/*0x18*/ union {
|
|
/* */ u8 raw;
|
|
/* */ struct {
|
|
/* */ u8 draw : 2; // 1-2
|
|
/* */ u8 ss2 : 1; // 4
|
|
/* */ u8 ss3 : 1; // 8
|
|
/* */ u8 shadow : 2; //0x10-0x20
|
|
/* */ u8 flipX : 1; //0x40
|
|
/* */ u8 flipY : 1; //0x80
|
|
/* */ } PACKED b;
|
|
/* */ } PACKED spriteSettings;
|
|
/*0x19*/ struct {
|
|
/* */ u8 b0 : 2; // 1-2
|
|
/* */ u8 alphaBlend : 2; // 4-8
|
|
/* */ u8 b2 : 2; //0x10
|
|
/* */ u8 b3 : 2; //0x40
|
|
/* */ } PACKED spriteRendering;
|
|
/*0x1a*/ union {
|
|
/* */ u8 raw;
|
|
/* */ struct {
|
|
/* */ u8 b0 : 4;
|
|
/* */ u8 b4 : 4;
|
|
/* */ } PACKED b;
|
|
/* */} PACKED palette;
|
|
/*0x1b*/ struct {
|
|
/* */ u8 b0 : 4;
|
|
/* */ u8 flipX : 2; //0x10
|
|
/* */ u8 flipY : 2; //0x40
|
|
/* */ } PACKED spriteOrientation;
|
|
/*0x1c*/ u8 field_0x1c;
|
|
/*0x1d*/ u8 field_0x1d;
|
|
/*0x1e*/ u8 frameIndex;
|
|
/*0x1f*/ u8 lastFrameIndex;
|
|
/*0x20*/ s32 field_0x20;
|
|
/*0x24*/ s16 nonPlanarMovement;
|
|
/*0x26*/ u8 spriteAnimation[3];
|
|
/*0x29*/ struct {
|
|
/* */ u8 b0 : 3; // 1-4
|
|
/* */ u8 b1 : 3; // 8
|
|
/* */ u8 b2 : 2; //0x40
|
|
/* */ } PACKED spritePriority;
|
|
/*0x2a*/ u16 collisions;
|
|
/*0x2c*/ union SplitWord x;
|
|
/*0x30*/ union SplitWord y;
|
|
/*0x34*/ union SplitWord height; // todo
|
|
/*0x38*/ u8 collisionLayer;
|
|
/*0x39*/ s8 interactType;
|
|
/*0x3a*/ u8 field_0x3a;
|
|
/*0x3b*/ u8 flags2;
|
|
/*0x3c*/ u8 field_0x3c;
|
|
/*0x3d*/ u8 hurtBlinkTime;
|
|
/*0x3e*/ u8 field_0x3e;
|
|
/*0x3f*/ u8 damageType;
|
|
/*0x40*/ u8 field_0x40;
|
|
/*0x41*/ u8 bitfield;
|
|
/*0x42*/ u8 field_0x42;
|
|
/*0x43*/ u8 field_0x43;
|
|
/*0x44*/ u8 field_0x44;
|
|
/*0x45*/ u8 currentHealth;
|
|
/*0x46*/ s16 field_0x46;
|
|
/*0x48*/ BoundingBox* boundingBox;
|
|
/*0x4c*/ u8 field_0x4c;
|
|
/*0x4d*/ u8 field_0x4d;
|
|
/*0x4e*/ u8 field_0x4e;
|
|
/*0x4f*/ u8 field_0x4f;
|
|
/*0x50*/ struct Entity* parent;
|
|
/*0x54*/ struct Entity* attachedEntity;
|
|
/*0x58*/ u8 animIndex;
|
|
/*0x59*/ u8 frameDuration;
|
|
/*0x5a*/ union {
|
|
/* */ u8 all;
|
|
/* */ struct {
|
|
/* */ u8 f0 : 1;
|
|
/* */ u8 f1 : 5;
|
|
/* */ u8 f2 : 1; //0x40
|
|
/* */ u8 f3 : 1; //0x80
|
|
/* */ } PACKED b;
|
|
/* */ } PACKED frames;
|
|
/*0x5b*/ u8 frameSpriteSettings;
|
|
/*0x5c*/ Frame* animPtr;
|
|
/*0x60*/ u16 spriteVramOffset;
|
|
/*0x62*/ u8 spriteOffsetX;
|
|
/*0x63*/ u8 spriteOffsetY;
|
|
/*0x64*/ u32* otherEntity;
|
|
/*0x68*/ union SplitHWord field_0x68;
|
|
/*0x6a*/ union SplitHWord field_0x6a;
|
|
/*0x6c*/ union SplitHWord field_0x6c;
|
|
/*0x6e*/ u8 filler4[2];
|
|
/*0x70*/ union SplitWord field_0x70;
|
|
/*0x74*/ u16 field_0x74;
|
|
/*0x76*/ u16 field_0x76;
|
|
/*0x78*/ union SplitHWord field_0x78;
|
|
/*0x7a*/ u16 field_0x7a;
|
|
/*0x7c*/ union SplitWord field_0x7c;
|
|
/*0x80*/ union SplitHWord field_0x80;
|
|
/*0x82*/ union SplitHWord field_0x82;
|
|
/*0x84*/ union SplitHWord cutsceneBeh;
|
|
/*0x86*/ u16 field_0x86;
|
|
} Entity;
|
|
|
|
#define COORD_TO_TILE(entity) \
|
|
((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
|
(((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
|
|
|
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \
|
|
((((entity->x.HALF.HI - xOff - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
|
(((entity->y.HALF.HI - yOff - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
|
|
|
extern Entity* CreateEnemy(u32 subtype, u32 form);
|
|
extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter);
|
|
extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter);
|
|
extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter);
|
|
extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter);
|
|
|
|
extern void InitializeAnimation(Entity*, u32);
|
|
extern void InitAnimationForceUpdate(Entity*, u32);
|
|
extern void UpdateAnimationSingleFrame(Entity*);
|
|
extern void UpdateSpriteForCollisionLayer(Entity*);
|
|
extern void GetNextFrame(Entity*);
|
|
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
|
extern void SetExtraSpriteFrame(Entity*, u32, u32);
|
|
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
|
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
|
|
|
extern u32 GetFacingDirection(Entity*, Entity*);
|
|
|
|
extern void DeleteThisEntity();
|
|
|
|
extern Entity gUnk_03003DA0;
|
|
|
|
#endif
|