mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2024-12-28 07:35:40 +03:00
227 lines
6.2 KiB
C
227 lines
6.2 KiB
C
/*
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* In addition, as a special exception, the author gives permission to
|
|
* link the code of this program with the Half-Life Game Engine ("HL
|
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
|
* respects for all of the code used other than the HL Engine and MODs
|
|
* from Valve. If you modify this file, you may extend this exception
|
|
* to your version of the file, but you are not obligated to do so. If
|
|
* you do not wish to do so, delete this exception statement from your
|
|
* version.
|
|
*
|
|
*/
|
|
|
|
#ifndef STUDIO_H
|
|
#define STUDIO_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "studio_event.h"
|
|
|
|
#define MAXSTUDIOTRIANGLES 20000 // TODO: tune this
|
|
#define MAXSTUDIOVERTS 2048 // TODO: tune this
|
|
#define MAXSTUDIOSEQUENCES 256 // total animation sequences
|
|
#define MAXSTUDIOSKINS 100 // total textures
|
|
#define MAXSTUDIOSRCBONES 512 // bones allowed at source movement
|
|
#define MAXSTUDIOBONES 128 // total bones actually used
|
|
#define MAXSTUDIOMODELS 32 // sub-models per model
|
|
#define MAXSTUDIOBODYPARTS 32
|
|
#define MAXSTUDIOGROUPS 16
|
|
#define MAXSTUDIOANIMATIONS 512 // per sequence
|
|
#define MAXSTUDIOMESHES 256
|
|
#define MAXSTUDIOEVENTS 1024
|
|
#define MAXSTUDIOPIVOTS 256
|
|
#define MAXSTUDIOCONTROLLERS 8
|
|
|
|
// lighting options
|
|
#define STUDIO_NF_FLATSHADE 0x0001
|
|
#define STUDIO_NF_CHROME 0x0002
|
|
#define STUDIO_NF_FULLBRIGHT 0x0004
|
|
|
|
// motion flags
|
|
#define STUDIO_X 0x0001
|
|
#define STUDIO_Y 0x0002
|
|
#define STUDIO_Z 0x0004
|
|
#define STUDIO_XR 0x0008
|
|
#define STUDIO_YR 0x0010
|
|
#define STUDIO_ZR 0x0020
|
|
#define STUDIO_LX 0x0040
|
|
#define STUDIO_LY 0x0080
|
|
#define STUDIO_LZ 0x0100
|
|
#define STUDIO_AX 0x0200
|
|
#define STUDIO_AY 0x0400
|
|
#define STUDIO_AZ 0x0800
|
|
#define STUDIO_AXR 0x1000
|
|
#define STUDIO_AYR 0x2000
|
|
#define STUDIO_AZR 0x4000
|
|
#define STUDIO_TYPES 0x7FFF
|
|
#define STUDIO_RLOOP 0x8000 // controller that wraps shortest distance
|
|
|
|
// sequence flags
|
|
#define STUDIO_LOOPING 0x0001
|
|
|
|
// bone flags
|
|
#define STUDIO_HAS_NORMALS 0x0001
|
|
#define STUDIO_HAS_VERTICES 0x0002
|
|
#define STUDIO_HAS_BBOX 0x0004
|
|
#define STUDIO_HAS_CHROME 0x0008 // if any of the textures have chrome on them
|
|
|
|
#define RAD_TO_STUDIO (32768.0/M_PI)
|
|
#define STUDIO_TO_RAD (M_PI/32768.0)
|
|
|
|
typedef struct
|
|
{
|
|
int id;
|
|
int version;
|
|
char name[64];
|
|
int length;
|
|
vec3_t eyeposition; // ideal eye position
|
|
vec3_t min; // ideal movement hull size
|
|
vec3_t max;
|
|
vec3_t bbmin; // clipping bounding box
|
|
vec3_t bbmax;
|
|
int flags;
|
|
int numbones; // bones
|
|
int boneindex;
|
|
int numbonecontrollers; // bone controllers
|
|
int bonecontrollerindex;
|
|
int numhitboxes; // complex bounding boxes
|
|
int hitboxindex;
|
|
int numseq; // animation sequences
|
|
int seqindex;
|
|
int numseqgroups; // demand loaded sequences
|
|
int seqgroupindex;
|
|
int numtextures; // raw textures
|
|
int textureindex;
|
|
int texturedataindex;
|
|
int numskinref; // replaceable textures
|
|
int numskinfamilies;
|
|
int skinindex;
|
|
int numbodyparts;
|
|
int bodypartindex;
|
|
int numattachments; // queryable attachable points
|
|
int attachmentindex;
|
|
int soundtable;
|
|
int soundindex;
|
|
int soundgroups;
|
|
int soundgroupindex;
|
|
int numtransitions; // animation node to animation node transition graph
|
|
int transitionindex;
|
|
|
|
} studiohdr_t;
|
|
|
|
// bones
|
|
typedef struct
|
|
{
|
|
char name[32]; // bone name for symbolic links
|
|
int parent; // parent bone
|
|
int flags; // ??
|
|
int bonecontroller[6]; // bone controller index, -1 == none
|
|
float value[6]; // default DoF values
|
|
float scale[6]; // scale for delta DoF values
|
|
|
|
} mstudiobone_t;
|
|
|
|
// bone controllers
|
|
typedef struct
|
|
{
|
|
int bone; // -1 == 0
|
|
int type; // X, Y, Z, XR, YR, ZR, M
|
|
float start;
|
|
float end;
|
|
int rest; // byte index value at rest
|
|
int index; // 0-3 user set controller, 4 mouth
|
|
|
|
} mstudiobonecontroller_t;
|
|
|
|
// demand loaded sequence groups
|
|
typedef struct
|
|
{
|
|
char label[32]; // textual name
|
|
char name[64]; // file name
|
|
int32 unused1; // cache index pointer
|
|
int unused2; // hack for group 0
|
|
|
|
} mstudioseqgroup_t;
|
|
|
|
// sequence descriptions
|
|
typedef struct
|
|
{
|
|
char label[32]; // sequence label
|
|
float fps; // frames per second
|
|
int flags; // looping/non-looping flags
|
|
int activity;
|
|
int actweight;
|
|
int numevents;
|
|
int eventindex;
|
|
int numframes; // number of frames per sequence
|
|
int numpivots; // number of foot pivots
|
|
int pivotindex;
|
|
int motiontype;
|
|
int motionbone;
|
|
vec3_t linearmovement;
|
|
int automoveposindex;
|
|
int automoveangleindex;
|
|
vec3_t bbmin; // per sequence bounding box
|
|
vec3_t bbmax;
|
|
int numblends;
|
|
int animindex; // mstudioanim_t pointer relative to start of sequence group data
|
|
// [blend][bone][X, Y, Z, XR, YR, ZR]
|
|
int blendtype[2]; // X, Y, Z, XR, YR, ZR
|
|
float blendstart[2]; // starting value
|
|
float blendend[2]; // ending value
|
|
int blendparent;
|
|
int seqgroup; // sequence group for demand loading
|
|
int entrynode; // transition node at entry
|
|
int exitnode; // transition node at exit
|
|
int nodeflags; // transition rules
|
|
int nextseq; // auto advancing sequences
|
|
|
|
} mstudioseqdesc_t;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned short offset[6];
|
|
|
|
} mstudioanim_t;
|
|
|
|
// animation frames
|
|
typedef union
|
|
{
|
|
struct
|
|
{
|
|
byte valid;
|
|
byte total;
|
|
} num;
|
|
short int value;
|
|
|
|
} mstudioanimvalue_t;
|
|
|
|
// body part index
|
|
typedef struct
|
|
{
|
|
char name[64];
|
|
int nummodels;
|
|
int base;
|
|
int modelindex; // index into models array
|
|
|
|
} mstudiobodyparts_t;
|
|
|
|
#endif // STUDIO_H
|