sotn-decomp/include/entity.h
Josh Schreuder ff4e1baf0f
Some checks are pending
Format code / format (push) Waiting to run
Build C code / extract-assets (push) Waiting to run
Build C code / build-linux (x86_64, Debug, clang, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, clang, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, gcc, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, gcc, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, clang, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, clang, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, gcc, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, gcc, lle) (push) Blocked by required conditions
Build C code / build-macos (Debug, custom) (push) Blocked by required conditions
Build C code / build-macos (Debug, lle) (push) Blocked by required conditions
Build C code / build-macos (RelWithDebInfo, custom) (push) Blocked by required conditions
Build C code / build-macos (RelWithDebInfo, lle) (push) Blocked by required conditions
Build C code / build-windows (Debug, custom) (push) Blocked by required conditions
Build C code / build-windows (Debug, lle) (push) Blocked by required conditions
Build C code / build-windows (RelWithDebInfo, custom) (push) Blocked by required conditions
Build C code / build-windows (RelWithDebInfo, lle) (push) Blocked by required conditions
Build Saturn version / build-and-test-saturn (push) Waiting to run
Build Saturn version / function-finder-saturn (push) Waiting to run
Build Debug Module tool / build (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, hd) (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, pspeu) (push) Waiting to run
Build PSX and PSP version / build-and-test (us, us) (push) Waiting to run
Build PSX and PSP version / generate-progress-report (pspeu, hd) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (pspeu, pspeu) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report-psp (pspeu, pspeu) (push) Blocked by required conditions
Decompile no0 EntityDiplocephalusFoot (#1928)
PSX: https://decomp.me/scratch/4UL86
PSP: https://decomp.me/scratch/FAeQw
2024-11-21 20:09:56 +00:00

2421 lines
53 KiB
C

// SPDX-License-Identifier: AGPL-3.0-or-later
#ifndef ENTITY_H
#define ENTITY_H
#include "common.h"
struct Entity;
typedef void (*PfnEntityUpdate)(struct Entity*);
// Placeholders for M2C to use. No code should be merged which uses them.
typedef union {
u8 u8[0x3C];
s8 s8[0x3C];
u16 u16[0x1E];
s16 s16[0x1E];
u32 u32[0xF];
s32 s32[0xF];
} ET_Placeholder;
typedef struct {
/* 0x7C */ u16 timer;
/* 0x7E */ s16 unk7E;
/* 0x80 */ u8 aliveTimer;
/* 0x81 */ s8 unk81;
/* 0x82 */ s16 unk82;
/* 0x84 */ s32 fallSpeed;
/* 0x88 */ s16 gravity;
/* 0x8A */ s16 unk8A;
/* 0x8C */ s16 iconSlot;
/* 0x8E */ s16 unk8E;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
/* 0x94 */ s32 castleFlag;
} ET_EquipItemDrop;
typedef struct {
/* 0x7C */ u32 unk[14];
/* 0xB4 */ u16 unkB4;
/* 0xB6 */ s16 unkB6;
} ET_HeartDrop;
typedef struct {
/* 0x7C */ u16 timer;
/* 0x7E */ u16 size;
/* 0x80 */ u32 speed;
} ET_BloodDroplets;
typedef struct {
/* 0x7C */ u16 nPrims;
/* 0x7E */ u16 nDigits;
/* 0x80 */ u8 digits[4];
/* 0x84 */ u16 timer;
/* 0x86 */ s16 unk86;
/* 0x88 */ u16 unk88;
/* 0x8A */ s16 unk8A;
} ET_NumericDamage;
typedef struct {
u16 unk7C;
u16 unk7E;
u16 sparkleCycle;
u16 sparkleAnim;
u32 unk84;
u32 unk88;
s16 iconSlot;
u16 unk8E;
u16 floatTimer;
u16 unk92;
s32 yFloatSpeed;
} ET_RelicOrb;
typedef struct {
/* 0x7C */ u32 unused7C;
/* 0x80 */ s16 unused80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 angle;
/* 0x86 */ s16 unk86;
/* 0x88 */ u8 sideToPlayer;
/* 0x89 */ u8 showedMessage;
} ET_Door; // Normal red doors between stages, but also magically sealed blue
// ones
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 unk80;
/* 0x84 */ struct Primitive* unk84;
/* 0x88 */ struct Primitive* unk88;
/* 0x8C */ struct Primitive* unk8C;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
} ET_StagePopup;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s16 unk80;
/* 0x84 */ struct Primitive* unk84;
/* 0x88 */ struct Primitive* unk88;
/* 0x8C */ u8 unk8C;
} ET_StagePopupJP;
typedef struct {
/* 0x7C */ char* label;
/* 0x80 */ u16 width;
/* 0x82 */ u16 height;
/* 0x84 */ s16 unk84;
/* 0x86 */ u16 duration;
} ET_MessageBox;
typedef struct PACKED {
/* 0x7C */ s16 lifetime;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80; // Y?
/* 0x82 */ s16 unk82; // X?
/* 0x84 */ struct Entity* some_ent;
/* 0x88 */ s16 childPalette;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 unk9A;
/* 0x9C */ s32 accelerationX;
/* 0xA0 */ s32 accelerationY;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ s16 vol;
/* 0xA8 */ s32 unkA8;
/* 0xAC */ u8 anim;
/* 0xAD */ u8 unkAD;
/* 0xAE */ s16 equipId;
} ET_Weapon;
typedef struct {
s16 unk7C;
s16 lifetime; // not at 0x7C like other weapons
s16 velocityZ;
s16 unk82;
s32 accelerationX;
s32 accelerationY;
byte pad[32];
#ifdef PLATFORM_64BIT
s32 _align_anim[2];
#endif
u8 anim;
} ET_WeaponUnk006;
typedef struct PACKED {
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s32 unk88;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 unk90;
/* 0x94 */ struct Entity* other;
/* 0x98 */ s32 unk98;
/* 0x9C */ s32 unk9C;
/* 0xA0 */ s32 unkA0;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ s16 unkA6;
/* 0xA8 */ s32 unkA8;
/* 0xAC */ u8 anim;
/* 0xAD */ u8 unkAD;
} ET_WeaponUnk030;
typedef struct PACKED {
s32 unk7C;
s32 unk80;
s32 unk84;
s32 : 32;
s32 : 32;
s32 unk90;
s32 unk94;
s32 unk98;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
#ifdef PLATFORM_64BIT
s32 _align_anim[2];
#endif
u8 anim;
} ET_WeaponUnk046;
typedef struct {
s32 unk7C;
s32 : 32;
s32 unk84;
s32 unk88;
byte pad[32];
#ifdef PLATFORM_64BIT
s32 _align_anim[2];
#endif
u8 anim;
} ET_WeaponUnk047;
typedef struct {
s16 timer;
s16 unk7E;
s32 unk80;
s16 unk84;
s16 unk86;
s16 unk88;
s16 unk8A;
s32 unk8C;
s16 unk90;
s16 unk92;
s16 unk94;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
#ifdef PLATFORM_64BIT
s32 _align_anim[2];
#endif
u8 anim;
} ET_KarmaCoin;
typedef struct {
s16 unk7C;
s16 unk7E;
s16 : 16;
s16 unk82;
s16 unk84;
s16 unk86;
byte pad[16];
s32 vol;
s32 unk9C;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
#ifdef PLATFORM_64BIT
s32 _align_anim[2];
#endif
u8 anim;
} ET_WeaponUnk012;
typedef struct {
s16 unk7C;
s16 : 16;
byte pad[28];
s16 unk9C;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
#ifdef PLATFORM_64BIT
s32 _align_anim[2];
#endif
u8 anim;
} ET_WeaponUnk014;
typedef struct {
s16 unk7C;
s16 unk7E;
s32 unk80;
s16 unk84;
s16 unk86;
s16 unk88;
s16 unk8A;
struct Entity* parent;
s32 unk90;
s32 unk94;
s32 unk98;
s32 accelerationX;
s32 accelerationY;
s32 unkA4;
s32 unkA8;
#ifdef PLATFORM_64BIT
s32 : 32;
#endif
u8 anim;
} ET_WeaponUnk016;
typedef struct PACKED {
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s16 unk88;
s16 unk8A;
struct Entity* parent;
s16 unk90;
s16 unk92;
s16 unk94;
s16 unk96;
s16 unk98;
s16 unk9A;
s16 unk9C;
s16 unk9E;
s16 unkA0;
s16 unkA2;
s32 unkA4;
s32 unkA8;
#ifdef PLATFORM_64BIT
s32 _align_anim;
#endif
u8 anim;
u8 unkAD;
} ET_Sword;
typedef struct PACKED {
s16 angle;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s16 xPos;
s16 unk8A;
struct Entity* parent;
s32 unk90;
s32 unk94;
s32 unk98;
s32 accelerationX;
s32 accelerationY;
s32 unkA4;
s32 unkA8;
#ifdef PLATFORM_64BIT
s32 _align_anim;
#endif
u8 anim;
u8 unkAD;
} ET_HeavenSword;
typedef struct PACKED {
s16 angle;
s16 unk7E;
s16 unk80;
s16 unk82;
s32 unk84;
s16 xPos;
s16 unk8A;
struct Entity* parent;
s32 unk90;
s32 unk94;
s32 unk98;
s32 accelerationX;
s32 accelerationY;
s32 unkA4;
s32 unkA8;
#ifdef PLATFORM_64BIT
s32 _align_anim;
#endif
u8 anim;
u8 unkAD;
} ET_HeavenSword2;
typedef struct PACKED {
/* 0x7C */ u8 unk7C;
/* 0x7D */ u8 unk7D;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 childPalette;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 unk9A;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s16 unkA0;
/* 0xA4 */ byte pad[10];
#ifdef PLATFORM_64BIT
s32 _align_anim;
#endif
/* 0xAC */ u8 anim;
/* 0xAD */ u8 padAD;
/* 0xAE */ s16 unkAE;
} ET_Shield;
typedef struct PACKED {
/* 0x7C */ u8 unk7C;
/* 0x7D */ u8 unk7D;
/* 0x7E */ s16 unk7E;
/* 0x80 */ u16 unk80;
/* 0x82 */ s16 pal;
/* 0x84 */ s16* palettePtr;
/* 0x88 */ u16 childPalette;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 unk9A;
/* 0x9C */ s16 unk9C;
/* 0x9E */ byte pad[14];
/* 0xAC */ u8 anim;
/* 0xAD */ u8 padAD;
/* 0xAE */ s16 unkAE;
} ET_DarkShield;
typedef struct {
/* 0x7D */ u8 unk7C;
/* 0x7D */ u8 unk7D;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 childPalette;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ struct Entity* target;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s32 unk98;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s16 unkA0;
/* 0xA2 */ s16 unkA2;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ u16 : 16;
/* 0xA8 */ u32 : 32;
/* 0xAC */ u8 anim;
/* 0xAD */ u8 unkAD;
/* 0xAE */ s16 unkAE;
} ET_MedusaShieldLaser;
typedef struct PACKED {
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 childPalette;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 unk9A;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ u32 : 32;
/* 0xA4 */ u32 : 32;
/* 0xA8 */ u32 : 32;
#ifdef PLATFORM_64BIT
s32 _align_anim;
#endif
/* 0xAC */ u8 anim;
} ET_ShamanShieldStar;
typedef struct PACKED {
/* 0x7C */ u8 unk7C;
/* 0x7D */ u8 unk7D;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 childPalette;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 unk92;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 unk9A;
/* 0x9C */ u8 unk9C;
/* 0x9D */ u8 pad[15];
#ifdef PLATFORM_64BIT
s32 _align_anim;
#endif
/* 0xAC */ u8 anim;
/* 0xAE */ s16 unkAE;
} ET_HeraldShieldSwirlEffect;
typedef struct {
s16 timer;
s16 unk7E;
s32 unk80;
s16 pad[21];
s16 foodId;
} ET_Food;
typedef struct {
/* 0x7C */ char pad_7C[0x4];
/* 0x80 */ s16 timer;
/* 0x82 */ char pad_82[0x2];
/* 0x84 */ u8 attackMode;
/* 0x85 */ u8 flag; // Slogra's moveMode / Gaibon's palette
/* 0x86 */ u8 nearDeath; // Slogra loses spear, Gaibon in rage mode
/* 0x88 */ s32 speed;
/* 0x8C */ s16 angle;
/* 0x8E */ char pad_8E[0xE];
/* 0x9C */ u8 pickupFlag;
/* 0x9D */ u8 grabedAscending;
} ET_GaibonSlogra;
typedef struct {
/* 0x7C */ u16 angle;
/* 0x7E */ u16 unk7E;
/* 0x80 */ u16 unk80;
/* 0x82 */ s16 unk82;
} ET_SoulStealOrb;
typedef struct {
/* 0x7C */ Primitive* primBg;
/* 0x80 */ s32 unused80;
/* 0x84 */ Primitive* primFade;
/* 0x88 */ s32 unk88;
} ET_WarpRoom;
typedef struct {
/* 0x7C */ char pad_0[0x8];
/* 0x84 */ u8 timer;
/* 0x85 */ char pad_85[0x1];
/* 0x86 */ s8 timer2;
/* 0x87 */ char pad_87[0x5];
/* 0x8C */ u16 palette;
/* 0x8E */ char pad_8E[0x12];
/* 0xA0 */ u8 isUnderwater;
/* 0xA1 */ u8 ignoreCol;
} ET_Merman;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ char pad_0[0x6];
/* 0x86 */ s8 timer;
/* 0x87 */ char pad_87[0x5];
/* 0x8C */ s16 rotation;
/* 0x8E */ char pad_8E[0x12];
/* 0xA0 */ u8 isUnderwater;
/* 0xA1 */ u8 ignoreCol;
} ET_Merman_2;
typedef struct {
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 previouslyInitialized;
/* 0x82 */ s16 batIndex;
/* 0x84 */ s16 randomMovementAngle;
/* 0x84 */ s16 targetAngle;
/* 0x88 */ s16 randomMovementScaler;
/* 0x8A */ s16 maxAngle;
/* 0x8C */ s16 frameCounter;
/* 0x8e */ s16 doUpdateCloseAnimation;
/* 0x90 */ s32 unk90;
/* 0x94 */ s32 unk94;
/* 0x98 */ s32 unk98;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s32 unkA0;
/* 0xA4 */ struct Entity* attackTarget;
/* 0xA8 */ s16 hasShotFireball;
/* 0xAA */ s16 unkAA;
/* 0xAC */ s16 cameraX;
/* 0xAE */ s16 cameraY;
/* 0xB0 */ s16 lastPlayerPosX;
/* 0xB2 */ s16 lastPlayerPosY;
/* 0xB4 */ struct Entity* follow;
} ET_Bat;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
} ET_BatFamBlueTrail;
typedef struct {
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
struct Primitive* unk84;
s16 unk88;
s16 unk8A;
} ET_BatEcho;
typedef struct {
/* 0x7C */ s16 pad7C;
/* 0x7E */ s16 unk7E;
// This counter is used for the Y "bob" the ghost does
/* 0x80 */ s16 bobCounterY;
/* 0x82 */ s16 targetAngle;
/* 0x84 */ s16 maxAngle;
/* 0x86 */ s16 frameCounter;
/* 0x88 */ s16 opacity;
/* 0x8A */ s16 opacityAdjustmentAmount;
/* 0x8C */ s16 confusedSubStep;
/* 0x8E */ s32 pad8E;
/* 0x92 */ struct Entity* attackEntity;
/* 0x96 */ struct Entity* confusedEntity;
/* 0x9A */ byte pad_1C[0x6];
/* 0xA2 */ struct Entity* attackTarget;
} ET_Ghost;
// There appears to be a 2nd Ext used in the Faerie code
typedef struct {
/* 0x7C */ struct Entity* parent;
} ET_FaerieWings;
typedef struct {
/* 0x7C */ s16 lifeAppleTimer;
/* 0x7E */ s16 drawMode;
/* 0x80 */ s16 primX;
/* 0x82 */ s16 primY;
/* 0x84 */ s16 opacity;
/* 0x86 */ s16 effectOpacity;
} ET_FaerieLifeApple;
typedef struct {
/* 0x7C */ s16 : 16;
/* 0x7E */ s16 drawMode;
/* 0x80 */ s16 unkAccumulator;
/* 0x82 */ s16 unkFlag;
} ET_FaerieItem;
typedef struct {
/* 0x0 */ s16 flag;
/* 0x2 */ s16 animIndex;
/* 0x4 */ s16 sfxId;
} FaerieSfxEventDesc;
typedef struct {
/* 0x7C */ s16 : 16;
/* 0x7E */ s16 isAbilityInitialized;
/* 0x80 */ s16 animationFlag;
/* 0x82 */ s16 : 16;
/* 0x84 */ s16 randomMovementAngle;
/* 0x86 */ s16 targetAngle;
/* 0x88 */ s16 defaultDistToTargetLoc;
/* 0x8A */ s16 maxAngle;
/* 0x8C */ s16 frameCounter;
/* 0x8E */ s16 unk8E;
/* 0x90 */ s16 requireUncurseLuckCheck;
/* 0x92 */ s16 requireAntivenomLuckCheck;
/* 0x94 */ s16 requirePotionLuckCheck;
/* 0x96 */ s16 timer;
/* 0x98 */ s32 tileMapX;
/* 0x9C */ s32 tileMapY;
/* 0xA0 */ s16 idleFrameCounter;
/* 0xA2 */ s16 : 16;
/* 0xA4 */ FaerieSfxEventDesc* currentSfxEvent;
/* 0xA8 */ s16 sfxEventFlag;
/* 0xAA */ s16 padAA[5];
/* 0xB4 */ s16 unkB4;
} ET_Faerie;
typedef struct {
/* 0x7C */ s16 : 16;
/* 0x7E */ s16 isAbilityInitialized;
/* 0x80 */ s16 : 16;
/* 0x82 */ s16 : 16;
/* 0x84 */ s16 randomMovementAngle;
/* 0x86 */ s16 targetAngle;
/* 0x88 */ s16 defaultDistToTargetLoc;
/* 0x8A */ s16 maxAngle;
} ET_Demon;
struct draculaPrimitive;
typedef struct ET_Dracula {
/* 0x7C */ char pad_7C[4];
/* 0x80 */ struct draculaPrimitive* unk80;
/* 0x84 */ struct draculaPrimitive* unk84;
/* 0x88 */ char pad_88[4];
/* 0x8C */ s16 unk8C;
/* 0x8E */ char pad_8E[0x2];
/* 0x90 */ u8 unk90;
/* 0x91 */ char pad91;
/* 0x92 */ u8 unk92;
/* 0x93 */ char pad93;
/* 0x94 */ u8 unk94;
/* 0x95 */ char pad_95[0x3];
/* 0x98 */ s16 unk98;
/* 0x9A */ char pad_9A[0x2];
/* 0x9C */ s16 unk9C;
/* 0x9E */ char pad_9E[0x2];
/* 0xA0 */ u8 unkA0;
/* 0xA1 */ u8 unkA1;
/* 0xA2 */ u8 unkA2;
/* 0xA3 */ char pad_A3[0x9];
/* 0xAC */ struct Primitive* prim;
} ET_Dracula;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 unk80;
/* 0x84 */ s32 unk84;
/* 0x88 */ s16 unk88;
/* 0x8A */ char pad_8A[0x2];
/* 0x8C */ s16 unk8C;
/* 0x8E */ s16 unk8E;
} ET_StageTitleCard;
typedef struct ET_Succubus {
/* 0x7C */ char pad_7C[0x4];
/* 0x80 */ s16 timer;
/* 0x82 */ char pad_82[0x2];
/* 0x84 */ u8 facingLeft;
/* 0x85 */ u8 unk85;
/* 0x86 */ u8 nextAttack;
/* 0x87 */ u8 unk87;
/* 0x88 */ u16 nextStep;
/* 0x8A */ char pad_8A[0x4];
/* 0x8E */ s16 yOffset;
/* 0x90 */ char pad_90[0xC];
/* 0x9C */ struct Entity* real;
/* 0xA0 */ s16 clonePosX;
/* 0xA2 */ s16 unkA2;
} ET_Succubus;
typedef struct {
/* 0x7C */ u16 timer;
/* 0x7E */ char pad_7E[2];
/* 0x80 */ s32 unk80;
} ET_RoomTransition2;
typedef struct {
/* 0x7C */ char pad_7C[0x4];
/* 0x80 */ u8* anim;
/* 0x84 */ char pad_84[0x8];
/* 0x8C */ s32 accelY;
} ET_80192998;
typedef struct {
/* 0x7C */ u8 pad0[0x4];
/* 0x80 */ u8* anim;
/* 0x84 */ s16 unk84;
/* 0x86 */ u8 pad86[2];
/* 0x88 */ u8 unk88;
/* 0x89 */ u8 unk89;
} ET_ExplosionPuffOpaque;
typedef struct {
/* 0x7C */ u16 unk7C;
} ET_801BCC4C;
typedef struct ET_CastleDoor {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s16 timer;
/* 0x82 */ char pad_82[0x2];
/* 0x84 */ s16 rotZ;
} ET_CastleDoor;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s16 unk80; // angle?
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 timer;
} ET_ShuttingWindow;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ char pad_80[0x4];
/* 0x84 */ u16 unk84;
} ET_DeathSkySwirl;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 yPos;
/* 0x84 */ s32 elevatorTarget;
} ET_Elevator;
typedef struct {
/* 0x7C */ s32 pad[8];
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16* unk88;
} ET_801D0B40;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ char pad_80[0xC];
/* 0x8C */ u8 unk8C;
/* 0x8D */ u8 unk8D;
/* 0x8E */ char pad_8E[0xE];
/* 0x9C */ u16 unk9C;
} ET_801D1BB8;
typedef struct {
/* 0x7C */ char pad_0[0xC];
/* 0x88 */ u16 unk88;
} ET_801D0B78;
typedef struct {
/* 0x7C */ u32 accelY;
/* 0x80 */ s16 : 16;
/* 0x82 */ s16 unk82;
/* 0x84 */ f32 topY;
/* 0x88 */ u16 unk88;
/* 0x8A */ s16 unk8A;
} ET_WaterEffects;
typedef struct {
/* 0x7C */ char pad_0[4];
/* 0x80 */ s16 unk80;
/* 0x82 */ char pad_82[2];
/* 0x84 */ u8 unk84;
/* 0x85 */ char pad_85[3];
/* 0x88 */ u16 unk88;
/* 0x8A */ char pad_8A[2];
/* 0x8C */ u8 unk8C;
/* 0x8D */ u8 unk8D;
/* 0x8E */ u8 unk8E;
/* 0x8E */ char pad_8E[13];
/* 0x9C */ s16 rotZ;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ struct Entity* parent;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ s16 unkA6;
/* 0xA8 */ u8 unkA8;
/* 0xA9 */ char pad_A9[0x7];
/* 0xB0 */ u16 unkB0[2];
/* 0xB4 */ u16 unkB4[2];
} ET_GurkhaHammer;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s16 unk80;
} ET_TransparentWater;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 timer;
} ET_HeartRoomGoldDoor;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ char pad_80[0x4];
/* 0x84 */ u8 unk84;
/* 0x85 */ u8 unk85;
/* 0x86 */ s8 unk86;
} ET_MermanWaterSplash;
typedef struct {
/* 0x7C */ s32 playerVelocity;
} ET_CastleDoorTransition;
typedef struct {
/* 0x7C */ u8 unk7C;
s32 : 24;
/* 0x80 */ s32 unk80;
} ET_AlucardController;
typedef struct {
/* 0x7C */ u16 unk7C;
} ET_ForegroundTree;
typedef struct {
/* 0x7C */ u16 unk7C;
/* 0x7E */ u16 unk7E;
/* 0x80 */ s16 unk80;
} ET_FadeToWhite;
typedef struct {
/* 0x7C */ u16 unk7C;
} ET_DeathStolenItems;
typedef struct {
/* 0x7C */ u16 unk7C;
/* 0x7E */ char pad_7E[0x2];
/* 0x80 */ s16 posX;
/* 0x82 */ s16 posY;
/* 0x84 */ u16 moveTimer;
/* 0x86 */ u16 moveDirection;
} ET_Death;
typedef struct {
/* 0x7C */ u8 unk7C;
/* 0x7D */ char pad_7D[0x3];
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ struct Entity* unk84;
} ET_SpittleBone;
typedef struct PACKED {
Primitive* prim;
char pad[0x24];
s16 unkA4;
s16 unkA6;
void* unkA8;
u8 anim;
} ET_Player;
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
} ET_EntitySlot1;
typedef struct {
char pad[0x32];
s16 unkAE;
} ET_EntitySlot16;
typedef struct {
/* 0x7C */ u16 unk7C;
} ET_Entity12;
typedef struct {
u8 fiveFrameCounter;
struct Entity* parent;
char pad[8];
u16 parentId;
} ET_Entity13;
typedef struct {
s16 t;
} ET_TimerOnly;
// silly unsigned alternative needed in ST0 EntityCutscene
typedef struct {
u16 t;
} ET_UTimerOnly;
typedef struct {
/* 0x7C */ s8 unk7C;
/* 0x7D */ s8 unk7D;
/* 0x7E */ s16 : 16;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
struct Primitive* prim;
} ET_AxeKnight;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 unk88;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 childId;
/* 0x92 */ s16 unk92;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 unk9A;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s16 unkA0;
/* 0xA2 */ s16 unkA2;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ s16 unkA6;
/* 0xA8 */ s16 unkA8;
/* 0xAA */ s16 unkAA;
/* 0xAC */ s16 unkAC;
/* 0xAE */ s16 unkAE;
/* 0xB0 */ s16 unkB0;
/* 0xB2 */ s16 unkB2;
} ET_EntFactory;
typedef struct {
char pad[8];
s32 unk8;
} unk_sub_8011E4BC;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
byte pad[14];
/* 0x8C */ struct Entity* parent;
} ET_8011E4BC;
typedef struct {
s16 unk7C;
s16 unk7E;
s16 unk80;
} ET_HellfireHandler;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 stoneAngle;
s16 lifeTimer;
s16 unk80;
s16 unk82;
s16 unk84;
/* 0x86 */ s16 : 16;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_ReboundStone;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_ReboundStoneCrashExplosion;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_GiantSpinningCross;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
} ET_8017091C;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s32 unk84;
s32 unk88;
/* 0x8C */ struct Entity* parent;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s16 subweaponId;
} ET_Agunea;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s32 : 32;
s32 : 32;
/* 0x8C */ struct Entity* parent;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
s16 subweaponId;
} ET_AguneaCrash;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 timer;
s16 size;
s32 : 32;
s32 : 32;
s32 : 32;
/* 0x8C */ struct Entity* parent;
} ET_stopwatchCircle;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 t;
s16 unk7E;
s16 unk80;
s16 unk82;
f32 unk84;
s32 unk88;
/* 0x8C */ struct Entity* parent;
s16 unk90;
s16 unk92;
s16 crashIndex;
s16 unk96;
struct Entity* unk98;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
#ifndef PLATFORM_64BIT
s32 : 32;
#endif
s16 subweaponId;
} ET_RICStopWatch;
typedef struct {
s16 timer;
s16 index;
} ET_StopwatchCrash;
typedef struct {
s16 t;
s16 unk7E;
s16 unk80;
s16 unk82;
f32 unk84;
f32 unk88;
s16 unk8C;
s16 unk8E;
} ET_DRAStopWatch;
typedef struct {
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
struct Primitive* unk88;
s16 unk8C;
s16 unk8E;
s16 unk90;
s16 unk92;
s16 unk94;
} ET_stopwatchSparkle;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s32 unk88;
/* 0x8C */ struct Entity* parent;
s16 unk90;
s16 unk92;
s16 unk94;
s16 unk96;
struct Entity* unk98;
s32 : 32;
s32 : 32;
s32 : 32;
s32 : 32;
#ifndef PLATFORM_64BIT
s32 : 32;
#endif
s16 subweaponId;
} ET_BibleSubwpn;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
} ET_80162870;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s32 unk88;
struct Entity* parent;
} ET_8016E9E4;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s16 unk88;
s16 unk8A;
struct Entity* parent;
} ET_RichterPowerUpRing;
typedef struct {
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s16 unk88;
s16 unk8A;
} ET_TransparentWhiteCircle;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s32 : 32;
s32 : 32;
struct Entity* parent;
} ET_HitByIce;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 pad7E;
s16 unk80;
s16 unk82;
s32 : 32;
s32 : 32;
struct Entity* parent;
s16 unk90;
s16 unk92;
s16 unk94;
s16 : 16;
s32 unk98;
s16 unk9C;
} ET_HitByLightning;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s32 unk7C;
s32 unk80;
s32 unk84;
s32 unk88;
struct Entity* parent;
s32 unk90;
} ET_Teleport;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
/* 0x7C */ s16 timer;
/* 0x7E */ s16 : 16;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
/* 0xB2 */ s16 unkB2;
} ET_Subweapon;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 timer;
s16 angle;
s16 unk80;
s16 unk82;
s16 hitboxState;
/* 0x86 */ s16 : 16;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
/* 0xB2 */ s16 unkB2;
} ET_HolyWater;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
u16 unk7C;
u16 unk7E;
u8 unk80;
byte pad81;
u8 unk82;
byte pad83;
s32 unk84;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_CrashCross;
typedef struct {
/* 0x7C */ s16 timer;
/* 0x7E */ s16 unk7E;
/* 0x80 */ u16 unk80;
/* 0x82 */ u16 pad82;
/* 0x84 */ Point16* unk84;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_CrossBoomerang;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[3];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s16 unk88;
s8 unk8A;
u8 unk8B[12];
s32 unk98;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_SubwpnAxe;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[3];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
s16 unk88;
s8 unk8A;
u8 unk8B[12];
s32 unk98;
s32 unk9C;
u16 unkA0;
s16 unkA2;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_AxeCrash;
typedef struct {
s16 timer;
u16 unk7E;
s16 unk80;
s16 pad82;
s32 unk84;
s32 unk88;
u16 unk8C;
} ET_VibhutiCrash;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 : 16;
s32 : 32;
s32 : 32;
s32 : 32;
struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
/* 0xB0 */ s16 subweaponId;
} ET_VibhutiCrashCloud;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s16 unk7C;
s16 unk7E;
s16 unk80;
s16 : 16;
s32 : 32;
/* 0x88 */ s32 : 32;
struct Entity* parent;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 : 32;
/* 0xA0 */ s32 : 32;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s32 : 32;
s16 subweaponId;
} ET_BibleBeam;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
u16 unk7C;
u16 unk7E;
u8 unk80;
u8 : 8;
u8 unk82;
u8 : 8;
s32 unk84;
s32 : 32;
struct Entity* parent;
} ET_RicRevivalColumn; // Note this is the same as CrashCross
typedef struct {
f32 unk7C;
f32 unk80;
s16 unk84;
s16 unk86;
s32 unk88;
s16 unk8C;
s16 unk8E;
s32 unk90;
s32 unk94;
s32 unk98;
s32 unk9C;
s32 unkA0;
s16 unkA4;
s16 unkA6;
s32 unkA8;
s32 unkAC;
s16 unkB0;
s32 unkB4;
} ET_Whip;
typedef struct {
/* 0x7C */ struct Primitive* prim1;
/* 0x80 */ struct Primitive* prim2;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 unk88;
/* 0x8C */ struct Entity* parent;
s16 unk90;
} ET_801291C4;
typedef struct {
PrimLineG2* lines[4];
s16 unk8C;
s16 unk8E;
s16 unk90;
} ET_8016D9C4;
typedef struct {
struct Primitive* prim1;
struct Primitive* prim2;
struct Primitive* prim3;
struct Primitive* prim4;
s16 unk8C;
s16 unk8E;
u8 unk90;
} ET_801AF774;
typedef struct {
s32 unk7C;
s16 timer;
s16 unk82;
s16 unk84;
} ET_DracFinal;
typedef struct {
/* 0x7C */ byte pad[4];
/* 0x80 */ s16 angle;
/* 0x82 */ byte pad2[2];
/* 0x84 */ u8 switch_control;
/* 0x85 */ u8 speed;
} ET_BigRedFireball;
typedef struct {
s16 timer;
s16 spawnTimer;
} ET_SummonSpirit;
typedef struct {
struct Primitive* prim;
s16 unk80;
s16 unk82;
s16 unk84;
} ET_3DBackgroundhouse;
typedef struct {
struct Primitive* prim1;
struct Primitive* prim2;
s16 unk84;
s16 unk86;
s16 unk88;
} ET_LifeUpSpawn;
typedef struct {
u16 unk7C;
u16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
u16 unk88;
u16 unk8A;
} ET_801B0AA4;
typedef struct {
byte pad[4];
// Needs further study; there is a use of LOW(unk80).
u16 unk80;
u16 unk82;
s16 unk84;
s16 unk86;
s16 unk88;
s16 unk8A;
u8 unk8C;
} ET_Owl;
typedef struct {
u16 unk7C;
s16 unk7E;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
u16 unk88;
s16 unk8A;
s16 unk8C;
s16 unk8E;
} ET_AlucardWaterEffect;
typedef struct {
u32 unk24[10];
u8 unk28;
u8 unk29;
} ET_80123B40;
typedef struct {
struct Entity* ent;
s16 unk80;
s16 unk82;
s16 unk84;
s16 unk86;
} ET_80129864;
typedef struct {
s16 timer;
s16 pad;
s16 xCurrent;
s16 yCurrent;
s16 xTarget;
s16 yTarget;
} ET_Mist;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
s32 unk7C;
s16 unk80;
s16 unk82;
s32 un84;
s16 unk88;
s16 unk8A;
struct Entity* parent;
s16 unk90;
s16 unk92;
s32 unk94;
s16 unk98;
s16 unk9A;
s16 unk9C;
} ET_PlayerBlink;
typedef struct {
struct Primitive* prim;
s16 unk80;
s16 pad82;
s32 pad84;
s32 pad88;
struct Primitive* prim2;
struct Primitive* prim3;
} ET_BloodSplatter;
typedef struct {
s32 pad7c;
s16 timer;
s16 pad82;
s32 pad84;
s32 pad88;
s32 pad8C;
s16 brightness;
} ET_PlayerOutline;
typedef struct {
u8 digits[4];
s16 number;
s16 type;
s16 unk84;
u16 unk86;
u16 unk88;
u16 unk8A;
s16 unk8C;
s16 unk8E;
s16 unk90;
s16 unk92;
s16 angleToMeter;
s16 distToMeter;
s16 unk98;
} ET_HPNumberMove;
typedef struct {
s16 timer;
s16 pad1;
s16 halfWidth;
s16 halfHeight;
s32 pad2;
s16 angle;
s16 pad3;
s32 pad4;
s32 str_x;
s32 str_y;
s32 unk98;
} ET_GuardText;
typedef struct {
s16 unk7C;
s16 unk7E;
s16 unk80;
} ET_Dissolve;
typedef struct {
u16 unk7C;
} ET_LockCamera;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 jiggler;
/* 0x84 */ s8 collision;
/* 0x88 */ f32 xCoord;
/* 0x8C */ f32 yCoord;
} ET_CavernDoor;
// Seems like g_Entities[1] through g_Entities[8], as used in SEL.
// Accessed directly by index, not updated like normal entities in-engine.
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ f32 unk80;
/* 0x84 */ s32 : 32;
/* 0x88 */ s16 unk88;
/* 0x8A */ s16 : 16;
/* 0x8C */ s32 unk8C;
} ET_UnkSelEnts;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 spawnDelay;
/* 0x82 */ s16 : 16;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 spawnSide;
} ET_ZombieSpawner;
typedef struct {
/* 0x7C */ u8 attackTimer;
/* 0x7D */ s32 : 24;
/* 0x80 */ u8 facingLeft;
/* 0x81 */ s32 : 24;
/* 0x84 */ u8 attackTimerIndex;
/* 0x85 */ s32 : 24;
/* 0x88 */ s8 explosionTimer;
/* 0x89 */ s32 : 24;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 initialX;
} ET_Skeleton;
// Common EXT member for all of NZ0/311C0.c file.
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 unk80;
/* 0x84 */ s32 unk84;
/* 0x88 */ u8 unk88;
} ET_NZ0_311C0;
typedef struct {
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
} ET_FireWargDeathBeams;
typedef struct {
/* 0x7C */ u8 unk7C;
/* 0x7D */ s32 : 24;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
} ET_FireWarg;
typedef struct {
/* 0x7C */ bool unk7C;
} ET_FireWargHelper;
typedef struct {
/* 0x7C */ s32 hand;
/* 0x80 */ s32 unk80;
/* 0x84 */ u16 bellTimer;
/* 0x86 */ u16 bellDuration;
/* 0x88 */ u16 unk88;
/* 0x8A */ u16 unk8A; // might belong to another struct
} ET_ClockRoom;
typedef struct {
/* 0x7C */ u16 timer;
/* 0x7E */ u16 prevState;
/* 0x80 */ u16 state;
} ET_Birdcage;
typedef struct {
/* 0x7C */ u16 timer;
/* 0x7E */ u16 step;
} ET_Statue;
typedef struct {
/* 0x7C */ s32 flag;
/* 0x80 */ u16 unk80;
} ET_StoneDoor;
typedef struct {
/* 0x7C */ u8 unk7C;
/* 0x7E */ u8 unk7E;
/* 0x80 */ u8 unk80;
} ET_DisableAfterImage;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 : 32;
/* 0x84 */ u8 unk84;
} ET_EntityExplosion2;
typedef struct {
/* 0x7C */ s16 timer;
/* 0x7E */ u16 unk7E;
} ET_EntityExplosion3;
typedef struct {
#ifdef PLATFORM_64BIT
s32 _align_parent[2];
#endif
/* 0x7C */ s32 : 32;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
} ET_GhostEvent;
typedef struct {
s32 : 32;
s16 timer;
s16 : 16;
u8 unk84;
} ET_BackgroundLightning;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s32 : 32;
/* 0x84 */ u8 unk84;
} ET_SecretStairs;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 : 16;
/* 0x84 */ u8 unk84;
/* 0x85 */ u8 unk85;
/* 0x88 */ s32 : 32;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ u8 index;
} ET_DestructAnimation;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s32 : 32;
/* 0x84 */ s16 velX;
/* 0x86 */ s16 palette;
} ET_SubwpnContainerGlass;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 : 16;
/* 0x84 */ u8 unk84;
} ET_BloodyZombie;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s32 : 32;
/* 0x84 */ s16 unk84;
} ET_MermanRock;
typedef struct {
/* 0x7C */ u8 unk7C;
/* 0x7D */ u8 unk7D;
/* 0x7E */ u8 unk7E;
/* 0x7F */ u8 unk7F;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ u16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ u16 unk88;
/* 0x8A */ u16 unk8A;
} ET_Warg;
typedef struct {
/* 0x7C */ u16 extStep;
/* 0x80 */ s32 : 32;
/* 0x84 */ u16 timer;
} ET_DeathScythe;
// A couple entities in MAD and ST0 which exist, but are not referenced
typedef struct {
/* 0x7C */ u8 animframe;
/* 0x7D */ s32 : 24;
/* 0x80 */ u8 velIndex;
} ET_Unused_MAD_ST0;
// Elevator at the top of CEN.
// Exists in both CEN and NO0 (lowers you into CEN)
typedef struct {
/* 0x7C */ struct Primitve* prim;
/* 0x80 */ u8 unk80;
} ET_CEN_Elevator;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 timer;
} ET_BloodSkeleton;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 angle;
} ET_UnusedCENEnt;
typedef struct {
// not a physical angular direction, but the swaying left and right
// moves in a sinusoidal manner so uses an angle internally.
/* 0x7C */ s16 swayAngle;
/* 0x7E */ s16 swaySpeed;
/* 0x80 */ s16 timer;
} ET_SmallRisingHeart;
typedef struct {
/* 0x00 */ s8 currentAngle;
/* 0x01 */ s8 targetAngle;
} ET_801CC9B4;
typedef struct {
u8 r, g, b;
} ET_EntranceUnk16;
typedef struct {
s16 width;
s16 height;
} ET_ExpandingCircle;
typedef struct {
s16 size;
s16 timer;
} ET_RicMariaPower;
typedef struct {
s16 timer;
s16 boolDidSound;
} ET_RicMaria;
// This is the Bat enemy, seen in the Entrance and elsewhere.
// ET_Bat is already taken by the familiar. Perhaps that should be
// ET_BatFam and this be ET_Bat? Seems familiars should all be labeled since
// there are fewer of those than there are enemies.
typedef struct {
s32 accelY;
} ET_BatEnemy;
typedef struct {
/* 0x7C */ struct Primitive* prim1;
/* 0x80 */ struct Primitive* unk80;
/* 0x84 */ s16 unk84[4];
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s32 unkA0;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ s16 unkA6;
} ET_801BC5C0;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s16 rotationTimer;
/* 0x82 */ s16 : 16;
/* 0x84 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x8C */ s16 cameraDistance;
} ET_CutscenePhotograph;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s16 unkA0;
/* 0xA2 */ s16 : 16;
/* 0xA4 */ s32 : 32;
/* 0xA8 */ s32 : 32;
/* 0xAC */ s16 : 16;
/* 0xAE */ s16 unkAE;
} ET_ClockTower;
typedef struct {
/* 0x7C */ struct Primitive* prim;
/* 0x80 */ u16 unk80;
/* 0x82 */ s16 : 16;
/* 0x84 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s16 unk9C;
/* 0x9E */ s16 unk9E;
/* 0xA0 */ s16 unkA0;
/* 0xA2 */ s16 : 16;
/* 0xA4 */ s16 unkA4;
/* 0xA6 */ s16 unkA6;
/* 0xA8 */ s16 unkA8;
/* 0xAA */ s16 unkAA;
/* 0xAC */ s16 : 16;
/* 0xAE */ s16 unkAE;
} ET_BackgroundVortex;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 attackTimer;
/* 0x82 */ s16 : 16;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 unk90;
} ET_OuijaTable;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 timer;
/* 0x82 */ s16 : 16;
/* 0x84 */ s32 spawned;
/* 0x88 */ struct Entity* parent;
/* 0x8C */ s16 : 16;
/* 0x8E */ s16 unk8E;
/* 0x90 */ s32 isThrown;
} ET_OuijaTableContents;
typedef struct {
/* 0x7C */ s16 unk7C;
} ET_FleaMan;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 timer;
/* 0x82 */ s16 : 16;
/* 0x84 */ u8 unk84;
/* 0x85 */ u8 unk85;
/* 0x86 */ s16 : 16;
/* 0x88 */ s32 : 32;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ s32 : 32;
/* 0x9C */ s32 y;
/* 0xA0 */ struct Primitive* shockwavePrim;
/* 0xA4 */ struct Primitive* unkA4;
} ET_Ctulhu;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 timer;
} ET_GhostEnemySpawner;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s16 angle;
/* 0x82 */ s16 : 16;
/* 0x84 */ u32 speed;
} ET_GhostEnemy;
typedef struct {
/* 0x7C */ struct Entity* next;
/* 0x80 */ s16 timer;
/* 0x82 */ s16 : 16;
/* 0x84 */ s16 offsets[26];
} ET_MedusaUnk1A;
typedef struct {
/* 0x7C */ s16 unk7C;
/* 0x7E */ s16 unk7E;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 unk88;
/* 0x8A */ s16 unk8A;
/* 0x8C */ struct Entity* unk8C;
/* 0x90 */ s16 unk90;
/* 0x92 */ s16 : 16;
/* 0x94 */ s16 unk94;
} ET_StoneRose;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ u8 angle;
/* 0x81 */ u8 : 8;
/* 0x82 */ u16 : 16;
/* 0x84 */ s16 unk84;
} ET_Skelerang;
typedef struct {
/* 0x7C */ s32 : 32;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ s32 : 32;
/* 0x90 */ s32 : 32;
/* 0x94 */ s32 : 32;
/* 0x98 */ u32 velocityY;
/* 0x9C */ s16 : 16;
/* 0x9E */ u8 unk9E;
/* 0x9F */ u8 unk9F;
} ET_Diplocephalus;
typedef struct {
/* 0x00 */ struct Entity* unk0;
/* 0x04 */ s16 unk4;
/* 0x06 */ s16 unk6;
/* 0x08 */ Point32 unk8;
/* 0x10 */ Point32* unk10;
} unk_PlatelordStruct; /* size = 0x14 */
typedef struct {
/* 0x7C */ s16 : 16;
/* 0x7E */ s16 : 16;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ u8 unk84;
/* 0x85 */ u8 unk85;
/* 0x86 */ u8 unk86;
/* 0x87 */ u8 unk87;
/* 0x88 */ unk_PlatelordStruct unk88;
/* 0x9C */ unk_PlatelordStruct unk9C;
/* 0xB0 */ s16 unkB0;
} ET_PlateLord;
typedef struct {
/* 0x7C */ s16 : 16;
/* 0x7E */ s16 : 16;
/* 0x80 */ s16 unk80;
/* 0x82 */ s16 unk82;
/* 0x84 */ s16 unk84;
/* 0x86 */ s16 unk86;
/* 0x88 */ s16 : 16;
/* 0x8A */ s16 : 16;
/* 0x8C */ s16 : 16;
/* 0x8E */ s16 : 16;
/* 0x90 */ s16 : 16;
/* 0x92 */ s16 : 16;
/* 0x94 */ s16 unk94;
/* 0x96 */ s16 unk96;
/* 0x98 */ s16 unk98;
/* 0x9A */ s16 : 16;
/* 0x9C */ s16 unk9C[10];
/* 0xB0 */ s16 unkB0;
} ET_UnkPlatelordPlus3;
typedef union { // offset=0x7C
struct Primitive* prim;
ET_Placeholder ILLEGAL;
ET_TimerOnly timer;
ET_UTimerOnly utimer;
ET_EntFactory factory;
ET_EntitySlot1 entSlot1; // g_Entities[1], not entityID 1
ET_EntitySlot16 entSlot16;
ET_Entity12 ent12; // entityID 12
ET_Entity13 ent13; // entityID 13
ET_8011E4BC et_8011E4BC;
ET_801CC9B4 et_801CC9B4;
ET_HellfireHandler hellfireHandler;
ET_8016D9C4 et_8016D9C4;
ET_ReboundStoneCrashExplosion reboundStoneCrashExplosion;
ET_CrossBoomerang crossBoomerang;
ET_Subweapon subweapon;
ET_HolyWater holywater;
ET_CrashCross crashcross;
ET_SubwpnAxe subwpnAxe;
ET_AxeCrash axeCrash;
ET_VibhutiCrash vibhutiCrash;
ET_VibhutiCrashCloud vibCrashCloud;
ET_RicRevivalColumn ricColumn;
ET_GiantSpinningCross giantcross;
ET_ReboundStone reboundStone;
ET_BibleBeam bibleBeam;
ET_BibleSubwpn et_BibleSubwpn;
ET_EquipItemDrop equipItemDrop;
ET_HeartDrop heartDrop;
ET_BloodDroplets bloodDroplets;
ET_BloodSplatter bloodSplatter;
ET_NumericDamage ndmg;
ET_RelicOrb relicOrb;
ET_Door door;
ET_StagePopup stpopup;
ET_StagePopupJP stpopupj;
ET_MessageBox messageBox;
ET_Weapon weapon;
ET_WeaponUnk006 weapon_006;
ET_WeaponUnk012 weapon_012;
ET_WeaponUnk014 weapon_014;
ET_WeaponUnk016 weapon_016;
ET_WeaponUnk030 weapon_030;
ET_WeaponUnk046 weapon_046;
ET_WeaponUnk047 weapon_047;
ET_Shield shield;
ET_DarkShield darkShield;
ET_KarmaCoin karmacoin;
ET_Sword sword;
ET_HeavenSword heavenSword;
ET_HeavenSword2 heavenSword2;
ET_MedusaShieldLaser medshieldlaser;
ET_ShamanShieldStar shamanshieldstar;
ET_HeraldShieldSwirlEffect heraldSwirl;
ET_Food food;
ET_HitByIce hitbyice;
ET_HitByLightning hitbylightning;
ET_PlayerBlink playerBlink;
ET_Mist mist;
ET_Bat bat;
ET_BatFamBlueTrail batFamBlueTrail;
ET_BatEcho batEcho;
ET_Ghost ghost;
ET_Faerie faerie;
ET_FaerieWings faerieWings;
ET_FaerieItem faerieItem;
ET_FaerieLifeApple faerieLifeApple;
ET_Demon demon;
ET_SoulStealOrb soulStealOrb;
ET_GaibonSlogra GS_Props;
ET_WarpRoom warpRoom;
ET_Teleport teleport;
ET_Merman merman;
ET_Merman_2 merman2;
ET_MermanWaterSplash mermanWaterSplash;
ET_Agunea agunea;
ET_801291C4 et_801291C4;
ET_8017091C et_8017091C;
ET_AguneaCrash aguneaCrash;
ET_RICStopWatch ricStopWatch;
ET_StopwatchCrash stopwatchCrash;
ET_DRAStopWatch stopwatch;
ET_stopwatchCircle et_stopwatchCircle;
ET_stopwatchSparkle et_stopWatchSparkle;
ET_80162870 et_80162870;
ET_Whip whip;
ET_RichterPowerUpRing ricPowerRing;
ET_TransparentWhiteCircle whiteCircle;
ET_8016E9E4 et_8016E9E4;
ET_Dracula dracula;
ET_DracFinal dracFinalForm;
ET_Succubus succubus;
ET_StageTitleCard stageTitleCard;
ET_RoomTransition2 roomTransition2;
ET_80192998 e_80192998;
ET_ExplosionPuffOpaque opaquePuff;
ET_FireWarg fireWarg;
ET_FireWargHelper fireWargHelper;
ET_801BCC4C et_801BCC4C;
ET_ShuttingWindow shuttingWindow;
ET_CastleDoor castleDoor;
ET_DeathSkySwirl deathSkySwirl;
ET_Elevator elevator;
ET_801D0B40 et_801D0B40;
ET_801D1BB8 et_801D1BB8;
ET_801D0B78 et_801D0B78;
ET_WaterEffects waterEffects;
ET_GurkhaHammer GH_Props;
ET_TransparentWater transparentWater;
ET_HeartRoomGoldDoor heartRoomGoldDoor;
ET_CastleDoorTransition castleDoorTransition;
ET_AlucardController alucardController;
ET_ForegroundTree foregroundTree;
ET_FadeToWhite fadeToWhite;
ET_DeathStolenItems deathStolenItems;
ET_Death death;
ET_SpittleBone spittleBone;
ET_Player player;
ET_801AF774 et_801AF774;
ET_BigRedFireball bigredfireball;
ET_SummonSpirit summonspirit;
ET_3DBackgroundhouse bghouse;
ET_LifeUpSpawn lifeUpSpawn;
ET_AxeKnight axeknight;
ET_801B0AA4 et_801B0AA4;
ET_Owl owl;
ET_AlucardWaterEffect aluwater;
ET_80123B40 et_80123B40;
ET_80129864 et_80129864;
ET_PlayerOutline playerOutline;
ET_HPNumberMove hpNumMove;
ET_GuardText guardText;
ET_Dissolve dissolve;
ET_LockCamera lockCamera;
ET_CavernDoor cavernDoor;
ET_UnkSelEnts unkSelEnts;
ET_ZombieSpawner zombieSpawner;
ET_Skeleton skeleton;
ET_NZ0_311C0 nz0311c0;
ET_FireWargDeathBeams fireWargDeathBeams;
ET_ClockRoom clockRoom;
ET_Birdcage birdcage;
ET_Statue statue;
ET_StoneDoor stoneDoor;
ET_DisableAfterImage disableAfterImage;
ET_EntityExplosion2 entityExplosion2;
ET_EntityExplosion3 entityExplosion3;
ET_GhostEvent ghostEvent;
ET_BackgroundLightning backgroundLightning;
ET_DestructAnimation destructAnim;
ET_SecretStairs secretStairs;
ET_SubwpnContainerGlass subwpnContGlass;
ET_BloodyZombie bloodyZombie;
ET_MermanRock mermanRock;
ET_Warg warg;
ET_DeathScythe deathScythe;
ET_Unused_MAD_ST0 unusedMadST0;
ET_CEN_Elevator cenElevator;
ET_BloodSkeleton bloodSkeleton;
ET_UnusedCENEnt unusedCENEnt;
ET_SmallRisingHeart smallRisingHeart;
ET_EntranceUnk16 entrance16;
ET_ExpandingCircle circleExpand;
ET_RicMariaPower ricMariaPower;
ET_RicMaria ricMaria;
ET_BatEnemy batEnemy;
ET_801BC5C0 et_801BC5C0;
ET_CutscenePhotograph cutscenePhoto;
ET_ClockTower clockTower;
ET_BackgroundVortex bgVortex;
ET_MedusaUnk1A medusaUnk1A;
ET_OuijaTable ouijaTable;
ET_OuijaTableContents ouijaTableContents;
ET_FleaMan fleaMan;
ET_Ctulhu ctulhu;
ET_StoneRose stoneRose;
ET_GhostEnemy ghostEnemy;
ET_GhostEnemySpawner ghostEnemySpawner;
ET_Skelerang skelerang;
ET_Diplocephalus diplocephalus;
ET_PlateLord plateLord;
ET_UnkPlatelordPlus3 unkPlatelordPlus3;
} Ext;
#define SYNC_FIELD(struct1, struct2, field) \
STATIC_ASSERT(OFF(struct1, field) == OFF(struct2, field), "unsynced")
SYNC_FIELD(ET_Player, ET_Weapon, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk006, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk012, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk016, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk014, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk030, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk046, anim);
SYNC_FIELD(ET_Player, ET_WeaponUnk047, anim);
SYNC_FIELD(ET_Player, ET_KarmaCoin, anim);
SYNC_FIELD(ET_Player, ET_Sword, anim);
SYNC_FIELD(ET_Player, ET_HeavenSword, anim);
SYNC_FIELD(ET_Player, ET_HeavenSword2, anim);
SYNC_FIELD(ET_Player, ET_Shield, anim);
SYNC_FIELD(ET_Player, ET_DarkShield, anim);
SYNC_FIELD(ET_Player, ET_MedusaShieldLaser, anim);
SYNC_FIELD(ET_Player, ET_ShamanShieldStar, anim);
SYNC_FIELD(ET_Player, ET_HeraldShieldSwirlEffect, anim);
SYNC_FIELD(ET_EntFactory, ET_Subweapon, parent);
SYNC_FIELD(ET_EntFactory, ET_CrossBoomerang, parent);
SYNC_FIELD(ET_EntFactory, ET_8011E4BC, parent);
SYNC_FIELD(ET_EntFactory, ET_HolyWater, parent);
SYNC_FIELD(ET_EntFactory, ET_GiantSpinningCross, parent);
SYNC_FIELD(ET_EntFactory, ET_CrashCross, parent);
SYNC_FIELD(ET_EntFactory, ET_RicRevivalColumn, parent);
SYNC_FIELD(ET_EntFactory, ET_80162870, parent);
SYNC_FIELD(ET_EntFactory, ET_PlayerBlink, parent);
SYNC_FIELD(ET_EntFactory, ET_RichterPowerUpRing, parent);
SYNC_FIELD(ET_EntFactory, ET_HitByIce, parent);
SYNC_FIELD(ET_EntFactory, ET_HitByLightning, parent);
SYNC_FIELD(ET_EntFactory, ET_ReboundStone, parent);
SYNC_FIELD(ET_EntFactory, ET_Agunea, parent);
SYNC_FIELD(ET_EntFactory, ET_801291C4, parent);
SYNC_FIELD(ET_EntFactory, ET_VibhutiCrashCloud, parent);
SYNC_FIELD(ET_EntFactory, ET_ReboundStoneCrashExplosion, parent);
SYNC_FIELD(ET_EntFactory, ET_8016E9E4, parent);
SYNC_FIELD(ET_EntFactory, ET_BibleBeam, parent);
SYNC_FIELD(ET_EntFactory, ET_BibleSubwpn, parent);
SYNC_FIELD(ET_EntFactory, ET_RICStopWatch, parent);
SYNC_FIELD(ET_EntFactory, ET_stopwatchCircle, parent);
SYNC_FIELD(ET_EntFactory, ET_AguneaCrash, parent);
SYNC_FIELD(ET_EntFactory, ET_8017091C, parent);
SYNC_FIELD(ET_EntFactory, ET_Teleport, parent);
SYNC_FIELD(ET_EntFactory, ET_GhostEvent, parent);
SYNC_FIELD(ET_Subweapon, ET_HolyWater, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_SubwpnAxe, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_AxeCrash, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_CrossBoomerang, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_BibleSubwpn, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_BibleBeam, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_RICStopWatch, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_ReboundStone, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_ReboundStoneCrashExplosion, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_VibhutiCrashCloud, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_Agunea, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_AguneaCrash, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_GiantSpinningCross, subweaponId);
SYNC_FIELD(ET_Subweapon, ET_CrashCross, subweaponId);
#endif // ENTITY_H