407 lines
9.5 KiB
C
407 lines
9.5 KiB
C
#ifndef PROP_H
|
|
#define PROP_H
|
|
|
|
#include <ultra64.h>
|
|
|
|
#include "structs.h"
|
|
#include "core2/animctrl.h"
|
|
#include "core2/modelRender.h"
|
|
#include "core2/skeletalanim.h"
|
|
|
|
typedef struct sprite_prop_s{
|
|
u32 unk0_31:0xC;
|
|
u32 unk0_19:0x1;
|
|
u32 unk0_18:0x3;
|
|
u32 unk0_15:0x3;
|
|
u32 unk0_12:0x3;
|
|
u32 unk0_9:0x8;
|
|
u32 unk0_1:0x1;
|
|
u32 unk0_0:0x1;
|
|
s16 unk4[3];
|
|
u16 unk8_15: 5;
|
|
u16 unk8_10: 5;
|
|
u16 unk8_5: 1;
|
|
u16 unk8_4: 1;
|
|
u16 unk8_3: 1;
|
|
u16 unk8_2: 1;
|
|
u16 unk8_1:1;
|
|
u16 unk8_0:1;
|
|
} SpriteProp;
|
|
|
|
typedef struct model_prop_s{
|
|
union{
|
|
u16 unk0;
|
|
struct{
|
|
u16 unk0_31:12;
|
|
u16 pad0_19:4;
|
|
};
|
|
};
|
|
u8 unk0_15;
|
|
u8 unk0_7;
|
|
s16 unk4[3];
|
|
u8 unkA;
|
|
u8 padB_7 :2;
|
|
u8 unkB_5 :1;
|
|
u8 unkB_4 :1;
|
|
u8 padB_3 :4;
|
|
} ModelProp;
|
|
|
|
|
|
typedef struct actor_prop_s{
|
|
union {
|
|
struct {
|
|
struct actorMarker_s* marker;
|
|
s16 x;
|
|
s16 y;
|
|
s16 z;
|
|
u16 unk8_15:5;
|
|
u16 unk8_10:5;
|
|
u16 unk8_5:1;
|
|
u16 unk8_4:1;
|
|
u16 unk8_3:1;
|
|
u16 unk8_2:1;
|
|
u16 unk8_1:1;
|
|
u16 unk8_0:1;
|
|
};
|
|
s32 words[3];
|
|
};
|
|
} ActorProp;
|
|
|
|
typedef void(*MarkerCollisionFunc)(struct actorMarker_s *this, struct actorMarker_s *other);
|
|
typedef struct actor_s *(*MarkerDrawFunc)(struct actorMarker_s *, Gfx **, Mtx **, Vtx **);
|
|
typedef void (*ActorUpdateFunc)(struct actor_s *);
|
|
typedef void (*ActorFreeFunc)(struct actor_s *);
|
|
|
|
typedef struct actorMarker_s{
|
|
ActorProp* propPtr;
|
|
struct cude_s* cubePtr;
|
|
MarkerDrawFunc unk8;
|
|
MarkerCollisionFunc unkC; //ow_func
|
|
MarkerCollisionFunc unk10;
|
|
u32 yaw:9;
|
|
u32 unk14_22:1;
|
|
u32 unk14_21:1;
|
|
u32 unk14_20:10; //contains jingo_id for chjinjo
|
|
u32 unk14_10:11; //used in ch/jiggy
|
|
Struct6Cs *unk18;
|
|
MarkerCollisionFunc unk1C; //die_func
|
|
s32 unk20;
|
|
ActorUpdateFunc unk24;
|
|
s32 unk28;
|
|
u32 actrArrayIdx:11; //unk2C
|
|
u32 pitch:9;
|
|
u32 roll:9;
|
|
u32 unk2C_2:1;
|
|
u32 unk2C_1:1;
|
|
u32 collidable:1;
|
|
ActorFreeFunc unk30; //actor free method
|
|
s32 unk34;
|
|
s16 unk38[3];
|
|
u16 pad3E_15:1;
|
|
u16 modelId:13;
|
|
u16 unk3E_1:1;
|
|
u16 unk3E_0:1; //scaled
|
|
u32 unk40_31:4;
|
|
u32 unk40_27:4;
|
|
u32 unk40_23:1;
|
|
u32 unk40_22:1;
|
|
u32 unk40_21:1;
|
|
u32 unk40_20:1;
|
|
u32 unk40_19:1;
|
|
u32 pad40_18:19;
|
|
struct5Bs * unk44;
|
|
BKModel * unk48;
|
|
vector(Struct70s) * unk4C;
|
|
s32 unk50;
|
|
void (*unk54)(struct actorMarker_s *, struct actorMarker_s *, u16*);
|
|
s32 (*unk58)(struct actorMarker_s *, struct actorMarker_s *);
|
|
s32 unk5C;
|
|
} ActorMarker;
|
|
|
|
typedef struct ch_bgs_6730_s{
|
|
u32 unk0;
|
|
u32 unk4;
|
|
s32 unk8;
|
|
s32 unkC;
|
|
} ActorLocal_BGS_6730;
|
|
|
|
typedef struct chtanktupbody_s{
|
|
s32 unk0[4];
|
|
s32 unk10;
|
|
s32 unk14;
|
|
f32 unk18[3];
|
|
}ActorLocal_TanktupBody;
|
|
|
|
|
|
typedef struct actor_anim_info_s{
|
|
u32 index;
|
|
f32 duration;
|
|
} ActorAnimationInfo;
|
|
|
|
typedef struct jinjo_s{
|
|
s32 unk0;
|
|
s32 unk4;
|
|
s32 unk8;
|
|
s32 unkC;
|
|
}ActorLocal_Jinjo;
|
|
|
|
typedef struct ch_sm_4070{
|
|
s32 unk0;
|
|
}ActorLocal_SM_4070;
|
|
|
|
typedef struct actor_s{
|
|
ActorMarker* marker;
|
|
TUPLE(f32,position);
|
|
u32 state:6; /* unk10_31*/
|
|
u32 unk10_25:7;
|
|
u32 unk10_18:6;
|
|
u32 unk10_12:4;
|
|
u32 unk10_8:1;
|
|
u32 unk10_7:1;
|
|
u32 unk10_6:2;
|
|
u32 unk10_4:1;
|
|
u32 unk10_3:2;
|
|
u32 unk10_1:1;
|
|
u32 unk10_0:1;
|
|
AnimCtrl *animctrl;
|
|
ActorAnimationInfo *unk18;
|
|
TUPLE(f32, unk1C);
|
|
f32 unk28; //used in cheggs
|
|
TUPLE(f32, velocity);
|
|
u32 unk38_31:10;
|
|
u32 unk38_21:9;
|
|
u32 unk38_13:9;
|
|
u32 stored_animctrl_playbackType_:3; //animctrlPlaybackType
|
|
u32 unk38_0:1;
|
|
u32 unk3C;
|
|
s32 unk40;
|
|
u32 unk44_31:8;
|
|
u32 modelCacheIndex:10; //modelCacheIndex
|
|
s32 unk44_14:10;
|
|
u32 despawn_flag:1;
|
|
u32 unk44_2:1;
|
|
u32 unk44_1:1;
|
|
u32 unk44_0:1;
|
|
f32 unk48; //used in chlmonkey (chimpy)
|
|
f32 unk4C;
|
|
/* 0x50 */ f32 yaw; //0x50
|
|
f32 unk54; //0x54
|
|
u32 unk58_31: 15;
|
|
u32 stored_animctrl_index: 14; //animctrlAnimIndex;
|
|
u32 unk58_2: 1;
|
|
u32 unk58_1: 1;
|
|
u32 unk58_0: 1;
|
|
f32 unk5C;
|
|
f32 unk60; //0x60
|
|
f32 yaw_ideal; //0x64
|
|
f32 pitch;//0x68
|
|
f32 unk6C;
|
|
f32 unk70;
|
|
f32 unk74;
|
|
u32 unk78_31:9;
|
|
u32 unk78_22:9;
|
|
u32 unk78_13:12; //default_spawn_yaw?
|
|
u32 stored_animctrl_forwards:1; //animCtrlDirection
|
|
u32 stored_animctrl_smoothTransistion:1; //animCtrlSmoothTransition
|
|
union
|
|
{ //DON'T DO THIS JUST DEFINE STATICLY IN ch/ FILE AND CAST FROM &Actor->local
|
|
ActorLocal_BGS_6730 bgs_6730;
|
|
ActorLocal_TanktupBody tanktup;
|
|
ActorLocal_Jinjo jinjo;
|
|
ActorLocal_SM_4070 sm_4070;
|
|
u8 local[1];
|
|
struct{
|
|
u8 unk7C[0x40];
|
|
u8 unkBC[0x30];
|
|
};
|
|
|
|
};
|
|
//u8 padAC[0x44];
|
|
f32 unkEC; //animCtrl???
|
|
f32 stored_animctrl_duration; //animCtrlDuration
|
|
u32 unkF4_31:1;
|
|
u32 unkF4_30:1;
|
|
u32 unkF4_29:1;
|
|
u32 unkF4_28:1; //saved marker->propPtr->unk8_3
|
|
u32 unkF4_27:1; //saved marker->propPtr->unk8_2
|
|
u32 unkF4_26:1; //saved marker->unk2C_1
|
|
u32 stored_marker_collidable:1; //saved marker->collidable
|
|
u32 unkF4_24:2;
|
|
u32 unkF4_22:1;
|
|
u32 initialized:1; //unkF4_21;
|
|
u32 unkF4_20:12;
|
|
u32 unkF4_8:9;
|
|
f32 stored_animctrl_subrangeMin; //animCtrl_SubRangeStart
|
|
f32 stored_animctrl_subrangeMax; //animCtrl_SubRangeEnd
|
|
ActorMarker *unk100;
|
|
ActorMarker *unk104;
|
|
Struct62s *unk108;
|
|
// void ( *unk108)(struct actorMarker_s *, s32); //saved from marker->unkC
|
|
s32 unk10C; //saved marker->unk10
|
|
f32 roll;//110
|
|
f32 sound_timer;
|
|
TUPLE(f32, spawn_position); //0x118
|
|
u32 unk124_31:12;
|
|
u32 alpha_124_19:8;
|
|
u32 unk124_11:2; //blend_mode?
|
|
u32 depth_mode:2; //render_mode (passed to modelRender_setDepthMode())
|
|
u32 unk124_7:1;
|
|
u32 unk124_6:1;
|
|
u32 unk124_5:2;
|
|
u32 unk124_3:3;
|
|
u32 unk124_0:1; //read in bsbbuster func
|
|
f32 scale;
|
|
/* 0x12C */ struct actor_info_s *actor_info;
|
|
void (* unk130)(struct actor_s *);
|
|
vector(struct2s) **unk134; //vector<struct2s> //saved marker->unk1C
|
|
u32 unk138_31:1;
|
|
u32 unk138_30:1;
|
|
u32 unk138_29:1;
|
|
u32 unk138_28:1;
|
|
u32 unk138_27:2;
|
|
u32 unk138_25:1;
|
|
u32 unk138_24:1;
|
|
u32 unk138_23:1;
|
|
u32 unk138_22:1;
|
|
u32 unk138_21:1;
|
|
u32 unk138_20:1;
|
|
u32 unk138_19:10; //saved maker->unk14_20
|
|
u32 unk138_9:1;
|
|
u32 unk138_8:1;
|
|
u32 unk138_7:4;
|
|
u32 unk138_3:4;
|
|
void (*unk13C)(struct actorMarker_s *);//saved marker->unk30
|
|
f32 unk140;
|
|
f32 unk144;
|
|
SkeletalAnimation *unk148;
|
|
void *unk14C[2];
|
|
// void *unk150;
|
|
u32 unk154;
|
|
ParticleEmitter *unk158[2];
|
|
void *unk160; //saved marker->unk54
|
|
u8 unk164[0x2];
|
|
u8 unk166;
|
|
s8 pad167[0x1];
|
|
s32 unk168; //saved marker->unk58
|
|
u32 unk16C_31:27; //saved s1->marker->unk5C
|
|
u32 unk16C_4:1;
|
|
u32 unk16C_3:1;
|
|
u32 unk16C_2:1;
|
|
u32 unk16C_1:1;
|
|
u32 unk16C_0:1;
|
|
f32 unk170;
|
|
f32 unk174;
|
|
f32 unk178;
|
|
u32 unk17C_31:1;
|
|
u32 pad17C_30:31;
|
|
} Actor;
|
|
|
|
typedef struct actor_info_s{
|
|
s16 markerId;
|
|
s16 actorId;
|
|
s16 modelId;
|
|
s16 startAnimation;
|
|
ActorAnimationInfo* animations;
|
|
void (* update_func)(Actor *);
|
|
void (* unk10)(Actor *);
|
|
Actor* (* draw_func)(ActorMarker *, Gfx **, Mtx **, Vtx **);
|
|
u16 unk18;
|
|
u16 draw_distance;
|
|
f32 shadow_scale;
|
|
u16 unk20;
|
|
//u8 pad22[2];
|
|
} ActorInfo;
|
|
|
|
typedef struct actor_spawn_s{
|
|
ActorInfo *infoPtr;
|
|
Actor *(*spawnFunc)(s32[3], s32, ActorInfo*, u32);
|
|
s32 unk8;
|
|
} ActorSpawn;
|
|
|
|
typedef union prop_s
|
|
{
|
|
ActorProp actorProp;
|
|
SpriteProp spriteProp;
|
|
ModelProp modelProp;
|
|
struct{
|
|
u8 pad0[4];
|
|
s16 unk4[3];
|
|
// s16 unk6;
|
|
s16 pad8_15: 10;
|
|
u16 unk8_5: 1;
|
|
u16 unk8_4: 1;
|
|
u16 unk8_3: 1;
|
|
u16 unk8_2: 1;
|
|
u16 unk8_1: 1;
|
|
u16 markerFlag: 1;
|
|
};
|
|
} Prop;
|
|
|
|
typedef struct {
|
|
s16 x;
|
|
s16 y;
|
|
s16 z;
|
|
struct {
|
|
u16 radius: 9; //selector_value //volume??? diameter
|
|
u16 bit6: 6; //category
|
|
u16 bit0: 1;
|
|
}unk6;
|
|
u16 unk8; //actor_id?
|
|
u8 unkA; //marker_id
|
|
struct {
|
|
u8 pad_bit7: 2;
|
|
u8 bit5: 1;
|
|
u8 bit4: 1;
|
|
u8 pad_bit3: 3;
|
|
u8 bit0: 1;
|
|
}unkB;
|
|
// u8 padB[1];
|
|
u32 unkC_31:9; //yaw???
|
|
u32 unkC_22:23;
|
|
u32 unk10_31 : 12;
|
|
u32 unk10_19 : 12;
|
|
u32 unk10_7 : 1;
|
|
u32 unk10_6 : 1;
|
|
u32 pad10_5 : 4;
|
|
u32 unk10_0 : 2;
|
|
} NodeProp;
|
|
|
|
typedef struct {
|
|
u8 pad0[0x4];
|
|
u32 pad4_31:14;
|
|
u32 unk4_17:2;
|
|
u32 pad4_15:8;
|
|
u32 pad4_7:7;
|
|
u32 unk4_0:1;
|
|
u8 pad8[0x4];
|
|
u32 padC_31:31;
|
|
u32 unkC_0:1;
|
|
u32 pad10_31:27;
|
|
u32 unk10_4:4;
|
|
u32 pad10_0:1;
|
|
} OtherNode; //can be inplace of NodeProp (see cube_fromFile)
|
|
|
|
typedef struct cude_s{
|
|
s32 x:5;
|
|
s32 y:5;
|
|
s32 z:5;
|
|
u32 prop1Cnt:6;
|
|
u32 prop2Cnt:6;
|
|
u32 unk0_4:5; //node_prop_count
|
|
NodeProp *prop1Ptr;
|
|
Prop *prop2Ptr;
|
|
}Cube;
|
|
|
|
typedef struct actor_array{
|
|
s32 cnt;
|
|
s32 max_cnt;
|
|
Actor data[]; //variable size array
|
|
}ActorArray;
|
|
|
|
typedef struct {
|
|
u32 cnt;
|
|
Actor *actor_save_state[];
|
|
}ActorListSaveState;
|
|
|
|
#endif
|