dk64/include/structs.h

1535 lines
32 KiB
C
Raw Normal View History

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;
2023-04-08 10:25:26 +00:00
typedef struct {
u8 unk0;
u8 unk1;
} Struct80027840;
2023-02-23 05:32:14 +00:00
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;
2023-04-08 10:25:26 +00:00
Struct80027840 *unk20;
2023-02-23 05:32:14 +00:00
u16 unk24;
u16 unk26;
u16 unk28; // Used
s16 unk2A; // Used
u32 unk2C;
u32 unk30;
2023-03-10 15:17:25 +00:00
f32 unk34; // Used
2023-02-23 05:32:14 +00:00
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;
2023-02-27 14:46:15 +00:00
s16 unk24;
u8 unk26; // Used
u8 unk27; // Used
2023-02-23 05:32:14 +00:00
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 {
2023-03-26 06:56:32 +00:00
f32 unk0; // Used
2023-02-23 05:32:14 +00:00
s32 unk4;
s32 unk8;
2023-03-26 06:56:32 +00:00
f32 unkC; // Used
2023-02-23 05:32:14 +00:00
s32 unk10;
s32 unk14;
2023-03-26 06:56:32 +00:00
f32 unk18; // Used
2023-02-23 05:32:14 +00:00
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;
2023-03-01 17:02:30 +00:00
u16 unk64;
u16 unk66; // Used
2023-02-23 05:32:14 +00:00
u32 unk68;
u8 unk6C;
u8 unk6D;
u8 unk6E;
u8 unk6F;
u32 unk70;
2023-03-26 06:56:32 +00:00
u32 *unk74; // TODO: What is this?
2023-02-23 05:32:14 +00:00
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;
2023-04-19 13:03:58 +00:00
typedef struct animation_state_unk8 {
s32 unk0;
} AnimationStateUnk8;
2023-02-23 05:32:14 +00:00
// See boss func_8002FB7C
typedef struct animation_state_unk20 {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
f32 unk4;
f32 unk8;
f32 unkC;
2023-04-17 01:46:02 +00:00
u8 unk10;
2023-02-23 05:32:14 +00:00
} AnimationStateUnk20;
typedef struct actor_animation_state {
AnimationStateUnk0 *unk0;
s32 unk4;
2023-04-19 13:03:58 +00:00
AnimationStateUnk8 *unk8;
2023-02-23 05:32:14 +00:00
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 {
2023-04-17 01:46:02 +00:00
union {
f32 unk0; // Used
s32 unk0_s32; // Used // TODO: We might have another aaD situation here...
};
union {
f32 unk4; // Used
s32 unk4_s32; // Used // TODO: We might have another aaD situation here...
};
2023-02-24 12:39:28 +00:00
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;
2023-04-19 13:03:58 +00:00
s16 unk6;
s16 unk8;
2023-02-23 05:32:14 +00:00
u8 unkA;
u8 unkB;
u8 unkC;
u8 unkD;
u8 unkE;
2023-03-03 14:30:50 +00:00
u8 unkF;
u16 unk10; // Used
u16 unk12; // Used
2023-02-23 05:32:14 +00:00
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;
2023-04-15 14:43:24 +00:00
typedef struct {
u8 unk0;
u8 unk1; // Used
} A178_806A18A8;
2023-02-23 05:32:14 +00:00
typedef struct actor_17C {
2023-04-17 09:22:20 +00:00
union {
s32 unk0; // TODO: Actor*? Boss overlay Might require a union?
s16 unk0_s16[2]; // TODO: Actor*? Boss overlay Might require a union?
};
2023-02-23 05:32:14 +00:00
u8 unk4;
u8 unk5;
s16 unk6;
s16 unk8;
} Actor17C;
2023-04-17 01:46:02 +00:00
typedef struct actor_collision ActorCollision;
typedef struct actor Actor;
2023-04-07 09:49:37 +00:00
typedef struct {
2023-04-17 01:46:02 +00:00
Actor *unk0[4]; // Used
2023-04-07 09:49:37 +00:00
u8 unk10; // Used, index into unk0
s8 unk11;
s8 unk12;
s8 unk13;
} Actor114;
2023-02-23 05:32:14 +00:00
// 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
2023-04-12 04:57:33 +00:00
u8 unk8E; // Used
u8 unk8F;
u8 unk90;
u8 unk91; // Used
u8 unk92;
u8 unk93;
2023-02-23 05:32:14 +00:00
f32 unk94; // Used
f32 unk98;
f32 unk9C; // Used
f32 unkA0; // Used
f32 unkA4; // Used
f32 unkA8; // Used
2023-04-08 10:25:26 +00:00
union {
s32 unkAC; // Used
f32 unkAC_f32; // Used
}; // TODO: Deconflict
2023-02-23 05:32:14 +00:00
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
2023-03-12 17:20:29 +00:00
f32 unkE0; // Used
f32 unkE4; // Used
2023-03-01 17:02:30 +00:00
u8 unkE8; // Used
u8 unkE9;
2023-03-12 17:20:29 +00:00
s16 unkEA; // Used
s16 unkEC;
2023-02-23 05:32:14 +00:00
u8 unkEE;
u8 unkEF; // Used
2023-03-01 17:02:30 +00:00
union { // TODO: No idea what's going on here, both are used
float unkF0_f32;
u8 unkF0;
2023-03-12 17:20:29 +00:00
u8 unkF0_u8[4];
};
union { // TODO: No idea what's going on here, both are used
float unkF4_f32;
u8 unkF4;
u8 unkF4_u8[4];
};
u8 unkF8; // Used
u8 unkF9;
u8 unkFA;
u8 unkFB;
union { // TODO: Deconflict
u8 unkFC; // Used
s32 unkFC_s32; // Used
2023-03-01 17:02:30 +00:00
};
2023-02-23 05:32:14 +00:00
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;
2023-04-07 09:49:37 +00:00
s16 unk11E; // Used
2023-02-23 05:32:14 +00:00
s32 unk120;
f32 unk124; // Used
s32 unk128;
s32 unk12C;
2023-03-12 17:20:29 +00:00
Actor *unk130;
2023-02-23 05:32:14 +00:00
s32 unk134;
s32 unk138;
s32 unk13C;
s32 unk140;
s32 unk144;
s32 unk148;
2023-03-12 17:20:29 +00:00
f32 unk14C; // Used
f32 unk150; // Used
s16 unk154; // Used
s16 unk156;
Actor *unk158;
2023-02-23 05:32:14 +00:00
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?
2023-04-19 13:03:58 +00:00
Actor *unk1B0; // Used
2023-02-23 05:32:14 +00:00
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
2023-04-08 10:25:26 +00:00
u8 unk240; // Used
u8 unk241;
2023-02-23 05:32:14 +00:00
u16 unk242; // Used
2023-04-08 10:25:26 +00:00
s8 unk244;
u8 unk245; // Used
2023-02-23 05:32:14 +00:00
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?
2023-04-15 14:43:24 +00:00
s16 unkF0;
2023-02-23 05:32:14 +00:00
s16 unkF2;
s16 unkF4;
s16 unkF6;
s16 unkF8;
2023-03-12 17:20:29 +00:00
s16 unkFA; // Used
2023-02-23 05:32:14 +00:00
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;
2023-04-07 09:49:37 +00:00
Actor114 *unk114;
2023-02-23 05:32:14 +00:00
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;
2023-04-15 14:43:24 +00:00
A178_806A18A8 *a178_806A18A8;
2023-02-23 05:32:14 +00:00
};
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;
2023-04-17 07:38:50 +00:00
union {
u8 unkA_u8[2];
u16 unkA_u16;
s16 unkA_s16;
};
2023-02-23 05:32:14 +00:00
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;
2023-04-12 10:47:07 +00:00
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
2023-02-23 05:32:14 +00:00
Competitor player[2];
s32 player_index;
2023-04-12 10:47:07 +00:00
s32 unk348;
s32 unk34C;
2023-04-15 14:43:24 +00:00
s32 unk350;
s32 unk354;
s32 unk358;
s32 unk35C;
s32 unk360;
s32 unk364;
s32 unk368;
s32 unk36C; // Used
s32 unk370;
s32 unk374; // Used
u8 pad0[0x78C - 0x378];
2023-04-12 10:47:07 +00:00
s32 unk78C;
s32 unk790;
s32 unk794;
u8 unk798;
u8 unk799;
2023-04-15 14:43:24 +00:00
u16 unk79A;
2023-02-23 05:32:14 +00:00
} JetpacPlayerStruct;
typedef struct ActorSpawner ActorSpawner;
struct ActorSpawner {
2023-04-07 09:49:37 +00:00
s16 actor_type; // At 0x0
2023-02-23 05:32:14 +00:00
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;
2023-04-07 09:49:37 +00:00
f32 unk20; // At 0x20, Used
u8 pad24[0x32 - 0x24];
2023-02-23 05:32:14 +00:00
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;
2023-03-10 15:17:25 +00:00
s16 unkA; // Used: X Position
2023-02-23 05:32:14 +00:00
s16 unkC; // Used
2023-03-10 15:17:25 +00:00
s16 unkE; // Used: Z Position
s16 unk10; // Used
s16 unk12;
s16 unk14; // Used
s16 unk16;
2023-02-23 05:32:14 +00:00
u16 unk18;
2023-03-10 15:17:25 +00:00
u16 unk1A; // Used
u16 unk1C; // Used
2023-02-23 05:32:14 +00:00
u8 unk1E;
u8 unk1F;
u8 unk20;
u8 unk21;
u8 unk22;
u8 unk23;
u8 unk24;
u8 unk25;
2023-03-29 13:37:17 +00:00
u16 unk26;
2023-02-23 05:32:14 +00:00
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;
2023-04-19 13:03:58 +00:00
// TODO: Which struct is this?
typedef struct {
s32 unk0[21];
s8 unk54; // Used
s8 unk55;
s8 unk56;
s8 unk57;
s32 unk58; // Used
s32 unk5C;
} Struct8064199C_arg0;
typedef struct {
u8 pad0[0x14];
f32 unk14;
u8 pad1[0x31];
u8 unk49;
} GlobalASMStruct49;
2023-02-23 05:32:14 +00:00
#endif