/* THIS FILE IS WORK IN PROGRESS 1.0 addresses CBaseModelInfo (vtbl 0x5FAB58) CClumpModelInfo (vtbl 0x5FE020, size 0x34) CMloModelInfo (vtbl 0x5FDF74, size 0x40) CPedModelInfo (vtbl 0x5FDFFC, size 0x48 PC, 0x54 mobile) CVehicleModelInfo (vtbl 0x5FDFD8, size 0x1F8) CXtraCompsModelInfo (vtbl 0x5FE044, size 0x38) CSimpleModelInfo (vtbl 0x5FDF98, size 0x4C) CTimeModelInfo (vtbl 0x5FDFB8, size 0x58) */ typedef void unknown; class CBaseModelInfo { char name[24]; CColModel *colModel; void *twodEffects; int16 id; uint16 refCount; int16 txdSlot; uint8 type; // ModelInfo type uint8 num2dEffects; bool freeCol; virtual ~CBaseModelInfo(); virtual unknown Shutdown(void); virtual unknown DeleteRwObject(void) = 0; virtual unknown CreateInstance(void) = 0; virtual unknown CreateInstance(RwMatrixTag *) = 0; virtual unknown GetRwObject(void) = 0; }; // type 4 class CClumpModelInfo : CBaseModelInfo { RpClump *clump; ~CClumpModelInfo(); unknown DeleteRwObject(void); unknown CreateInstance(void); unknown CreateInstance(RwMatrixTag *); unknown GetRwObject(void); virtual unknown SetClump(RpClump *); }; // type 2 class CMloModelInfo : CClumpModelInfo { float drawDist; int32 firstInst; int32 lastInst; ~CMloModelInfo(); }; // type 6 class CPedModelInfo : CClumpModelInfo { int32 animGroup; int32 pedType; int32 pedStats; int32 carsCanDrive; CColModel *hitColModel; #ifdef SKINNED RpAtomic *head; RpAtomic *lhand; RpAtomic *rhand; #endif ~CPedModelInfo(); unknown DeleteRwObject(void); unknown SetClump(RpClump *); }; // type 5 class CVehicleModelInfo : CClumpModelInfo { uchar lastPrimaryColor; uchar lastSecondaryColor; char gameName[32]; // type: 0 - car; 1 - boat; 2 - train; 3 - heli; 4 - plane; 5 - bike (unused) int vehicleType; int extraModelIndex; float wheelScale; int numDoors; int handlingId; // class: 0 - poorfamily; 1 - richfamily; 2 - executive; 3 - worker; 4 - special; 5 - big; 6 - taxi int vehicleClass; int lvl; RwV3d dummyPos[10]; int compRules; float bikeValue; RpMaterial **primaryMaterials[26]; RpMaterial **secondaryMaterials[26]; uchar primaryColorIds[8]; uchar secondaryColorIds[8]; uchar numColors; uchar unk; // unused? uchar currentPrimaryColor; uchar currentSecondaryColor; RwTexture *envMap; RpAtomic *comps[6]; int numComps; ~CVehicleModelInfo(); unknown DeleteRwObject(void); unknown CreateInstance(void); unknown SetClump(RpClump *); }; // type 7 class CXtraCompsModelInfo : CClumpModelInfo { int32 unk; ~CXtraCompsModelInfo(); unknown Shutdown(void); unknown CreateInstance(void); unknown SetClump(RpClump *); }; // type 1 class CSimpleModelInfo : CBaseModelInfo { RpAtomic *atomics[3]; float lodDistances[3]; uint8 numAtomics; #ifdef PS2 uint8 maxDist; uint8 flags; uint8 alpha; #else uint8 alpha; uint16 flags; #endif ~CSimpleModelInfo(); unknown DeleteRwObject(void); unknown CreateInstance(void); unknown CreateInstance(RwMatrixTag *); unknown GetRwObject(void); }; // type 3 class CTimeModelInfo : CSimpleModelInfo { int32 timeOn; int32 timeOff; int32 otherTimeModelID; ~CTimeModelInfo(); };