2023-02-23 05:32:14 +00:00
|
|
|
#ifndef __STRUCTS_H__
|
|
|
|
#define __STRUCTS_H__
|
|
|
|
|
|
|
|
/* your struct definitions go here */
|
|
|
|
|
|
|
|
typedef struct character_progress {
|
|
|
|
u8 moves; // at 0x00
|
|
|
|
u8 simian_slam; // at 0x01
|
|
|
|
u8 weapon; // at 0x02, bitfield, xxxxxshw
|
|
|
|
u8 ammo_belt; // at 0x03, see ScriptHawk's Game.getMaxStandardAmmo() for formula
|
|
|
|
u8 instrument; // at 0x04, bitfield, xxxx321i
|
|
|
|
u8 unk5;
|
|
|
|
u16 coins; // at 0x06
|
|
|
|
u16 instrument_ammo; // at 0x08, also used as lives in multiplayer
|
|
|
|
u16 coloured_bananas[14]; // TODO: Better datatype?
|
|
|
|
u16 coloured_bananas_fed_to_tns[14]; // TODO: Better datatype?
|
|
|
|
u16 golden_bananas[14]; // TODO: Better datatype?
|
|
|
|
} CharacterProgress;
|
|
|
|
|
|
|
|
typedef struct PlayerProgress {
|
|
|
|
union {
|
|
|
|
CharacterProgress character_progress[6]; // 0x5E * 6 (5 Kongs + Krusha)
|
|
|
|
u8 character_progress_as_bytes[6][0x5E]; // Note: Can't use sizeof(CharacterProgress) because mips_to_c can't do struct maths yet
|
|
|
|
u16 character_progress_as_shorts[6][0x2F]; // Note: Can't use sizeof(CharacterProgress) because mips_to_c can't do struct maths yet
|
|
|
|
};
|
|
|
|
u8 unk234[0x2F0 - 0x234];
|
|
|
|
u16 standardAmmo; // 0x2F0
|
|
|
|
u16 homingAmmo; // 0x2F2
|
|
|
|
u16 oranges; // 0x2F4
|
|
|
|
u16 crystals; // 0x2F6 // Note: Multiplied by 150 compared to on screen counter
|
|
|
|
u16 film; // 0x2F8
|
|
|
|
u8 unk2FA;
|
|
|
|
s8 health; // 0x2FB
|
|
|
|
u8 melons; // 0x2FC
|
|
|
|
s8 unk2FD; // Something to do with health... hmm
|
|
|
|
s8 unk2FE[0x306 - 0x2FE];
|
|
|
|
} PlayerProgress;
|
|
|
|
|
|
|
|
typedef struct enemy_info {
|
|
|
|
u8 enemy_type; // at 0x00
|
|
|
|
u8 unk1;
|
|
|
|
u16 y_rotation; // at 0x02
|
|
|
|
s16 x_position; // at 0x04
|
|
|
|
s16 y_position; // at 0x06
|
|
|
|
s16 z_position; // at 0x08
|
|
|
|
u8 cutscene_model_index; // at 0x0A
|
|
|
|
u8 unkB;
|
|
|
|
u32 unkC;
|
|
|
|
u32 unk10;
|
|
|
|
u32 unk14;
|
|
|
|
u32 unk18;
|
|
|
|
u32 unk1C;
|
|
|
|
u32 unk20;
|
|
|
|
u16 unk24;
|
|
|
|
u16 unk26;
|
|
|
|
u16 unk28; // Used
|
|
|
|
s16 unk2A; // Used
|
|
|
|
u32 unk2C;
|
|
|
|
u32 unk30;
|
|
|
|
u32 unk34;
|
|
|
|
f32 unk38; // Used
|
|
|
|
f32 unk3C; // at 0x3C
|
|
|
|
s16 unk40; // Used
|
|
|
|
s16 unk42;
|
|
|
|
u8 unk44; // Used
|
|
|
|
u8 unk45;
|
|
|
|
u16 unk46; // Used
|
|
|
|
} EnemyInfo;
|
|
|
|
|
|
|
|
typedef struct ledge_info_8c LedgeInfo8C;
|
|
|
|
|
|
|
|
struct ledge_info_8c {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
f32 unkC; // Used
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s32 unk20;
|
|
|
|
s32 unk24;
|
|
|
|
LedgeInfo8C *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct ledge_info_90 LedgeInfo90;
|
|
|
|
|
|
|
|
struct ledge_info_90 {
|
|
|
|
f32 unk0;
|
|
|
|
f32 unk4;
|
|
|
|
f32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
LedgeInfo90 *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s32 unk20;
|
|
|
|
s32 unk24;
|
|
|
|
s32 unk28;
|
|
|
|
s32 unk2C;
|
|
|
|
s32 unk30;
|
|
|
|
s32 unk34;
|
|
|
|
s32 unk38;
|
|
|
|
s32 unk3C;
|
|
|
|
s32 unk40;
|
|
|
|
s32 unk44;
|
|
|
|
s32 unk48;
|
|
|
|
s32 unk4C;
|
|
|
|
s32 unk50;
|
|
|
|
s16 unk54;
|
|
|
|
s8 unk56;
|
|
|
|
s8 unk57;
|
|
|
|
} LedgeInfo98;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s32 unk20;
|
|
|
|
s32 unk24;
|
|
|
|
s16 unk28;
|
|
|
|
s8 unk2A; // Used
|
|
|
|
s8 unk2B;
|
|
|
|
} LedgeInfoA0;
|
|
|
|
|
|
|
|
typedef struct ledge_info {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
f32 unk14;
|
|
|
|
f32 unk18;
|
|
|
|
f32 unk1C;
|
|
|
|
f32 unk20;
|
|
|
|
u8 unk24;
|
|
|
|
u8 unk25;
|
|
|
|
u8 unk26;
|
|
|
|
u8 unk27;
|
|
|
|
u32 unk28;
|
|
|
|
u32 unk2C;
|
|
|
|
u32 unk30;
|
|
|
|
u32 unk34;
|
|
|
|
u32 unk38;
|
|
|
|
u32 unk3C;
|
|
|
|
u32 unk40;
|
|
|
|
u32 unk44;
|
|
|
|
u16 unk48;
|
|
|
|
u16 unk4A;
|
|
|
|
u32 unk4C;
|
|
|
|
u32 unk50;
|
|
|
|
u32 unk54;
|
|
|
|
u32 unk58;
|
|
|
|
u32 unk5C;
|
|
|
|
u32 unk60;
|
|
|
|
u32 unk64;
|
|
|
|
u32 unk68;
|
|
|
|
u8 unk6C;
|
|
|
|
u8 unk6D;
|
|
|
|
u8 unk6E;
|
|
|
|
u8 unk6F;
|
|
|
|
u32 unk70;
|
|
|
|
u32 unk74;
|
|
|
|
u32 unk78;
|
|
|
|
s32 unk7C;
|
|
|
|
s32 unk80; // object_timer gets written here
|
|
|
|
s32 unk84;
|
|
|
|
s32 unk88; // object_timer gets written here
|
|
|
|
LedgeInfo8C *unk8C; // Linked List
|
|
|
|
LedgeInfo90 *unk90;
|
|
|
|
s32 unk94;
|
|
|
|
LedgeInfo98 *unk98; // Array
|
|
|
|
s32 unk9C;
|
|
|
|
LedgeInfoA0 *unkA0; // Array
|
|
|
|
s32 unkA4;
|
|
|
|
s32 unkA8;
|
|
|
|
u8 unkAC;
|
|
|
|
} LedgeInfo;
|
|
|
|
|
|
|
|
// TODO: What is this actually?
|
|
|
|
typedef struct animation_state_unk0 {
|
|
|
|
s32 unk0;
|
|
|
|
f32 unk4; // Used
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s16 unk10; // Used
|
|
|
|
s16 unk12;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s32 unk20;
|
|
|
|
f32 unk24; // Used
|
|
|
|
} AnimationStateUnk0;
|
|
|
|
|
|
|
|
// See boss func_8002FB7C
|
|
|
|
typedef struct animation_state_unk20 {
|
|
|
|
u8 unk0;
|
|
|
|
u8 unk1;
|
|
|
|
u8 unk2;
|
|
|
|
u8 unk3;
|
|
|
|
f32 unk4;
|
|
|
|
f32 unk8;
|
|
|
|
f32 unkC;
|
|
|
|
} AnimationStateUnk20;
|
|
|
|
|
|
|
|
typedef struct actor_animation_state {
|
|
|
|
AnimationStateUnk0 *unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s16 unk10;
|
|
|
|
s16 unk12;
|
|
|
|
void *bone_array_1; // at 0x14, camera, update bone positions // TODO: Proper type
|
|
|
|
void *bone_array_2; // at 0x18, camera, update bone positions // TODO: Proper type
|
|
|
|
void *unk1C; // TODO: Used in func_80724CA4 and func_8068FF40, pretty easy match, array of 0x8 structs? // malloc(0x100) in func_80683158
|
|
|
|
AnimationStateUnk20 *unk20; // See boss func_8002FB7C
|
|
|
|
void *unk24;
|
|
|
|
s32 unk28;
|
|
|
|
s32 unk2C;
|
|
|
|
s32 unk30;
|
|
|
|
f32 scale_x; // at 0x34
|
|
|
|
f32 scale_y; // at 0x38
|
|
|
|
f32 scale_z; // at 0x3C
|
|
|
|
s32 unk40;
|
|
|
|
s32 unk44;
|
|
|
|
f32 unk48;
|
|
|
|
s32 unk4C;
|
|
|
|
s32 unk50;
|
|
|
|
s32 unk54;
|
|
|
|
s32 unk58;
|
|
|
|
s32 unk5C;
|
|
|
|
s32 unk60;
|
|
|
|
u16 unk64; // Used
|
|
|
|
u16 unk66;
|
|
|
|
s32 unk68;
|
|
|
|
s32 unk6C;
|
|
|
|
s32 unk70;
|
|
|
|
s32 unk74;
|
|
|
|
s32 unk78;
|
|
|
|
s32 unk7C;
|
|
|
|
s32 unk80;
|
|
|
|
s32 unk84;
|
|
|
|
s32 unk88;
|
|
|
|
s32 unk8C;
|
|
|
|
s32 unk90;
|
|
|
|
f32 animation_timer_1; // at 0x94
|
|
|
|
f32 animation_timer_2; // at 0x98
|
|
|
|
s32 unk9C;
|
|
|
|
s32 unk100;
|
|
|
|
f32 animation_timer_3; // at 0x104
|
|
|
|
f32 animation_timer_4; // at 0x108
|
|
|
|
} ActorAnimationState;
|
|
|
|
|
2023-02-24 12:39:28 +00:00
|
|
|
typedef struct {
|
|
|
|
f32 unk0; // Used
|
|
|
|
f32 unk4; // Used
|
|
|
|
union {
|
|
|
|
f32 unk8; // Used
|
|
|
|
s32 unk8_s32; // Used // TODO: We might have another aaD situation here...
|
|
|
|
};
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s32 unk20;
|
|
|
|
s32 unk24;
|
|
|
|
s32 unk28;
|
|
|
|
s32 unk2C;
|
|
|
|
s32 unk30;
|
|
|
|
s32 unk34;
|
|
|
|
s32 unk38;
|
|
|
|
s32 unk3C;
|
|
|
|
s32 unk40;
|
|
|
|
s32 unk44;
|
|
|
|
s32 unk48;
|
|
|
|
s32 unk4C;
|
|
|
|
s32 unk50;
|
|
|
|
s32 unk54;
|
|
|
|
s32 unk58;
|
|
|
|
s32 unk5C;
|
|
|
|
s32 unk60;
|
|
|
|
s32 unk64;
|
|
|
|
s32 unk68;
|
|
|
|
s32 unk6C;
|
|
|
|
} Actor124;
|
|
|
|
|
2023-02-23 05:32:14 +00:00
|
|
|
typedef struct actor_178 {
|
|
|
|
s16 unk0; // Used
|
|
|
|
s16 unk2;
|
|
|
|
u8 unk4;
|
|
|
|
u8 unk5;
|
|
|
|
u8 unk6;
|
|
|
|
u8 unk7;
|
|
|
|
u8 unk8;
|
|
|
|
u8 unk9;
|
|
|
|
u8 unkA;
|
|
|
|
u8 unkB;
|
|
|
|
u8 unkC;
|
|
|
|
u8 unkD;
|
|
|
|
u8 unkE;
|
|
|
|
u8 unkF[0x5];
|
|
|
|
u8 unk14;
|
|
|
|
} Actor178;
|
|
|
|
|
|
|
|
typedef struct boss_actor_178 {
|
|
|
|
s32 unk0; // Used
|
|
|
|
} BossActor178;
|
|
|
|
|
|
|
|
typedef struct race_actor_178 {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
f32 unk14;
|
|
|
|
} RaceActor178;
|
|
|
|
|
|
|
|
typedef struct actor_17C {
|
|
|
|
s32 unk0;
|
|
|
|
u8 unk4;
|
|
|
|
u8 unk5;
|
|
|
|
s16 unk6;
|
|
|
|
s16 unk8;
|
|
|
|
} Actor17C;
|
|
|
|
|
|
|
|
typedef struct actor_collision ActorCollision;
|
|
|
|
typedef struct actor Actor;
|
|
|
|
|
|
|
|
// TODO: What type is this actually?
|
|
|
|
// D_807FBB70
|
|
|
|
typedef struct {
|
|
|
|
u8 unk0;
|
|
|
|
u8 unk1;
|
|
|
|
u8 unk2;
|
|
|
|
u8 unk3;
|
|
|
|
f32 unk4;
|
|
|
|
f32 unk8;
|
|
|
|
f32 unkC;
|
|
|
|
u8 pad10[0x14 - 0x10];
|
|
|
|
u8 unk14;
|
|
|
|
u8 unk15;
|
|
|
|
u8 unk16;
|
|
|
|
u8 unk17;
|
|
|
|
u8 unk18;
|
|
|
|
u8 unk19;
|
|
|
|
u8 unk1A;
|
|
|
|
u8 unk1B;
|
|
|
|
u8 unk1C;
|
|
|
|
u8 pad1D[0x24 - 0x1D];
|
|
|
|
u8 unk24;
|
|
|
|
u8 unk25;
|
|
|
|
u8 pad26[0x2C - 0x26];
|
|
|
|
u8 unk2C;
|
|
|
|
u8 pad2D[0x38 - 0x2D];
|
|
|
|
u8 unk38;
|
|
|
|
u8 unk39;
|
|
|
|
u8 pad3A[0x90 - 0x3A]; // TODO: Actor* at 0x7C? see func_8069A750
|
|
|
|
u8 unk90;
|
|
|
|
u8 unk91;
|
|
|
|
u8 pad92[0xD8 - 0x92];
|
|
|
|
f32 unkD8;
|
|
|
|
f32 unkDC; // TODO: Confirm datatype
|
|
|
|
f32 unkE0;
|
|
|
|
u8 unkE4;
|
|
|
|
u8 unkE5;
|
|
|
|
u8 unkE6;
|
|
|
|
u8 unkE7;
|
|
|
|
f32 unkE8;
|
|
|
|
s32 unkEC;
|
|
|
|
f32 unkF0;
|
|
|
|
f32 unkF4;
|
|
|
|
u8 padF8[0x1F8 - 0xF8];
|
|
|
|
s32 unk1F8;
|
|
|
|
Actor *unk1FC;
|
|
|
|
u8 unk200;
|
|
|
|
u8 unk201;
|
|
|
|
s16 unk202;
|
|
|
|
Actor *unk204;
|
|
|
|
u8 pad208[0x244 - 0x208];
|
|
|
|
s8 unk244;
|
|
|
|
s8 unk245;
|
|
|
|
s8 unk246;
|
|
|
|
s8 unk247;
|
|
|
|
u8 pad248[0x254 - 0x248];
|
|
|
|
u8 unk254; // Used
|
|
|
|
u8 unk255;
|
|
|
|
u8 unk256;
|
|
|
|
u8 unk257;
|
|
|
|
s32 unk258; // Used
|
|
|
|
s32 unk25C;
|
|
|
|
s32 unk260;
|
|
|
|
s32 unk264;
|
|
|
|
s32 unk268;
|
|
|
|
s32 unk26C;
|
|
|
|
s32 unk270;
|
|
|
|
s32 unk274;
|
|
|
|
s32 unk278;
|
|
|
|
} GlobalASMStruct35;
|
|
|
|
|
|
|
|
struct actor_collision {
|
|
|
|
u32 unk0; // Collision type?
|
2023-02-24 12:39:28 +00:00
|
|
|
u8 unk4;
|
|
|
|
u8 unk5;
|
|
|
|
u16 unk6;
|
2023-02-23 05:32:14 +00:00
|
|
|
Actor *collisionSource;
|
|
|
|
u32 unkC;
|
|
|
|
u32 unk10;
|
|
|
|
ActorCollision* next;
|
|
|
|
ActorCollision* prev;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct other_additional_actor_data {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s16 unk8;
|
|
|
|
s16 unkA;
|
|
|
|
f32 unkC;
|
|
|
|
f32 unk10;
|
|
|
|
f32 unk14;
|
|
|
|
s16 unk18;
|
|
|
|
s16 unk1A;
|
|
|
|
s32 unk1C;
|
|
|
|
} OtherAdditionalActorData;
|
|
|
|
|
|
|
|
typedef struct another_additional_actor_data {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s16 unk10;
|
|
|
|
u8 unk12;
|
|
|
|
u8 unk13; // Used in func_806925AC
|
|
|
|
} AnotherAdditionalActorData;
|
|
|
|
|
|
|
|
typedef struct race_additional_actor_data {
|
|
|
|
s16 unk0;
|
|
|
|
s16 unk2; // used
|
|
|
|
f32 unk4;
|
|
|
|
s16 unk8;
|
|
|
|
s16 unkA;
|
|
|
|
f32 unkC;
|
|
|
|
f32 unk10;
|
|
|
|
f32 unk14;
|
|
|
|
s16 unk18;
|
|
|
|
s16 unk1A;
|
|
|
|
u16 unk1C;
|
|
|
|
s8 unk1E;
|
|
|
|
s8 unk1F;
|
|
|
|
s32 unk20;
|
|
|
|
u8 unk24;
|
|
|
|
u8 unk25;
|
|
|
|
s8 unk26;
|
|
|
|
s8 unk27;
|
|
|
|
s8 unk28;
|
|
|
|
s8 unk29; // Used
|
|
|
|
s16 unk2A;
|
|
|
|
s32 unk2C;
|
|
|
|
s32 unk30;
|
|
|
|
u8 unk34;
|
|
|
|
u8 unk35;
|
|
|
|
u8 unk36;
|
|
|
|
u8 unk37;
|
|
|
|
s32 unk38;
|
|
|
|
u8 unk3C;
|
|
|
|
u8 unk3D;
|
|
|
|
u8 unk3E;
|
|
|
|
u8 unk3F;
|
|
|
|
s16 unk40;
|
|
|
|
u8 unk42; // Used
|
|
|
|
u8 unk43;
|
|
|
|
u8 unk44;
|
|
|
|
u8 unk45; // Used
|
|
|
|
} RaceAdditionalActorData;
|
|
|
|
|
|
|
|
typedef struct race_additional_actor_data2 {
|
|
|
|
u8 unk0; // Used
|
|
|
|
u8 unk1;
|
|
|
|
u8 unk2;
|
|
|
|
u8 unk3;
|
|
|
|
u8 pad2[0x24 - 0x4];
|
|
|
|
u8 unk24;
|
|
|
|
u8 pad25[0x36 - 0x25];
|
|
|
|
u8 unk36; // Used
|
|
|
|
} RaceAdditionalActorData2;
|
|
|
|
|
|
|
|
typedef struct yaad5 {
|
|
|
|
f32 unk0; // Used
|
|
|
|
f32 unk4; // Used
|
|
|
|
u32 unk8;
|
|
|
|
u32 unkC;
|
|
|
|
Actor* unk10; // Used
|
|
|
|
s16 unk14; // Used
|
|
|
|
s16 unk16; // Used
|
|
|
|
u16 unk18;
|
|
|
|
s16 unk1A; // Used
|
|
|
|
s16 unk1C; // Used
|
|
|
|
s8 unk1E; // Used
|
|
|
|
} YetAnotherAdditionalActorData5;
|
|
|
|
|
|
|
|
typedef struct yet_another_additional_actor_data {
|
|
|
|
Actor *unk0;
|
|
|
|
u16 unk4;
|
|
|
|
u16 unk6;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s16 unk20;
|
|
|
|
s16 unk22;
|
|
|
|
f32 unk24;
|
|
|
|
s16 unk28;
|
|
|
|
s16 unk2A;
|
|
|
|
s32 unk2C;
|
|
|
|
s32 unk30;
|
|
|
|
s32 unk34;
|
|
|
|
s16 unk38;
|
|
|
|
s16 unk3A;
|
|
|
|
s32 unk3C;
|
|
|
|
} YetAnotherAdditionalActorData;
|
|
|
|
|
|
|
|
typedef struct yaad4 {
|
|
|
|
s32 unk0;
|
|
|
|
s32 unk4;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s16 unk10; // Used
|
|
|
|
s16 unk12; // Used
|
|
|
|
s16 unk14; // Used
|
|
|
|
} YetAnotherAdditionalActorData4;
|
|
|
|
|
|
|
|
typedef struct menu_additional_actor_data {
|
|
|
|
//u8 pad0[0x17];
|
|
|
|
f32 unk0;
|
|
|
|
f32 unk4;
|
|
|
|
f32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s16 unk10;
|
|
|
|
s8 unk12;
|
|
|
|
s8 unk13;
|
|
|
|
s16 unk14;
|
|
|
|
s8 unk16;
|
|
|
|
s8 unk17;
|
|
|
|
} MenuAdditionalActorData;
|
|
|
|
|
|
|
|
typedef struct player_additional_actor_data {
|
|
|
|
s32 unk0; // TODO: May be s16 (see func_806CF580), but changing that causes some matching functions to break
|
|
|
|
f32 unk4;
|
|
|
|
s16 unk8; // Used
|
|
|
|
s16 unkA; // Used, Actor->y_rotation copied here
|
|
|
|
s16 unkC; // Used
|
|
|
|
s16 unkE; // Used
|
|
|
|
s16 unk10; // Used
|
|
|
|
s16 unk12; // Used
|
|
|
|
s16 unk14; // Used
|
|
|
|
s8 unk16;
|
|
|
|
s8 unk17; // Used, set to current file selection?
|
|
|
|
u16 unk18; // Used
|
|
|
|
u16 unk1A;
|
|
|
|
f32 unk1C; // Used
|
|
|
|
f32 unk20; // Used
|
|
|
|
s16 unk24; // Used
|
|
|
|
s16 unk26;
|
|
|
|
s16 unk28; // Used
|
|
|
|
s16 unk2A;
|
|
|
|
f32 unk2C; // Used
|
|
|
|
f32 unk30; // Used
|
|
|
|
f32 unk34; // Used
|
|
|
|
f32 unk38; // Used
|
|
|
|
s16 unk3C;
|
|
|
|
s16 unk3E; // Used
|
|
|
|
s16 unk40;
|
|
|
|
u8 unk42; // Used, related to distance from floor
|
|
|
|
u8 unk43;
|
|
|
|
u8 unk44;
|
|
|
|
u8 unk45; // Used, VehicleAdditionalActorData
|
|
|
|
u8 unk46;
|
|
|
|
u8 unk47;
|
|
|
|
s16 unk48; // Used
|
|
|
|
s16 unk4A;
|
|
|
|
s16 unk4C; // Used
|
|
|
|
s16 unk4E;
|
|
|
|
s16 unk50; // Used
|
|
|
|
s16 unk52;
|
|
|
|
f32 unk54;
|
|
|
|
s32 unk58; // Used, related to D_80767CC0
|
|
|
|
s32 unk5C;
|
|
|
|
s32 unk60;
|
|
|
|
s16 unk64; // Used
|
|
|
|
s16 unk66;
|
|
|
|
f32 unk68;
|
|
|
|
f32 unk6C; // Used
|
|
|
|
s16 unk70; // Used, y rotation?
|
|
|
|
s16 unk72;
|
|
|
|
s32 unk74;
|
|
|
|
s32 unk78;
|
|
|
|
s32 unk7C;
|
|
|
|
s32 unk80;
|
|
|
|
s32 unk84;
|
|
|
|
Actor* vehicle_actor_pointer; // Used
|
|
|
|
u8 unk8C; // Used
|
|
|
|
u8 unk8D; // Used
|
|
|
|
s16 unk8E;
|
|
|
|
s32 unk90;
|
|
|
|
f32 unk94; // Used
|
|
|
|
f32 unk98;
|
|
|
|
f32 unk9C; // Used
|
|
|
|
f32 unkA0; // Used
|
|
|
|
f32 unkA4; // Used
|
|
|
|
f32 unkA8; // Used
|
|
|
|
s32 unkAC; // Used // TODO: Float? Datatype conflicts in CEAEO.c
|
|
|
|
s16 unkB0;
|
|
|
|
s16 unkB2; // Used
|
|
|
|
s32 unkB4;
|
|
|
|
f32 unkB8; // Used
|
|
|
|
s16 unkBC; // Used
|
|
|
|
s16 unkBE;
|
|
|
|
s16 unkC0;
|
|
|
|
s16 unkC2; // Used
|
|
|
|
s32 unkC4;
|
|
|
|
s16 unkC8;
|
|
|
|
u8 unkCA; // Used
|
|
|
|
s8 unkCB;
|
|
|
|
s32 unkCC;
|
|
|
|
s32 unkD0;
|
|
|
|
s16 unkD4; // Used
|
|
|
|
s16 unkD6;
|
|
|
|
s32 unkD8;
|
|
|
|
Actor *unkDC; // Used
|
|
|
|
s32 unkE0;
|
|
|
|
s32 unkE4;
|
|
|
|
s32 unkE8;
|
|
|
|
u8 unkEC;
|
|
|
|
u8 unkED;
|
|
|
|
u8 unkEE;
|
|
|
|
u8 unkEF; // Used
|
|
|
|
u8 unkF0; // TODO: Might be float, see func_806ECAC4
|
|
|
|
u8 unkF1; // Used
|
|
|
|
u8 unkF2;
|
|
|
|
u8 unkF3; // Used
|
|
|
|
u8 unkF4;
|
|
|
|
u8 unkF5;
|
|
|
|
u8 unkF6; // Used
|
|
|
|
u8 unkF7;
|
|
|
|
s32 unkF8;
|
|
|
|
u8 unkFC; // Used
|
|
|
|
u8 unkFD;
|
|
|
|
u8 unkFE;
|
|
|
|
u8 unkFF;
|
|
|
|
s32 unk100;
|
|
|
|
Actor *unk104; // Used, Actor*?
|
|
|
|
f32 unk108; // Used
|
|
|
|
s8 unk10C; // Used
|
|
|
|
u8 unk10D;
|
|
|
|
u8 unk10E;
|
|
|
|
u8 unk10F;
|
|
|
|
s32 unk110;
|
|
|
|
s32 unk114;
|
|
|
|
s32 unk118;
|
|
|
|
u8 unk11C; // Used, VehicleAdditionalActorData?
|
|
|
|
u8 unk11D;
|
|
|
|
u8 unk11E;
|
|
|
|
u8 unk11F;
|
|
|
|
s32 unk120;
|
|
|
|
f32 unk124; // Used
|
|
|
|
s32 unk128;
|
|
|
|
s32 unk12C;
|
|
|
|
s32 unk130;
|
|
|
|
s32 unk134;
|
|
|
|
s32 unk138;
|
|
|
|
s32 unk13C;
|
|
|
|
s32 unk140;
|
|
|
|
s32 unk144;
|
|
|
|
s32 unk148;
|
|
|
|
s32 unk14C;
|
|
|
|
s32 unk150;
|
|
|
|
s32 unk154;
|
|
|
|
s32 unk158;
|
|
|
|
s32 unk15C;
|
|
|
|
s32 unk160;
|
|
|
|
s32 unk164;
|
|
|
|
s32 unk168;
|
|
|
|
s32 unk16C;
|
|
|
|
s32 unk170;
|
|
|
|
s32 unk174;
|
|
|
|
s32 unk178;
|
|
|
|
s32 unk17C;
|
|
|
|
s32 unk180;
|
|
|
|
s32 unk184;
|
|
|
|
s32 unk188;
|
|
|
|
s32 unk18C;
|
|
|
|
s32 unk190;
|
|
|
|
s32 unk194;
|
|
|
|
s32 unk198;
|
|
|
|
s16 unk19C; // Used
|
|
|
|
s16 unk19E; // Used
|
|
|
|
u16 unk1A0; // Used
|
|
|
|
u8 unk1A2;
|
|
|
|
u8 unk1A3; // Used
|
|
|
|
u8 unk1A4; // Used, playerIndex?
|
|
|
|
u8 unk1A5;
|
|
|
|
u8 unk1A6;
|
|
|
|
u8 unk1A7;
|
|
|
|
Actor *unk1A8;
|
|
|
|
Actor *unk1AC; // TODO: Is this correct?
|
|
|
|
s32 unk1B0;
|
|
|
|
s32 unk1B4;
|
|
|
|
s32 unk1B8;
|
|
|
|
f32 unk1BC; // Used
|
|
|
|
f32 unk1C0; // Used
|
|
|
|
f32 unk1C4; // Used
|
|
|
|
f32 unk1C8; // Used
|
|
|
|
f32 unk1CC; // Used
|
|
|
|
f32 unk1D0; // Used, y scale
|
|
|
|
f32 unk1D4; // Used, z scale
|
|
|
|
f32 unk1D8; // Used
|
|
|
|
f32 unk1DC; // Used
|
|
|
|
f32 unk1E0; // Used
|
|
|
|
s32 unk1E4;
|
|
|
|
s32 unk1E8;
|
|
|
|
s16 unk1EC;
|
|
|
|
s16 unk1EE; // Used
|
|
|
|
s32 unk1F0; // Used, bitfield // TODO: Proper bitfield syntax
|
|
|
|
s32 unk1F4;
|
|
|
|
s32 unk1F8;
|
|
|
|
u8 unk1FC; // Used
|
|
|
|
u8 unk1FD;
|
|
|
|
u16 unk1FE; // Used
|
|
|
|
s16 unk200; // Used
|
|
|
|
s16 unk202;
|
|
|
|
s32 unk204;
|
|
|
|
s32 unk208;
|
|
|
|
s32 unk20C;
|
|
|
|
s32 unk210;
|
|
|
|
s32 unk214;
|
|
|
|
s32 unk218;
|
|
|
|
s16 unk21C;
|
|
|
|
u16 unk21E; // Used
|
|
|
|
f32 unk220; // Used, x
|
|
|
|
f32 unk224; // Used, y
|
|
|
|
f32 unk228; // Used, z
|
|
|
|
f32 unk22C; // Used, x
|
|
|
|
f32 unk230; // Used, y
|
|
|
|
f32 unk234; // Used, z
|
|
|
|
f32 unk238; // Used
|
|
|
|
u16 unk23C; // Used
|
|
|
|
u8 unk23E;
|
|
|
|
u8 unk23F; // Used
|
|
|
|
s16 unk240;
|
|
|
|
u16 unk242; // Used
|
|
|
|
s16 unk244;
|
|
|
|
s8 unk246; // Used func_806CA26C
|
|
|
|
s8 unk247; // Used func_806CA26C
|
|
|
|
s8 unk248;
|
|
|
|
s8 unk249;
|
|
|
|
s8 unk24A;
|
|
|
|
s8 unk24B; // Used
|
|
|
|
u16 unk24C; // Used // TODO: s16? func_806CA1B4 uses this as u16
|
|
|
|
u16 unk24E; // Used // TODO: s16? func_806CA1B4 uses this as u16
|
|
|
|
s32 unk250;
|
|
|
|
} PlayerAdditionalActorData;
|
|
|
|
|
|
|
|
//f32 at unk8 doesn't match with what's in structs.h (s16)
|
|
|
|
//for PlayerAdditionalActorData so making this struct
|
|
|
|
typedef struct {
|
|
|
|
u8 pad0[0x8];
|
|
|
|
f32 unk8;
|
|
|
|
} PaaD0;
|
|
|
|
|
|
|
|
// Bonus func_800253E4
|
|
|
|
typedef struct {
|
|
|
|
Actor* unk0;
|
|
|
|
} BaaD2;
|
|
|
|
|
|
|
|
typedef struct TempAAD {
|
|
|
|
s8 unk0;
|
|
|
|
u8 pad0[0x14 - 0x1];
|
|
|
|
s16 unk14;
|
|
|
|
s16 unk16;
|
|
|
|
s16 unk18;
|
|
|
|
s16 unk1A;
|
|
|
|
u8 pad1[0x24 - 0x1C];
|
|
|
|
s8 unk24;
|
|
|
|
} TempAAD;
|
|
|
|
|
|
|
|
// TODO: This appears to be a "texture renderer" according to ScriptHawk, needs a better name though. Linked list at Actor->unk158
|
|
|
|
typedef struct global_asm_struct_60 GlobalASMStruct60;
|
|
|
|
|
|
|
|
struct global_asm_struct_60 {
|
|
|
|
s32 *unk0; // Used
|
|
|
|
GlobalASMStruct60 *unk4; // Used? Might be wrong datatype, see func_80688638
|
|
|
|
s16 unk8;
|
|
|
|
s16 unkA; // Used
|
|
|
|
s16 unkC; // Used - Texture index?
|
|
|
|
s16 unkE;
|
|
|
|
f32 unk10; // Used
|
|
|
|
f32 unk14; // Used
|
|
|
|
s16 unk18; // Used
|
|
|
|
s16 unk1A; // Used
|
|
|
|
s16 unk1C; // Used
|
|
|
|
s16 unk1E; // Used
|
|
|
|
s8 unk20; // Used
|
|
|
|
s8 unk21; // Used
|
|
|
|
u8 unk22; // Used
|
|
|
|
u8 unk23;
|
|
|
|
GlobalASMStruct60 *next; // at 0x24
|
|
|
|
};
|
|
|
|
|
|
|
|
struct actor {
|
|
|
|
u32 *unk0; // Small header on top of DisplayList Pointer // TODO: Proper type
|
|
|
|
ActorAnimationState *animation_state;
|
|
|
|
u32 *unk8; // Current bone array Pointer // TODO: Proper type
|
|
|
|
s16 unkC;
|
|
|
|
s16 unkE;
|
|
|
|
u32 unk10;
|
|
|
|
u32 unk14;
|
|
|
|
u32 unk18;
|
|
|
|
u32 unk1C;
|
|
|
|
u32 unk20;
|
|
|
|
u32 unk24;
|
|
|
|
u32 unk28;
|
|
|
|
f32 unk2C;
|
|
|
|
u32 unk30;
|
|
|
|
u32 unk34;
|
|
|
|
u32 unk38;
|
|
|
|
u32 unk3C;
|
|
|
|
u32 unk40;
|
|
|
|
u32 unk44;
|
|
|
|
u32 unk48;
|
|
|
|
u32 unk4C;
|
|
|
|
u32 unk50;
|
|
|
|
u32 unk54;
|
|
|
|
u32 unk58;
|
|
|
|
u16 interactable; // Bitfield at 0x5C
|
|
|
|
u16 unk5E;
|
|
|
|
u32 object_properties_bitfield; // at 0x60
|
|
|
|
s32 unk64; // Another bitfield
|
|
|
|
u16 unk68;
|
|
|
|
u16 unk6A; // is_grounded?
|
|
|
|
u16 unk6C;
|
|
|
|
s16 unk6E;
|
|
|
|
u16 unk70;
|
|
|
|
u16 unk72;
|
|
|
|
u32 unk74;
|
|
|
|
u8 unk78;
|
|
|
|
u8 unk79;
|
|
|
|
u8 unk7A;
|
|
|
|
u8 unk7B;
|
|
|
|
f32 x_position; // at 0x7C
|
|
|
|
f32 y_position; // at 0x80
|
|
|
|
f32 z_position; // at 0x84
|
|
|
|
f32 unk88;
|
|
|
|
f32 unk8C;
|
|
|
|
f32 unk90;
|
|
|
|
f32 unk94;
|
|
|
|
f32 unk98;
|
|
|
|
f32 unk9C;
|
|
|
|
f32 unkA0;
|
|
|
|
f32 floor; // at 0xA4
|
|
|
|
f32 unkA8; // Used
|
|
|
|
f32 unkAC;
|
|
|
|
u32 unkB0;
|
|
|
|
f32 distance_from_floor; // at 0xB4
|
|
|
|
f32 unkB8; // at 0xB8 // velocity?
|
|
|
|
f32 unkBC; // at 0xBC
|
|
|
|
f32 y_velocity; // at 0xC0
|
|
|
|
f32 y_acceleration; // at 0xC4
|
|
|
|
f32 terminal_velocity; // at 0xC8
|
|
|
|
u8 unkCC; // Used
|
|
|
|
u8 unkCD;
|
|
|
|
u8 unkCE;
|
|
|
|
u8 unkCF;
|
|
|
|
u8 unkD0;
|
|
|
|
u8 unkD1; // Used
|
|
|
|
u8 unkD2;
|
|
|
|
u8 unkD3;
|
|
|
|
u32 unkD4;
|
|
|
|
s16 unkD8; // Used
|
|
|
|
s16 unkDA; // Used
|
|
|
|
s16 unkDC; // Used
|
|
|
|
s16 unkDE;
|
|
|
|
f32 unkE0;
|
|
|
|
s16 x_rotation; // at 0xE4
|
|
|
|
s16 y_rotation; // at 0xE6
|
|
|
|
s16 z_rotation; // at 0xE8
|
|
|
|
s16 unkEA;
|
|
|
|
s16 unkEC; // Something to do with shadow opacity
|
|
|
|
s16 unkEE; // TODO: Interacts with rotation, maybe a copy of it?
|
|
|
|
u16 unkF0;
|
|
|
|
s16 unkF2;
|
|
|
|
s16 unkF4;
|
|
|
|
s16 unkF6;
|
|
|
|
s16 unkF8;
|
|
|
|
u16 unkFA;
|
|
|
|
u8 unkFC;
|
|
|
|
u8 unkFD;
|
|
|
|
u8 unkFE;
|
|
|
|
u8 unkFF;
|
|
|
|
f32 unk100; // Used
|
|
|
|
f32 unk104; // Used
|
|
|
|
f32 unk108; // Used
|
|
|
|
s16 unk10C;
|
|
|
|
u8 unk10E; // Used
|
|
|
|
u8 unk10F;
|
|
|
|
u8 locked_to_pad; // at 0x110
|
|
|
|
u8 unk111;
|
|
|
|
u8 unk112;
|
|
|
|
u8 unk113;
|
|
|
|
u32 unk114;
|
|
|
|
u32 unk118;
|
|
|
|
Actor *unk11C;
|
|
|
|
f32 unk120;
|
2023-02-24 12:39:28 +00:00
|
|
|
Actor124 *unk124;
|
2023-02-23 05:32:14 +00:00
|
|
|
s16 shadow_opacity; // at 0x128, max value 0xFF
|
|
|
|
s16 draw_distance; // at 0x12A
|
|
|
|
s16 unk12C; // Used
|
|
|
|
s16 unk12E;
|
|
|
|
u8 unk130; // Used
|
|
|
|
u8 unk131; // Used
|
|
|
|
s16 unk132; // Used
|
|
|
|
s16 health;
|
|
|
|
s16 unk136;
|
|
|
|
u32 unk138;
|
|
|
|
ActorCollision *collision_queue_pointer; // at 0x13C
|
|
|
|
LedgeInfo *ledge_info_pointer; // at 0x140
|
|
|
|
u8 noclip_byte; // at 0x144
|
|
|
|
u8 unk145;
|
2023-02-24 12:39:28 +00:00
|
|
|
union {
|
|
|
|
u16 unk146; // used (0x147 hand state? 0x146 seems to be u16)
|
|
|
|
s16 unk146_s16; // used func_8068A764
|
|
|
|
};
|
2023-02-23 05:32:14 +00:00
|
|
|
u32 unk148; // Used
|
|
|
|
u32 unk14C; // Used
|
|
|
|
void *unk150; // TODO: Floor Triangle Pointer
|
|
|
|
u8 control_state; // at 0x154
|
|
|
|
u8 control_state_progress; // at 0x155
|
|
|
|
u8 unk156;
|
|
|
|
u8 unk157;
|
|
|
|
GlobalASMStruct60 *unk158; // Texture renderer linked list
|
|
|
|
u8 unk15C;
|
|
|
|
u8 unk15D;
|
|
|
|
u8 unk15E;
|
|
|
|
u8 unk15F; // Used, set to 0x01, 0x06, 0x0B in some cases
|
|
|
|
f64 unk160; // TODO: Probably not correct
|
|
|
|
s16 unk168; // Used
|
|
|
|
u8 unk16A;
|
|
|
|
u8 unk16B;
|
|
|
|
u8 unk16C;
|
|
|
|
u8 unk16D;
|
|
|
|
u8 unk16E;
|
|
|
|
u8 unk16F;
|
|
|
|
u8 unk170;
|
|
|
|
u8 unk171;
|
|
|
|
u8 unk172;
|
|
|
|
u8 unk173;
|
|
|
|
union {
|
|
|
|
void *additional_actor_data; // For when you don't know which one it's using
|
|
|
|
OtherAdditionalActorData *OaaD;
|
|
|
|
AnotherAdditionalActorData *AaaD;
|
|
|
|
RaceAdditionalActorData *RaaD;
|
|
|
|
RaceAdditionalActorData2 *RaaD2;
|
|
|
|
YetAnotherAdditionalActorData *YaaD;
|
|
|
|
YetAnotherAdditionalActorData4 *YaaD4;
|
|
|
|
YetAnotherAdditionalActorData5 *YaaD5;
|
|
|
|
MenuAdditionalActorData *MaaD;
|
|
|
|
PlayerAdditionalActorData *PaaD;
|
|
|
|
PaaD0 *PaaD0; // TODO: Figure this out
|
|
|
|
BaaD2 *BaaD2; // TODO: Figure this out
|
|
|
|
TempAAD *TaaD; // TODO: Figure this out (race overlay)
|
|
|
|
void *additional_data_pointer; //legacy
|
|
|
|
};
|
|
|
|
union {
|
|
|
|
Actor178 *unk178;
|
|
|
|
RaceActor178 *race178;
|
|
|
|
BossActor178 *boss178;
|
|
|
|
};
|
|
|
|
union {
|
|
|
|
Actor17C *unk17C;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u8 unk0;
|
|
|
|
u8 unk1;
|
|
|
|
u8 unk2;
|
|
|
|
u8 unk3; // Used
|
|
|
|
} CharacterChange294;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u8 does_player_exist; // bitfield? 0x00
|
|
|
|
u8 unk1;
|
|
|
|
u8 unk2;
|
|
|
|
u8 unk3;
|
|
|
|
Actor* player_pointer; // 0x04
|
|
|
|
u8 pad_unknown[0x208];
|
|
|
|
f32 look_at_eye_x; // 0x210 maybe an array?
|
|
|
|
f32 look_at_eye_y; // 0x214
|
|
|
|
f32 look_at_eye_z; // 0x218
|
|
|
|
f32 unk21C; // Used
|
|
|
|
f32 unk220; // Used
|
|
|
|
f32 unk224; // Used
|
|
|
|
f32 look_at_at_x; // 0x228 maybe an array?
|
|
|
|
f32 look_at_at_y; // 0x22C
|
|
|
|
f32 look_at_at_z; // 0x230
|
|
|
|
f32 unk234; // Used
|
|
|
|
f32 unk238; // Used
|
|
|
|
f32 unk23C; // Used
|
|
|
|
f32 look_at_up_x; // 0x240 maybe an array?
|
|
|
|
f32 look_at_up_y; // 0x244
|
|
|
|
f32 look_at_up_z; // 0x248;
|
|
|
|
s32 unk24C;
|
|
|
|
u8 pad_unknown2[0x270 - 0x250];
|
|
|
|
s16 unk270; // Used, related to map chunk "deload" value
|
|
|
|
s16 unk272; // Used, related to map chunk "deload" value
|
|
|
|
s16 unk274; // Used, related to map chunk "deload" value
|
|
|
|
s16 unk276; // Used, related to map chunk "deload" value
|
|
|
|
s16 unk278;
|
|
|
|
s16 unk27A;
|
|
|
|
f32 fov_y; // 0x27C
|
|
|
|
f32 unk280;
|
|
|
|
f32 near; // 0x284
|
|
|
|
f32 far; // 0x288
|
|
|
|
s32 unk28C;
|
|
|
|
u16 chunk; // 0x290
|
|
|
|
s16 unk292;
|
|
|
|
CharacterChange294 *unk294; // Used
|
|
|
|
s32 new_controller_inputs; // bitfield 0x298
|
|
|
|
s16 action_initiated; // 0x29C
|
|
|
|
s16 unk29E;
|
|
|
|
Actor* unk2A0;
|
|
|
|
s32 unk2A4;
|
|
|
|
s32 unk2A8; // Used
|
|
|
|
s32 unk2AC;
|
|
|
|
s32 unk2B0; // Used
|
|
|
|
u8 pad_unknown3[0x2C0 - 0x2B4];
|
|
|
|
u8 unk2C0; // Used
|
|
|
|
u8 unk2C1; // Used
|
|
|
|
u8 unk2C2; // Used
|
|
|
|
u8 unk2C3; // Used
|
|
|
|
s32 unk2C4;
|
|
|
|
s16 unk2C8; // Used
|
|
|
|
s16 unk2CA;
|
|
|
|
u8 pad_unknown4[0x2E2 - 0x2CC];
|
|
|
|
u16 unk2E2;
|
|
|
|
u8 unk2E4;
|
|
|
|
u8 unk2E5;
|
|
|
|
u8 unk2E6;
|
|
|
|
u8 unk2E7;
|
|
|
|
u8 unk2E8;
|
|
|
|
u8 unk2E9;
|
|
|
|
u8 unk2EA;
|
|
|
|
u8 unk2EB;
|
|
|
|
u8 unk2EC;
|
|
|
|
u8 unk2ED;
|
|
|
|
u8 unk2EE;
|
|
|
|
u8 unk2EF;
|
|
|
|
} CharacterChange;
|
|
|
|
|
|
|
|
typedef struct chunk_14 Chunk14;
|
|
|
|
|
|
|
|
struct chunk_14 {
|
|
|
|
s32 unk0;
|
|
|
|
f32 unk4;
|
|
|
|
f32 unk8;
|
|
|
|
f32 unkC;
|
|
|
|
f32 unk10;
|
|
|
|
Chunk14 *next;
|
|
|
|
Chunk14 *next2;
|
|
|
|
s16 unk1C;
|
|
|
|
s16 unk1E;
|
|
|
|
s16 unk20;
|
|
|
|
u8 unk22; // Used
|
|
|
|
u8 unk23; // Used
|
|
|
|
u8 unk24; // Used
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
s16 unk0;
|
|
|
|
s16 unk2;
|
|
|
|
s16 unk4;
|
|
|
|
s16 unk6;
|
|
|
|
s32 unk8;
|
|
|
|
s16 unkC;
|
|
|
|
s16 unkE;
|
|
|
|
s16 unk10;
|
|
|
|
u8 unk12;
|
|
|
|
u8 unk13;
|
|
|
|
} Chunk78_7C;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u8 loaded;
|
|
|
|
u8 unk1; // used
|
|
|
|
u8 unk2;
|
|
|
|
u8 unk3;
|
|
|
|
u8 unk4;
|
|
|
|
u8 visible; // 0x5 -- if 0x02 visible, else invisible
|
|
|
|
u8 unk6;
|
|
|
|
u8 unk7;
|
|
|
|
s32 unk8;
|
|
|
|
s32 unkC;
|
|
|
|
s32 unk10;
|
|
|
|
Chunk14 *unk14;
|
|
|
|
s32 unk18;
|
|
|
|
Chunk14 *unk1C; // TODO: Same struct as unk14?
|
|
|
|
s32 unk20;
|
|
|
|
s32 unk24;
|
|
|
|
u8 pad8[0x68 - 0x28];
|
|
|
|
s32 deload1; // 0x68
|
|
|
|
s32 deload2; // 0x6C
|
|
|
|
s32 deload3; // 0x70
|
|
|
|
s32 deload4; // 0x74
|
|
|
|
Chunk78_7C *unk78; // First in array?
|
|
|
|
Chunk78_7C *unk7C; // Last in array?
|
|
|
|
s16 unk80; // Used
|
|
|
|
s16 unk82; // Used
|
|
|
|
s16 unk84; // Used
|
|
|
|
s16 unk86; // Used
|
|
|
|
u8 pad2[0x1C8 - 0x88]; // total size 0x1C8
|
|
|
|
} Chunk;
|
|
|
|
|
|
|
|
// func_80712944, func_8060AC34
|
|
|
|
typedef struct global_asm_struct_12 {
|
|
|
|
u16 unk0;
|
|
|
|
s8 unk2;
|
|
|
|
s8 unk3;
|
|
|
|
s16 unk4;
|
|
|
|
u16 unk6;
|
|
|
|
s8 unk8;
|
|
|
|
s8 unk9;
|
|
|
|
u16 unkA;
|
|
|
|
u16 unkC;
|
|
|
|
s8 unkE;
|
|
|
|
s8 unkF;
|
|
|
|
u16 unk10;
|
|
|
|
u16 unk12;
|
|
|
|
s8 unk14;
|
|
|
|
s8 unk15;
|
|
|
|
} GlobalASMStruct12;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u8 pad0[0x6 - 0x0];
|
|
|
|
s16 unk6;
|
|
|
|
u8 unk8;
|
|
|
|
u8 unk9;
|
|
|
|
u8 unkA; // Used // TODO: Type conflict with u16? s16?
|
|
|
|
u8 unkB;
|
|
|
|
u8 unkC; // Used
|
|
|
|
u8 unkD;
|
|
|
|
u8 unkE;
|
|
|
|
u8 unkF;
|
|
|
|
u8 unk10; // Used
|
|
|
|
u8 unk11;
|
|
|
|
u8 unk12;
|
|
|
|
u8 unk13; // Used
|
|
|
|
} CharacterSpawner;
|
|
|
|
|
|
|
|
typedef struct global_asm_struct_17 {
|
|
|
|
u16 unk0;
|
|
|
|
s8 unk2;
|
|
|
|
s8 unk3;
|
|
|
|
} GlobalASMStruct17;
|
|
|
|
|
|
|
|
typedef struct JetpacStruct {
|
|
|
|
f32 unk0;
|
|
|
|
f32 unk4;
|
|
|
|
f32 unk8;
|
|
|
|
f32 unkC;
|
|
|
|
u8 unk10;
|
|
|
|
u8 unk11;
|
|
|
|
u8 unk12;
|
|
|
|
u8 unk13;
|
|
|
|
s32 unk14;
|
|
|
|
s32 unk18;
|
|
|
|
s32 unk1C;
|
|
|
|
s32 unk20;
|
|
|
|
s32 unk24;
|
|
|
|
s32 unk28;
|
|
|
|
s32 unk2C;
|
|
|
|
s32 unk30;
|
|
|
|
s32 unk34;
|
|
|
|
s32 unk38;
|
|
|
|
u8 pad1[0x44 - 0x3C];
|
|
|
|
s32 unk44;
|
|
|
|
void (*unk48)();
|
|
|
|
s32 *unk4C;
|
|
|
|
} JetpacStruct;
|
|
|
|
|
|
|
|
typedef struct JetpacItem {
|
|
|
|
u8 unk0;
|
|
|
|
} JetpacItem;
|
|
|
|
|
|
|
|
typedef struct Competitor {
|
|
|
|
s32 level;
|
|
|
|
s32 current_score;
|
|
|
|
s32 lives;
|
|
|
|
s32 lives_consumed;
|
|
|
|
s32 unk10; //used
|
|
|
|
u8 pad0[0x114 - 0x14];
|
|
|
|
s32 unk114; //used
|
|
|
|
u8 pad2[0x144 - 0x118];
|
|
|
|
s32 unk_144;
|
|
|
|
JetpacItem next_item_pointer;
|
|
|
|
u8 unk14C[4];
|
|
|
|
float unk150;
|
|
|
|
u8 pad1[0x18C - 0x154];
|
|
|
|
void (*fun_ptr)(JetpacItem*);
|
|
|
|
void (*fun_ptr2)(JetpacItem*,u8);
|
|
|
|
//u8 unk_190[4];
|
|
|
|
} Competitor;
|
|
|
|
|
|
|
|
typedef struct JetpacPlayerStruct {
|
|
|
|
s32 unk0;
|
|
|
|
u8 header[0x1C - 0x4];
|
|
|
|
Competitor player[2];
|
|
|
|
s32 player_index;
|
|
|
|
} JetpacPlayerStruct;
|
|
|
|
|
|
|
|
typedef struct ActorSpawner ActorSpawner;
|
|
|
|
|
|
|
|
struct ActorSpawner {
|
|
|
|
u16 actor_type; // At 0x0
|
|
|
|
u16 unk2;
|
|
|
|
f32 x_position; // At 0x4
|
|
|
|
f32 y_position; // At 0x8
|
|
|
|
f32 z_position; // At 0xC
|
|
|
|
f32 unk10;
|
|
|
|
f32 unk14;
|
|
|
|
f32 unk18;
|
|
|
|
s16 y_rotation; // At 0x1C
|
|
|
|
u16 unk1E;
|
|
|
|
u16 unk20;
|
|
|
|
u8 pad22[0x32 - 0x22];
|
|
|
|
s16 unk32;
|
|
|
|
u8 pad34[0x44 - 0x34];
|
|
|
|
Actor* tied_actor; // At 0x44
|
|
|
|
u8 unk48; // Used
|
|
|
|
u8 unk49;
|
|
|
|
s16 unk4A;
|
|
|
|
u8 unk4C; // Used
|
|
|
|
u8 unk4D;
|
|
|
|
s32 unk50; // TODO: Actor*?
|
|
|
|
f32 unk54;
|
|
|
|
s16 unk58;
|
|
|
|
s16 id; // At 0x5A
|
|
|
|
s32 (*unk5C)(s32); // At 0x5C
|
|
|
|
s32 (*drawing_code)(s32); // At 0x60
|
|
|
|
ActorSpawner* previous_spawner; // At 0x64
|
|
|
|
ActorSpawner* next_spawner; // At 0x68
|
|
|
|
u8 pad6C[0x80 - 0x6C];
|
|
|
|
};
|
|
|
|
|
|
|
|
// TODO: Use that clever tuple thing from BKomp
|
|
|
|
typedef struct {
|
|
|
|
s16 coords_0[3]; // 0x0
|
|
|
|
s16 coords_1[3]; // 0x6
|
|
|
|
s16 coords_2[3]; // 0xC
|
|
|
|
s16 coords_3[3]; // 0x12
|
|
|
|
s16 coords_4[3]; // 0x18
|
|
|
|
} EnemyAggressionBox;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
s16 x_pos_0; // 0x0
|
|
|
|
s16 z_pos_0; // 0x2
|
|
|
|
s16 x_pos_1; // 0x4
|
|
|
|
s16 z_pos_1; // 0x6
|
|
|
|
EnemyAggressionBox *aggression_box_pointer; // = 0xC, -- u32
|
|
|
|
} EnemyMovementBox;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u8 enemy_value; // 0x0
|
|
|
|
u8 unk1;
|
|
|
|
u16 y_rot; // 0x2
|
|
|
|
s16 x_pos; // 0x4
|
|
|
|
s16 y_pos; // 0x6
|
|
|
|
s16 z_pos; // 0x8
|
|
|
|
u8 cs_model; // 0xA
|
|
|
|
u8 unkB;
|
|
|
|
u8 max_idle_speed; // 0xC
|
|
|
|
u8 max_aggro_speed; // 0xD
|
|
|
|
u8 unkE;
|
|
|
|
u8 scale; // 0xF
|
|
|
|
u8 aggro; // 0x10
|
|
|
|
u8 unk11;
|
|
|
|
u8 something_spawn_state; // 0x12
|
|
|
|
u8 spawn_trigger; // 0x13
|
|
|
|
u8 respawn_timer_init; // 0x14 - Result is multiplied by 30 to get actual respawn timer
|
|
|
|
u8 unk15;
|
|
|
|
u8 unk16;
|
|
|
|
u8 unk17;
|
|
|
|
Actor *tied_actor; // 0x18
|
|
|
|
EnemyMovementBox *movement_box_pointer; // 0x1C
|
|
|
|
void *unk20; // 0x20
|
|
|
|
s16 respawn_time; // 0x24
|
|
|
|
s16 unk26;
|
|
|
|
s32 unk28;
|
|
|
|
f32 unk2C; // 0x2C initially written to 0.01
|
|
|
|
f32 unk30; // 0x30 initially written to 1
|
|
|
|
f32 animation_speed; // 0x34
|
|
|
|
u32 unk38; // 0x38 TODO: maybe float, based on alt enemy type
|
|
|
|
u32 unk3C;
|
|
|
|
s16 chunk; // 0x40
|
|
|
|
u8 spawn_state; // 0x42
|
|
|
|
u8 counter; // 0x43
|
|
|
|
u8 alternative_enemy_spawn; // 0x44
|
|
|
|
|
|
|
|
// 1000 0000 0000 0000 - ?
|
|
|
|
// 0100 0000 0000 0000 - ? Resets on Respawn
|
|
|
|
// 0010 0000 0000 0000 - ? Resets on Respawn
|
|
|
|
// 0001 0000 0000 0000 - ?
|
|
|
|
|
|
|
|
// 0000 1000 0000 0000 - ?
|
|
|
|
// 0000 0100 0000 0000 - ?
|
|
|
|
// 0000 0010 0000 0000 - ?
|
|
|
|
// 0000 0001 0000 0000 - ?
|
|
|
|
|
|
|
|
// 0000 0000 1000 0000 - ?
|
|
|
|
// 0000 0000 0100 0000 - Ignores instrument plays
|
|
|
|
// 0000 0000 0010 0000 - Ignores movement boundaries
|
|
|
|
// 0000 0000 0001 0000 - ?
|
|
|
|
|
|
|
|
// 0000 0000 0000 1000 - ? Reset on respawn
|
|
|
|
// 0000 0000 0000 0100 - ?
|
|
|
|
// 0000 0000 0000 0010 - Won't Respawn
|
|
|
|
// 0000 0000 0000 0001 - Spawned from respawn pending
|
|
|
|
|
|
|
|
// TODO: proper bitfield syntax
|
|
|
|
u16 properties_bitfield; // = 0x46 bitfield -- TODO: Document this, find where this comes from so we can display stuff pre-load
|
|
|
|
} EnemySpawner; // 807FDC8C pointer to array of structs, count at 807FDC88
|
|
|
|
|
|
|
|
typedef struct Struct807FDC90 Struct807FDC90;
|
|
|
|
|
|
|
|
// Use this for D_807FDC90
|
|
|
|
struct Struct807FDC90 {
|
|
|
|
Struct807FDC90 *unk0; // TODO: This type may not be correct
|
|
|
|
Actor *unk4;
|
|
|
|
s16 unk8;
|
|
|
|
s16 unkA;
|
|
|
|
s16 unkC; // Used
|
|
|
|
s16 unkE;
|
|
|
|
s32 unk10;
|
|
|
|
s32 unk14;
|
|
|
|
u16 unk18;
|
|
|
|
u16 unk1A;
|
|
|
|
u8 unk1C;
|
|
|
|
u8 unk1D;
|
|
|
|
u8 unk1E;
|
|
|
|
u8 unk1F;
|
|
|
|
u8 unk20;
|
|
|
|
u8 unk21;
|
|
|
|
u8 unk22;
|
|
|
|
u8 unk23;
|
|
|
|
u8 unk24;
|
|
|
|
u8 unk25;
|
|
|
|
u8 unk26;
|
|
|
|
u8 unk27;
|
|
|
|
s32 unk28;
|
|
|
|
s16 unk2C;
|
|
|
|
s16 unk2E; // TODO: This might not be correct
|
|
|
|
f32 unk30; // Used
|
|
|
|
u8 unk34;
|
|
|
|
u8 unk35; // Used
|
|
|
|
u8 unk36;
|
|
|
|
u8 unk37;
|
|
|
|
u8 unk38;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct ExitData {
|
|
|
|
s16 x_pos; // At 0x00
|
|
|
|
s16 y_pos; // At 0x02
|
|
|
|
s16 z_pos; // At 0x04
|
|
|
|
u8 angle; // At 0x06
|
|
|
|
u8 unk7; // At 0x07
|
|
|
|
u8 has_autowalk; // At 0x08
|
|
|
|
u8 size; // At 0x0A
|
|
|
|
} ExitData;
|
|
|
|
|
|
|
|
// From Practice ROM
|
|
|
|
typedef struct spriteDisplay {
|
|
|
|
/* 0x000 */ s32 disappear;
|
|
|
|
/* 0x004 */ s8 unk_04[0x11];
|
|
|
|
/* 0x015 */ s8 unk_15;
|
|
|
|
} spriteDisplay;
|
|
|
|
|
|
|
|
typedef struct spriteControl {
|
|
|
|
/* 0x000 */ f32 movement_style;
|
|
|
|
/* 0x004 */ f32 pointer_offset_0x15;
|
|
|
|
/* 0x008 */ f32 xPos;
|
|
|
|
/* 0x00C */ f32 yPos;
|
|
|
|
/* 0x010 */ f32 scale;
|
|
|
|
/* 0x014 */ f32 unk_14;
|
|
|
|
/* 0x018 */ s32 unk_18;
|
|
|
|
/* 0x01C */ s32 unk_1C;
|
|
|
|
} spriteControl;
|
|
|
|
|
|
|
|
typedef struct otherSpriteControl {
|
|
|
|
/* 0x000 */ s8 unk_000[0x28];
|
|
|
|
/* 0x028 */ u8 left_stretch;
|
|
|
|
/* 0x029 */ u8 right_stretch;
|
|
|
|
/* 0x02A */ u8 up_stretch;
|
|
|
|
/* 0x02B */ u8 down_stretch;
|
|
|
|
/* 0x02C */ s8 unk_02C[0x340-0x2C];
|
|
|
|
/* 0x340 */ f32 xPos;
|
|
|
|
/* 0x344 */ f32 yPos;
|
|
|
|
/* 0x348 */ f32 unk_348;
|
|
|
|
/* 0x34C */ s8 unk_34C[4];
|
|
|
|
/* 0x350 */ s8 gif_update_frequency;
|
|
|
|
/* 0x351 */ s8 unk_351[0xB];
|
|
|
|
/* 0x35C */ spriteControl* gif_control_pointer;
|
|
|
|
/* 0x360 */ f32 xScale;
|
|
|
|
/* 0x364 */ f32 yScale;
|
|
|
|
/* 0x368 */ s8 unk_368[0x2];
|
|
|
|
/* 0x36A */ s8 transparency1;
|
|
|
|
/* 0x36B */ s8 transparency2;
|
|
|
|
/* 0x36C */ s8 transparency3;
|
|
|
|
/* 0x36D */ s8 transparency4;
|
|
|
|
/* 0x36E */ s8 unk_36E[0x384-0x36E];
|
|
|
|
/* 0x384 */ void* some_pointer;
|
|
|
|
} otherSpriteControl;
|
|
|
|
|
|
|
|
#endif
|