
// TODO make this proper C++ classes eventually
// instead of all that gross C hackery

typedef struct
{
	u32* vtable;
	u32 stuff[15];
} Base;

typedef struct
{
	u32* vtable;
	s32 x, y;
} Vec2;

typedef struct
{
	u32* vtable;
	s32 x, y, z;
} Vec3;

typedef struct
{
	u32* vtable;
	s16 x, y, z;
	u16 padding;
} S16Vec3;

typedef struct
{
	// size: 0xB0
	u32* vtable;
	void* owner;		// 4
	
	u32 unk0[10];		// 8
	Vec2 unkv1;			// 30
	u32 unk1[10];		// 3C
	u32 unk2[10];		// 64
	u32 unk3[5];		// 8C
	u16 unk4;			// A0
	u16 collisionFlags;	// A2
	u16 unk5;			// A4
	u16 someFlags;		// A6
	u32 unk6[2];		// A8
	
} ActivePhysics;

typedef struct
{
	u32* vtable;
	
	u32 unk0[0x14];		// 4
	
	Vec3 unkv1;			// 54
	Vec2 unkv2;			// 64
	Vec2 unkv3;			// 70
	
	u32 unk1[0x17];		// 7C
	
} Collider;

typedef struct
{
	u32 texparam;
	u32 palbase;
} TexInfo;

typedef struct
{
	// EnemyActor class stuff
	u32* vtable;
	
	u32 unk0[4];		// 4
	
	Base base;			// 14
	
	u32 unk1[2];		// 54
	
	Vec3 position;		// 5C -- inited from createSprite_pos
	Vec3 unkv1;			// 6C -- inited from createSprite_pos
	Vec3 unkv2;			// 7C -- inited to 0,0,0
	Vec3 unkv3;			// 8C -- seems to be used as a velocity vector?
	S16Vec3 unkv4;		// 9C -- inited from createSprite_unk
	S16Vec3 unkv5;		// A8 -- inited from createSprite_unk
	
	u32 unk2[6];		// B4
	
	Vec3 velocity;		// CC -- velocity
	Vec3 unkv7;			// DC
	Vec3 unkv8;			// EC -- inited from createSprite_arg0
	Vec3 unkv9;			// FC -- inited to 0,0,0
	Vec3 unkv10;		// 10C -- inited to 0x8000,0x8000,0x8000
	
	u8 unk3;			// 11C -- inited to 0
	u8 unk4;			// 11D -- inited to 1
	u8 unk5;			// 11E -- inited from createSprite_arg4
	u8 unk6;			// 11F -- inited to 0x80
	
	// 120 -- ActivePhysics
	ActivePhysics activephysics;
	
	// 1B0 -- Collider
	Collider collider;
	
	// 288 -- anotherCollider
	u32 unk7[0x2E];		// 288
	
	// @2BE -> view ID
	// @340 -> state
	
	u32 state;			// 340
	
	u32 unk8[0x24]; 	// 344
	
	// 394: vector copied there from ActivePhysics when a collision occurs
	
	// 3F4 - Sprite100 specific
	TexInfo mytex;
	u32 jumpheight;
	
} Sprite100;
