SBSPSS/tools/Data/include/dstructs.h

346 lines
6.9 KiB
C
Raw Normal View History

2000-12-12 21:56:51 +01:00
/***********************/
/*** Data Structures ***/
/***********************/
#ifndef __DATA_STRUCTS_HEADER__
#define __DATA_STRUCTS_HEADER__
2000-12-06 23:21:55 +01:00
2001-02-20 16:56:16 +01:00
//***************************************************************************
// Taken from Map editor layerdef.h
enum PSX_COLLSION_ENUM
{
COLLISION_TYPE_NORMAL =0,
COLLISION_TYPE_DAMAGE =1,
COLLISION_TYPE_SLIPPERY =2,
COLLISION_TYPE_ELECTRIC =3,
COLLISION_TYPE_STICKY =4,
COLLISION_TYPE_WATER =5,
COLLISION_TYPE_FLAG_SHIFT =5,
COLLISION_TYPE_FLAG_NORMAL =COLLISION_TYPE_NORMAL << COLLISION_TYPE_FLAG_SHIFT,
COLLISION_TYPE_FLAG_DAMAGE =COLLISION_TYPE_DAMAGE << COLLISION_TYPE_FLAG_SHIFT,
COLLISION_TYPE_FLAG_SLIPPERY =COLLISION_TYPE_SLIPPERY << COLLISION_TYPE_FLAG_SHIFT,
COLLISION_TYPE_FLAG_ELECTRIC =COLLISION_TYPE_ELECTRIC << COLLISION_TYPE_FLAG_SHIFT,
COLLISION_TYPE_FLAG_STICKY =COLLISION_TYPE_STICKY << COLLISION_TYPE_FLAG_SHIFT,
COLLISION_TYPE_FLAG_WATER =COLLISION_TYPE_WATER << COLLISION_TYPE_FLAG_SHIFT,
2001-02-20 18:21:46 +01:00
COLLISION_TYPE_MASK = (0xff << COLLISION_TYPE_FLAG_SHIFT)&0xff,
COLLISION_MASK = (0xff-COLLISION_TYPE_MASK)
2001-02-20 16:56:16 +01:00
};
enum PSX_DATA_ENUM
{
LAYER_SHADE_RGB_MAX=4,
};
2000-12-06 23:21:55 +01:00
//***************************************************************************
// biped bone IDs
/*
enum BONE_NAME
{
BIP0,
BIP01_PELVI,
BIP01_SPIN,
BIP01_SPINE,
BIP01_NEC,
BIP01_HEA,
BIP01_L_CLAVICL,
BIP01_L_UPPERAR,
BIP01_L_FOREAR,
BIP01_L_HAN,
BIP01_R_CLAVICL,
BIP01_R_UPPERAR,
BIP01_R_FOREAR,
BIP01_R_HAN,
BIP01_L_THIG,
BIP01_L_CAL,
BIP01_L_FOO,
BIP01_L_TOE,
BIP01_R_THIG,
BIP01_R_CAL,
BIP01_R_FOO,
BIP01_R_TOE0,
MAX_BONE
};
*/
2001-01-12 23:37:21 +01:00
//***************************************************************************
//*** Base Types ************************************************************
2000-12-06 23:21:55 +01:00
//***************************************************************************
#ifndef sQuat
struct sQuat
{
s16 vx,vy,vz,vw;
2001-01-12 23:37:21 +01:00
#ifdef WIN32
bool operator==(sQuat const &v1) {return((vx==v1.vx) && (vy==v1.vy) && (vz==v1.vz) && (vw==v1.vw));}
#endif
2000-12-06 23:21:55 +01:00
};
#endif
struct sShortXYZ
{
s16 vx,vy,vz;
};
//***************************************************************************
struct sVtx
{
2001-01-08 22:33:31 +01:00
s16 vx, vy, vz, pad;
2000-12-12 21:56:51 +01:00
#ifdef WIN32
bool operator==(sVtx const &v1) {return((vx==v1.vx) && (vy==v1.vy) && (vz==v1.vz));}
#endif
2000-12-06 23:21:55 +01:00
};
#define NormalScale 4096
struct sNormal
{
s16 nX,nY,nZ,pD;
};
2001-01-12 23:37:21 +01:00
//***************************************************************************
2000-12-06 23:21:55 +01:00
struct sBBox
{
s16 XMin,YMin,ZMin;
s16 XMax,YMax,ZMax;
};
//***************************************************************************
2001-01-03 23:15:22 +01:00
2000-12-06 23:21:55 +01:00
struct sMat
{
u16 TPage;
u16 Clut;
// s32 DblFlag;
};
2001-01-30 18:25:20 +01:00
//***************************************************************************
struct sTexInfo // Basically same as PSX RECT
{
s16 x, y, w, h;
};
2001-01-12 23:37:21 +01:00
//***************************************************************************
struct sWeight
{
s16 vx,vy,vz,VtxNo; // 8
};
//***************************************************************************
struct sBone
2001-01-30 18:25:20 +01:00
{
sVtx BoneSize; // 8
s16 Parent; // 2
2001-01-30 23:23:27 +01:00
s16 TriStart; // 2
s16 TriCount; // 2
2001-01-30 18:25:20 +01:00
s16 VtxCount; // 2
2001-01-30 23:23:27 +01:00
}; // 16
2001-01-30 18:25:20 +01:00
/*
struct sBone
2001-01-12 23:37:21 +01:00
{
sVtx BoneSize; // 8
s16 Parent,Idx; // 4
s32 WeightCount; // 4
sWeight *WeightList; // 4
}; // 20
2001-01-30 18:25:20 +01:00
*/
2001-01-12 23:37:21 +01:00
//***************************************************************************
//*** Poly Types ************************************************************
2000-12-06 23:21:55 +01:00
//***************************************************************************
struct sTri
{
2000-12-14 17:38:34 +01:00
u16 P0; // 2
u16 P1; // 2
2000-12-06 23:21:55 +01:00
u8 uv0[2]; // 2
2000-12-14 17:38:34 +01:00
u16 Clut; // 2
2000-12-06 23:21:55 +01:00
u8 uv1[2]; // 2
2001-01-30 18:25:20 +01:00
u16 TPage; // 2 (Or material)
2000-12-06 23:21:55 +01:00
u8 uv2[2]; // 2
2000-12-14 17:38:34 +01:00
u16 P2; // 2
2000-12-12 21:56:51 +01:00
}; // 16
2000-12-06 23:21:55 +01:00
//---------------------------------------------------------------------------
struct sQuad
{
2001-01-04 22:53:14 +01:00
u16 P0; // 2
u16 P1; // 2
u16 P2; // 2
u16 P3; // 2
2000-12-06 23:21:55 +01:00
u8 uv0[2]; // 2
2001-01-04 22:53:14 +01:00
u16 Clut; // 2
2000-12-06 23:21:55 +01:00
u8 uv1[2]; // 2
2001-01-30 18:25:20 +01:00
u16 TPage; // 2 (Or material)
2000-12-06 23:21:55 +01:00
u8 uv2[2]; // 2
u8 uv3[2]; // 2
}; // 20
//***************************************************************************
2001-01-12 23:37:21 +01:00
//*** Game Types and Headers ************************************************
2000-12-06 23:21:55 +01:00
//***************************************************************************
2001-01-08 22:33:31 +01:00
// Maps
2001-03-08 00:20:09 +01:00
/*
2001-01-03 23:15:22 +01:00
enum TILE3D_FLAGS
{
TILE3D_FLAGS_F=0,
TILE3D_FLAGS_U,
TILE3D_FLAGS_D,
TILE3D_FLAGS_L,
TILE3D_FLAGS_R,
// TILE3D_FLAGS_B, // Should never have back facing polys
TILE3D_FLAGS_MAX
};
2001-03-08 00:20:09 +01:00
*/
typedef u16 sTileMapElem; // Tile or Tri Start
/*
2000-12-06 23:21:55 +01:00
struct sTileMapElem
{
2001-03-08 00:20:09 +01:00
u16 Elem; // Tile or Tri Start
2001-01-04 22:53:14 +01:00
};
2001-03-08 00:20:09 +01:00
*/
/*
2001-01-04 22:53:14 +01:00
struct sTileMapElem3d : public sTileMapElem
{
2001-01-03 23:15:22 +01:00
u16 Flags;
2000-12-06 23:21:55 +01:00
};
2001-03-08 00:20:09 +01:00
*/
2001-01-04 22:53:14 +01:00
/*
2001-01-03 23:15:22 +01:00
struct sTileTable
2000-12-06 23:21:55 +01:00
{
u16 TriList;
u16 TriCount;
2001-01-03 23:15:22 +01:00
};
2001-01-04 22:53:14 +01:00
*/
2001-01-03 23:15:22 +01:00
struct sTile
{
// 3d Tile
2001-03-08 00:20:09 +01:00
// u16 TriStart; // 2
// u16 TileTable[TILE3D_FLAGS_MAX]; // 10
2000-12-06 23:21:55 +01:00
// 2d Tile
2001-01-04 22:53:14 +01:00
u8 u0,v0; // 2
u16 Clut; // 2
u16 TPage; // 2
u16 Pad; // :o( need this? // 2
2000-12-12 21:56:51 +01:00
#ifdef WIN32
2001-02-06 16:52:58 +01:00
//bool operator==(sTile const &v1) {return(false);}
2000-12-12 21:56:51 +01:00
#endif
2001-01-04 22:53:14 +01:00
}; // 20
2000-12-12 21:56:51 +01:00
//---------------------------------------------------------------------------
// Layers
struct sLayerHdr
{
int Type;
int SubType;
int Width;
int Height;
/*int TileData[W][H];....*/
};
2001-03-08 00:20:09 +01:00
//---------------------------------------------------------------------------
struct sLayer3d
{
u16 TriCount;
u16 QuadCount;
u16 VtxCount;
u16 Pad;
u32 TriList;
u32 QuadList;
u32 VtxList;
};
2001-02-20 16:56:16 +01:00
//---------------------------------------------------------------------------
// Shade Layer
struct sLayerShade
{
u32 Ofs;
u8 RGB[4];
};
struct sLayerShadeHdr
{
u16 Count;
sLayerShade Data[4];
};
2000-12-12 21:56:51 +01:00
//---------------------------------------------------------------------------
// Header
struct sLvlHdr
{
u32 BackLayer;
u32 MidLayer;
u32 ActionLayer;
u32 ForeLayer;
2001-01-24 23:30:24 +01:00
u32 CollisionLayer;
2000-12-12 21:56:51 +01:00
u32 Pad1;
u32 Pad2;
u32 Pad3;
u32 Pad4;
u32 Pad5;
u32 Pad6;
u32 Pad7;
2000-12-06 23:21:55 +01:00
};
2001-02-06 16:52:58 +01:00
//---------------------------------------------------------------------------
// TileBank
2001-03-08 00:20:09 +01:00
/*
2001-02-06 16:52:58 +01:00
struct sTileBankHdr
{
u32 TriList;
u32 QuadList;
u32 VtxList;
u32 TileList;
};
2001-03-08 00:20:09 +01:00
*/
2000-12-06 23:21:55 +01:00
2001-01-08 22:33:31 +01:00
//***************************************************************************
//***************************************************************************
//***************************************************************************
// Actors
2001-03-05 21:18:35 +01:00
typedef u16 AnimIdx;
struct sAnimHdr
{
u16 FrameCount;
u16 Pad;
AnimIdx *Anim;
s32 *Move;
};
2001-02-22 17:00:54 +01:00
struct sActorHdr
2001-01-08 22:33:31 +01:00
{
2001-03-05 21:18:35 +01:00
u16 BoneCount;
u16 TriCount;
u16 QuadCount;
u16 WeightCount;
u16 VtxCount;
u16 AnimCount;
2001-01-30 18:25:20 +01:00
sBone *BoneList;
sTri *TriList;
sQuad *QuadList;
2001-03-05 21:18:35 +01:00
sWeight *WeightList;
2001-01-30 18:25:20 +01:00
sVtx *VtxList;
sTexInfo *TexInfo;
2001-03-05 21:18:35 +01:00
sAnimHdr *AnimList;
sQuat *QuatTable;
2001-01-08 22:33:31 +01:00
};
2000-12-12 21:56:51 +01:00
2001-01-12 23:37:21 +01:00
//***************************************************************************
// Anim
2001-03-05 21:18:35 +01:00
/*
2001-02-22 17:00:54 +01:00
struct sAnimFileHdr
2001-01-12 23:37:21 +01:00
{
u16 BoneCount;
u16 AnimCount;
sQuat *QuatTable;
// Anim Hdrs....
};
2001-03-05 21:18:35 +01:00
*/
2001-01-12 23:37:21 +01:00
2000-12-12 21:56:51 +01:00
2000-12-06 23:21:55 +01:00
#endif