#ifndef STRUCTS_H #define STRUCTS_H #include #include "model.h" #include "core2/vla.h" #include "enums.h" #include "bool.h" #define MERGE(a, b) a ## b #define UNK_TYPE(t) t typedef struct{ f32 x; f32 y; f32 z; } vec3f; #define TUPLE(t, n) union{\ struct{ t n##_x; t n##_y; t n##_z; };\ struct{ t n##_pitch; t n##_yaw; t n##_roll; };\ t n[3];\ } #define PAIR(t, n) union{\ struct{ t n##_first; t n##_second;};\ struct{ t n##_min; t n##_max;};\ struct{ t n##_x; t n##_y;};\ t n[2];\ } #define TUPLE_PAIR(t, n) union{\ struct{ TUPLE(t, n##_min); TUPLE(t, n##_max);};\ t n[2][3];\ } #define KEY_VALUE_PAIR(T1, T2) struct { T1 key; T2 value; } typedef struct freelist_s{ s16 elem_size; s16 elem_cnt; u8 unk4[]; }FLA; #define FREE_LIST(T) struct freelist_s //^defined to keep element type with sla typedef struct { f32 m[4][4]; } MtxF; typedef struct bk_sprite_s{ s16 frameCnt; s16 type; s16 unk4; s16 unk6; s16 unk8; s16 unkA; struct{ u32 bit31 : 4; u32 bit27 : 3; u32 bit24 : 2; u32 bit22 : 2; u32 pad_bit20 : 21; }unkC; s32 offsets[]; } BKSprite; typedef struct{ Gfx *gfx; //gfx_offset Vtx *vtx; //vtx_offset }BKSpriteFrameDisplayData; typedef struct{ BKSprite *sprite; BKSpriteFrameDisplayData frame[]; }BKSpriteDisplayData; typedef struct bk_sprite_frame_s{ s16 unk0; s16 unk2; s16 w; s16 h; s16 chunkCnt; s16 unkA; s16 unkC; s16 unkE; s16 unk10; s16 unk12; } BKSpriteFrame; typedef struct bk_sprite_texture_block_s{ s16 x; s16 y; s16 w; s16 h; } BKSpriteTextureBlock; typedef struct model_cache_s{ BKModelBin * modelPtr; BKSprite * unk4; BKSpriteDisplayData *unk8; u32 animated_texture_cache_id; u32 unk10; } ModelCache; typedef struct portrait_voice_s{ u16 sfxIndex; u8 pad2[2]; f32 duration; } PortraitVoice; typedef struct portrait_info_s{ u16 assetIndx; u8 pad2[2]; PortraitVoice voiceInfo[5]; } PortraitInfo; typedef struct struct_0_s{ //floor void * model; BKCollisionTri unk4; BKCollisionTri unk10; f32 unk1C[3]; f32 unk28[3]; f32 normX; f32 normY; f32 normZ; f32 posX; //40 f32 posY; //44 f32 posZ; //48 union{ struct{ u32 unk4C_0:32; }; u32 unk4C; }; s16 unk50; s16 unk52; u32 unk54; u8 unk58; u8 unk59; u8 unk5A; u8 unk5B; u8 unk5C; u8 unk5D; u8 unk5E; u8 unk5F; } struct0; //geo(used for floor) typedef struct struct_2_s{ f32 duration; u8 argCount; u8 activationFrameDelay; s32 arg0; s32 arg1; s32 arg2; void *funcPtr; } AnSeqElement; typedef struct struct_3_s{ u32 unk0; f32 unk4[3]; f32 unk10[3]; u8 unk1C; u8 pad1D[0x3]; vector(struct struct_4_s) *unk20; s32 unk24; s32 unk28; void *unk2C; f32 unk30; u8 unk34; u8 pad35[0x3]; f32 unk38; f32 unk3C; f32 unk40[0x4]; } struct3s; typedef struct struct_4_s{ f32 unk0[3]; f32 unkC[3]; u8 unk18; u8 pad19[3]; } struct4s; typedef struct struct_5_s{ BKModelBin *unk0; f32 unk4[3]; f32 unk10[3]; f32 unk1C[3]; f32 unk28[3]; u8 unk34; u8 pad35[0x3]; }struct5s; typedef struct struct_6_s{ f32 unk0; f32 unk4; f32 unk8; f32 unkC; f32 unk10; f32 unk14; u32 unk18; vector(struct5s) *unk1C; s16 unk20; u8 unk22; u8 pad23[1]; void *unk24[4]; u8 unk34; u8 pad35[0x3]; f32 unk38; }struct6s; typedef struct struct_7_s{ s32 unk0; s32 unk4; f32 unk8; f32 unkC; f32 unk10; s32 unk14; s32 unk18; f32 unk1C; }struct7s; typedef struct struct_8_s{ s32 unk0; s32 unk4; f32 unk8; f32 unkC; f32 unk10; s32 unk14; s32 unk18; f32 unk1C; //first 0x20 should be struct7s u32 unk20; //item_id s32 unk24; //asset_id u32 unk28; s32 unk2C; f32 unk30; f32 unk34; f32 unk38; //added to x string print position (position?) f32 unk3C; //added to y string print position (position?) f32 unk40; //scale??? f32 unk44; //added to x string print position (sprite w) f32 unk48; //added to y string print position (sprite h) f32 unk4C; u32 unk50; //asset_ptr (indx in unk24) s8 string_54[0xC]; //value string f32 unk60; }struct8s; typedef struct struct_11_s{ f32 unk0; f32 unk4; s32 unk8; s32 unkC; s16 track_id; //trackId s16 unk12; u8 unk14; u8 unk15; u8 pad16[0x2]; FREE_LIST(struct12s) *unk18; s32 unk1C[0xE]; } CoMusic; typedef struct struct_12_s{ s32 unk0; s32 unk1; } struct12s; typedef struct struct_13_s{ s32 cmd; u8* str; }struct13s; typedef struct struct_14_s{ s16 unk0; s16 unk2; TUPLE(f32, unk4); struct actorMarker_s *unk10; s32 unk14; void (*unk18)(struct actorMarker_s *, s32, s32); void (*unk1C)(struct actorMarker_s *, s32, s32); s32 unk20; }struct14s; typedef struct struct_15_s{ u8 unk0_7:2; u8 unk0_5:2; u8 pad0_3:4; }struct15s; typedef struct struct_16_s{ s32 unk0; s32 unk4; s32 unk8; s32 unkC; }struct16s; typedef struct struct_1B_s{ s16 map; s16 exit; }struct1Bs; typedef struct struct_1C_1_s{ s16 level_id; s16 x; //0x2 u8 *string; //0x4 }struct1Cs_1; typedef struct struct_21_s{ s32 unk0; void * unk1; }struct21s; //particle_ctrl typedef struct particle_emitter{ u32 pad0_31:8; u32 doneSpawning_0_23:7; //doneSpawning u32 unk0_16:1; u32 assetId_0_15:14; //uid u32 dead:1; u32 auto_free:1; f32 unk4[3]; f32 fade_in; //fade_in_end f32 fade_out; //fade_out_start u32 draw_mode; BKSprite *sprite_1C; //sprite_ptr BKModelBin *model_20; //model_ptr f32 particleSpawnTimer_24; //particleSpawnTimer? f32 postion_28[3]; //position BKSpriteDisplayData *unk34; f32 spawnIntervalTimer_38; //spawnIntervalTimer s32 rgb[3]; u8 sphericalParticleVelocity_48; //sphericalParticalVelocity u8 alpha; u8 pad4A[0x2]; TUPLE_PAIR(f32, particleAccerationRange_4C); s16 unk64; s16 sfx_id; f32 unk68; f32 unk6C; f32 unk70; f32 unk74; f32 unk78; s32 unk7C; void (*particleCallback_80)(struct particle_emitter *, f32 [3]); //particleCallback PAIR(s32, particleStartingFrameRange_84); PAIR(f32, particleFramerateRange_8C); TUPLE_PAIR(f32, particleSpawnPositionRange_94); PAIR(f32, particleStartingScaleRange_AC); PAIR(f32, particleFinalScaleRange_B4); f32 unkBC[3]; f32 unkC8[3]; PAIR(f32, spawnIntervalRange_D4); f32 particleLifeTimeRange[2]; union { TUPLE_PAIR(f32, cartisian); struct{ PAIR(f32, yaw); PAIR(f32, pitch); PAIR(f32, radius); }spherical; } particleVelocityRange_E4; f32 unkFC; s32 unk100; s16 unk104; u8 pad106[0x2]; f32 unk108; f32 unk10C[3]; f32 unk118[3]; struct particle *pList_start_124; //start_ptr? struct particle *pList_end_128; //end_ptr struct particle *pList_capacity_12C; //capacity_end_ptr; } ParticleEmitter; typedef struct particle_scale_and_lifetime_ranges_s{ f32 unk0[2]; //particle_starting_scale_range f32 unk8[2]; //particle_starting_scale_range f32 unk10[2]; //particle_spawn_interval_range f32 unk18[2]; //particle_lifetime_range f32 unk20; //particle_fade_in f32 unk24; //particle_fade_in } ParticleScaleAndLifetimeRanges; typedef struct struct_32_s{ f32 min[3]; f32 max[3]; } ParticleSettingsVelocity; typedef struct struct_33_s{ f32 min[3]; f32 max[3]; } ParticleSettingsAcceleration; typedef struct struct_34_s{ f32 min[3]; f32 max[3]; } ParticleSettingsSpawnPosition; typedef struct struct_40_s{ ParticleScaleAndLifetimeRanges scale_and_lifetime; f32 drawmode; f32 count; } ParticleSettingsScaleAndLifetimeDrawModeEmitCount; typedef struct struct_41_s{ ParticleSettingsVelocity velocity; ParticleSettingsAcceleration acceleration; } ParticleSettingsVelocityAcceleration; typedef struct struct_42_s{ ParticleSettingsVelocity velocity; ParticleSettingsSpawnPosition spawn_position; } ParticleSettingsVelocityPosition; typedef struct struct_43_s{ ParticleSettingsVelocity velocity; ParticleSettingsAcceleration acceleration; ParticleSettingsSpawnPosition spawn_position; } ParticleSettingsVelocityAccelerationPosition; typedef struct { u32 unk0_31:11; u32 unk0_20:10; u32 unk0_10:11; }struct44s; typedef struct { struct struct_81_s *unk0; s32 unk4; }struct46s; typedef struct{ f32 unk0[3]; f32 unkC[3]; u8 unk18; u8 pad19[3]; struct struct_4D_s *unk1C; }struct4Cs; typedef struct struct_4D_s{ f32 unk0[3]; f32 unkC[3]; }struct4Ds; typedef struct{ u8 unk0; // sfxsource index u8 pad1[0x3]; f32 unk4; f32 unk8; f32 unkC; f32 unk10; f32 unk14; f32 unk18; f32 unk1C; f32 unk20; f32 unk24; f32 unk28; f32 unk2C; f32 unk30; f32 unk34; s16 unk38; s16 unk3A; u8 unk3C; u8 unk3D; u8 unk3E; u8 unk3F; }struct4Es; typedef struct{ u8 unk0; u8 unk1; f32 unk4[3]; }struct50s; typedef struct{ s16 unk0; u8 pad2[4]; s16 unk6; u8 pad8[4]; }struct51s; typedef struct{ s32 unk0; u8 pad4[8]; }struct52s; typedef struct{ s32 unk0; s32 unk4; f32 unk8[0][3]; } struct56s; typedef struct { f32 (*unk0)[3]; f32 (*unk4)[3]; }struct5Bs; typedef struct{ u16 unk0_15 : 4; u16 unk0_11 : 2; u16 unk0_9 : 3; u16 unk0_6 : 2; u16 unk0_4 : 3; u16 unk0_1 : 2; }struct5Cs; typedef struct struct_5d_s{ s32 unk0; f32 unk4[3]; f32 unk10; void (*unk14)(struct struct_5d_s *, s32); void (*unk18)(struct struct_5d_s *, s32); u8 unk1C; u8 unk1D; u8 unk1E; u8 unk1F; }Struct5Ds; typedef struct struct_5e_s{ u8 pad0[0x8]; union{ u32 unk8; struct{ u32 pad8_31 : 4; s32 unk8_27 : 1; u32 pad8_26 : 27; }; }; }Struct5Es; typedef struct { f32 unk0; f32 unk4; u8 unk8; u8 unk9; u8 unkA; //u8 padB; f32 unkC; f32 unk10; f32 unk14; } Struct5Fs; //Struct60s moved to top typedef struct { s16 unk0; // u8 pad2[2]; struct struct_63_s *unk4; }Struct62s; typedef struct struct_63_s{ s16 unk0; // u8 pad2[2]; void (*unk4)(vector(AnSeqElement) **, struct actorMarker_s *); } Struct63s; typedef struct struct_64_s{ struct struct_65_s *unk0; s32 unk4; } Struct64s; typedef struct struct_65_s{ f32 unk0[3]; struct actorMarker_s *unkC; s32 (*unk10)(f32[3], f32, struct actorMarker_s *); s16 unk14[3]; s16 unk1A[3]; u8 unk20; u8 unk21; u8 unk22; u8 unk23; s8 unk24; u8 unk25; u8 unk26; u8 unk27; }Struct65s; typedef void (*Struct68DrawMethod)(void *, struct struct_68_s *, f32[3], f32[3], f32, BKModelBin*, Gfx**, Mtx**, Vtx**); typedef struct struct_68_s{ u8 unk0; // sfxsource index // u8 pad1[0x3]; struct actorMarker_s *unk4; Struct68DrawMethod unk8; BKModelBin *unkC; u8 pad10[0x4]; f32 position[3]; f32 unk20[3]; //rotation f32 unk2C; //scale u8 unk30; u8 unk31; u8 pad32[2]; u8 local[0x80]; } Struct68s; typedef struct { f32 unk0; f32 unk4[3]; f32 unk10[3]; f32 unk1C[3]; f32 unk28[3]; f32 unk34; } Struct6Bs; typedef struct{ BKCollisionTri * (* unk0)(struct actorMarker_s *, f32[3], f32[3], f32[3], s32); BKCollisionTri *(* unk4)(struct actorMarker_s *, f32[3], f32[3], f32, f32[3], s32, u32); BKCollisionTri *(* unk8)(struct actorMarker_s *, f32[3], f32, f32[3], s32); s32 (* unkC)(struct actorMarker_s *, f32[3], f32, f32[3], s32); } Struct6Cs; typedef struct struct_6D_s{ u8 unk0; //sfxsource index // u8 pad1[3]; f32 unk4; f32 unk8; void (*unkC)(struct struct_6D_s *); void (*unk10)(struct struct_6D_s *); s16 unk14[3];//min_vtx s16 unk1A[3];//max_vtx f32 unk20; f32 unk24; u8 unk28; u8 unk29; u8 pad2A[2]; f32 unk2C[3]; f32 unk38[3]; f32 unk44; f32 unk48; s16 unk4C; s16 unk4E; f32 unk50[4]; f32 unk60[4]; f32 unk70; f32 unk74; f32 unk78[3]; f32 unk84; f32 unk88[3]; f32 unk94; f32 unk98; f32 unk9C; }Struct6Ds; typedef struct { f32 unk0; f32 unk4; }Struct6Fs; typedef struct { s32 unk0; f32 unk4; f32 unk8; f32 unkC; }Struct71s; typedef struct { f32 unk0; }Struct72s; typedef struct { s16 d_tc[2]; f32 unk4; f32 unk8; s16 unkC; s16 unkE; s16 dy; //u8 pad12[2]; f32 unk14; f32 unk18; f32 unk1C; }Struct73s; typedef struct { u8 pad0[0x4]; f32 unk4; f32 unk8; f32 unkC; f32 unk10; f32 unk14; u8 unk18[0x8]; f32 unk20; f32 unk24; f32 unk28[2]; }Struct74s; typedef struct { f32 unk0; }Struct75s; typedef struct { s16 alpha; s16 unk2; s32 unk4; s32 unk8; s32 unkC; f32 unk10; f32 unk14; }Struct76s; typedef struct { f32 unk0; f32 unk4; f32 unk8; f32 unkC; f32 unk10; f32 unk14; u8 unk18[0x8]; f32 unk20; f32 unk24; s16 unk28[2]; f32 unk2C; }Struct77s; typedef union { Struct6Ds type_6D; Struct6Fs type_6F; Struct71s type_71; Struct72s type_72; Struct73s type_73; Struct74s type_74; Struct77s type_77; }Struct70s; typedef struct { u8 unk0; // u8 pad1[0x3]; BKModel *unk4; s16 unk8; u8 padA[2]; Struct70s unkC; }Struct6Es; typedef struct { int actor_id; struct actorMarker_s *marker; f32 position[3]; void (*unk14)(struct actor_s *, struct actorMarker_s *); struct actorMarker_s *unk18; }Struct81s; typedef struct { int actor_id; struct actorMarker_s *marker; f32 position[3]; void (*unk14)(struct actor_s *, struct actorMarker_s *); struct actorMarker_s *unk18; }Struct82s; typedef struct { f32 unk0; f32 unk4; f32 unk8[3]; s16 unk14[3]; u8 unk1A; u8 pad1B[1]; }Struct83s; typedef struct{ s16 texture_type; s16 count; s32 offset[]; }Struct84s; typedef struct{ u8 pad0[1]; }struct85s; typedef struct{ f32 unk0[3]; f32 unkC; u32 flags; s16 unk14; // u8 pad16[2]; void *unk18; }struct86s; typedef struct { s32 unk0; //sound state cnt s32 unk4; s32 unk8; //maxSounds ALHeap *unkC; //heap u16 unk10; }Struct87s; #endif