summaryrefslogtreecommitdiff
path: root/libs/assimp/code/AssetLib/MDL/HalfLife/HL1FileData.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/assimp/code/AssetLib/MDL/HalfLife/HL1FileData.h')
-rw-r--r--libs/assimp/code/AssetLib/MDL/HalfLife/HL1FileData.h600
1 files changed, 600 insertions, 0 deletions
diff --git a/libs/assimp/code/AssetLib/MDL/HalfLife/HL1FileData.h b/libs/assimp/code/AssetLib/MDL/HalfLife/HL1FileData.h
new file mode 100644
index 0000000..28b1b28
--- /dev/null
+++ b/libs/assimp/code/AssetLib/MDL/HalfLife/HL1FileData.h
@@ -0,0 +1,600 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2022, assimp team
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+
+/** @file HL1FileData.h
+ * @brief Definition of in-memory structures for the
+ * Half-Life 1 MDL file format.
+ */
+
+#ifndef AI_HL1FILEDATA_INCLUDED
+#define AI_HL1FILEDATA_INCLUDED
+
+#include "HalfLifeMDLBaseHeader.h"
+
+#include <assimp/Compiler/pushpack1.h>
+#include <assimp/types.h>
+
+namespace Assimp {
+namespace MDL {
+namespace HalfLife {
+
+using vec3_t = float[3];
+
+/** \struct Header_HL1
+ * \brief Data structure for the HL1 MDL file header.
+ */
+struct Header_HL1 : HalfLifeMDLBaseHeader {
+ //! The model name.
+ char name[64];
+
+ //! The total file size in bytes.
+ int32_t length;
+
+ //! Ideal eye position.
+ vec3_t eyeposition;
+
+ //! Ideal movement hull size.
+ vec3_t min;
+ vec3_t max;
+
+ //! Clipping bounding box.
+ vec3_t bbmin;
+ vec3_t bbmax;
+
+ //! Was "flags".
+ int32_t unused;
+
+ //! The number of bones.
+ int32_t numbones;
+
+ //! Offset to the first bone chunk.
+ int32_t boneindex;
+
+ //! The number of bone controllers.
+ int32_t numbonecontrollers;
+
+ //! Offset to the first bone controller chunk.
+ int32_t bonecontrollerindex;
+
+ //! The number of hitboxes.
+ int32_t numhitboxes;
+
+ //! Offset to the first hitbox chunk.
+ int32_t hitboxindex;
+
+ //! The number of sequences.
+ int32_t numseq;
+
+ //! Offset to the first sequence description chunk.
+ int32_t seqindex;
+
+ //! The number of sequence groups.
+ int32_t numseqgroups;
+
+ //! Offset to the first sequence group chunk.
+ int32_t seqgroupindex;
+
+ //! The number of textures.
+ int32_t numtextures;
+
+ //! Offset to the first texture chunk.
+ int32_t textureindex;
+
+ //! Offset to the first texture's image data.
+ int32_t texturedataindex;
+
+ //! The number of replaceable textures.
+ int32_t numskinref;
+
+ //! The number of skin families.
+ int32_t numskinfamilies;
+
+ //! Offset to the first replaceable texture.
+ int32_t skinindex;
+
+ //! The number of bodyparts.
+ int32_t numbodyparts;
+
+ //! Offset the the first bodypart.
+ int32_t bodypartindex;
+
+ //! The number of attachments.
+ int32_t numattachments;
+
+ //! Offset the the first attachment chunk.
+ int32_t attachmentindex;
+
+ //! Was "soundtable".
+ int32_t unused2;
+
+ //! Was "soundindex".
+ int32_t unused3;
+
+ //! Was "soundgroups".
+ int32_t unused4;
+
+ //! Was "soundgroupindex".
+ int32_t unused5;
+
+ //! The number of nodes in the sequence transition graph.
+ int32_t numtransitions;
+
+ //! Offset the the first sequence transition.
+ int32_t transitionindex;
+} PACK_STRUCT;
+
+/** \struct SequenceHeader_HL1
+ * \brief Data structure for the file header of a demand loaded
+ * HL1 MDL sequence group file.
+ */
+struct SequenceHeader_HL1 : HalfLifeMDLBaseHeader {
+ //! The sequence group file name.
+ char name[64];
+
+ //! The total file size in bytes.
+ int32_t length;
+} PACK_STRUCT;
+
+/** \struct Bone_HL1
+ * \brief Data structure for a bone in HL1 MDL files.
+ */
+struct Bone_HL1 {
+ //! The bone name.
+ char name[32];
+
+ //! The parent bone index. (-1) If it has no parent.
+ int32_t parent;
+
+ //! Was "flags".
+ int32_t unused;
+
+ //! Available bone controller per motion type.
+ //! (-1) if no controller is available.
+ int32_t bonecontroller[6];
+
+ /*! Default position and rotation values where
+ * scale[0] = position.X
+ * scale[1] = position.Y
+ * scale[2] = position.Z
+ * scale[3] = rotation.X
+ * scale[4] = rotation.Y
+ * scale[5] = rotation.Z
+ */
+ float value[6];
+
+ /*! Compressed scale values where
+ * scale[0] = position.X scale
+ * scale[1] = position.Y scale
+ * scale[2] = position.Z scale
+ * scale[3] = rotation.X scale
+ * scale[4] = rotation.Y scale
+ * scale[5] = rotation.Z scale
+ */
+ float scale[6];
+} PACK_STRUCT;
+
+/** \struct BoneController_HL1
+ * \brief Data structure for a bone controller in HL1 MDL files.
+ */
+struct BoneController_HL1 {
+ //! Bone affected by this controller.
+ int32_t bone;
+
+ //! The motion type.
+ int32_t type;
+
+ //! The minimum and maximum values.
+ float start;
+ float end;
+
+ // Was "rest".
+ int32_t unused;
+
+ // The bone controller channel.
+ int32_t index;
+} PACK_STRUCT;
+
+/** \struct Hitbox_HL1
+ * \brief Data structure for a hitbox in HL1 MDL files.
+ */
+struct Hitbox_HL1 {
+ //! The bone this hitbox follows.
+ int32_t bone;
+
+ //! The hit group.
+ int32_t group;
+
+ //! The hitbox minimum and maximum extents.
+ vec3_t bbmin;
+ vec3_t bbmax;
+} PACK_STRUCT;
+
+/** \struct SequenceGroup_HL1
+ * \brief Data structure for a sequence group in HL1 MDL files.
+ */
+struct SequenceGroup_HL1 {
+ //! A textual name for this sequence group.
+ char label[32];
+
+ //! The file name.
+ char name[64];
+
+ //! Was "cache".
+ int32_t unused;
+
+ //! Was "data".
+ int32_t unused2;
+} PACK_STRUCT;
+
+//! The type of blending for a sequence.
+enum SequenceBlendMode_HL1 {
+ NoBlend = 1,
+ TwoWayBlending = 2,
+ FourWayBlending = 4,
+};
+
+/** \struct SequenceDesc_HL1
+ * \brief Data structure for a sequence description in HL1 MDL files.
+ */
+struct SequenceDesc_HL1 {
+ //! The sequence name.
+ char label[32];
+
+ //! Frames per second.
+ float fps;
+
+ //! looping/non-looping flags.
+ int32_t flags;
+
+ //! The sequence activity.
+ int32_t activity;
+
+ //! The sequence activity weight.
+ int32_t actweight;
+
+ //! The number of animation events.
+ int32_t numevents;
+
+ //! Offset the the first animation event chunk.
+ int32_t eventindex;
+
+ //! The number of frames in the sequence.
+ int32_t numframes;
+
+ //! Was "numpivots".
+ int32_t unused;
+
+ //! Was "pivotindex".
+ int32_t unused2;
+
+ //! Linear motion type.
+ int32_t motiontype;
+
+ //! Linear motion bone.
+ int32_t motionbone;
+
+ //! Linear motion.
+ vec3_t linearmovement;
+
+ //! Was "automoveposindex".
+ int32_t unused3;
+
+ //! Was "automoveangleindex".
+ int32_t unused4;
+
+ //! The sequence minimum and maximum extents.
+ vec3_t bbmin;
+ vec3_t bbmax;
+
+ //! The number of blend animations.
+ int32_t numblends;
+
+ //! Offset to first the AnimValueOffset_HL1 chunk.
+ //! This offset is relative to the SequenceHeader_HL1 of the file
+ //! that contains the animation data.
+ int32_t animindex;
+
+ //! The motion type of each blend controller.
+ int32_t blendtype[2];
+
+ //! The starting value of each blend controller.
+ float blendstart[2];
+
+ //! The ending value of each blend controller.
+ float blendend[2];
+
+ //! Was "blendparent".
+ int32_t unused5;
+
+ //! The sequence group.
+ int32_t seqgroup;
+
+ //! The node at entry in the sequence transition graph.
+ int32_t entrynode;
+
+ //! The node at exit in the sequence transition graph.
+ int32_t exitnode;
+
+ //! Transition rules.
+ int32_t nodeflags;
+
+ //! Was "nextseq"
+ int32_t unused6;
+} PACK_STRUCT;
+
+/** \struct AnimEvent_HL1
+ * \brief Data structure for an animation event in HL1 MDL files.
+ */
+struct AnimEvent_HL1 {
+ //! The frame at which this animation event occurs.
+ int32_t frame;
+
+ //! The script event type.
+ int32_t event;
+
+ //! was "type"
+ int32_t unused;
+
+ //! Options. Could be path to sound WAVE files.
+ char options[64];
+} PACK_STRUCT;
+
+/** \struct Attachment_HL1
+ * \brief Data structure for an attachment in HL1 MDL files.
+ */
+struct Attachment_HL1 {
+ //! Was "name".
+ char unused[32];
+
+ //! Was "type".
+ int32_t unused2;
+
+ //! The bone this attachment follows.
+ int32_t bone;
+
+ //! The attachment origin.
+ vec3_t org;
+
+ //! Was "vectors"
+ vec3_t unused3[3];
+} PACK_STRUCT;
+
+/** \struct AnimValueOffset_HL1
+ * \brief Data structure to hold offsets (one per motion type)
+ * to the first animation frame value for a single bone
+ * in HL1 MDL files.
+ */
+struct AnimValueOffset_HL1 {
+ unsigned short offset[6];
+} PACK_STRUCT;
+
+/** \struct AnimValue_HL1
+ * \brief Data structure for an animation frame in HL1 MDL files.
+ */
+union AnimValue_HL1 {
+ struct {
+ uint8_t valid;
+ uint8_t total;
+ } num;
+ short value;
+} PACK_STRUCT;
+
+/** \struct Bodypart_HL1
+ * \brief Data structure for a bodypart in HL1 MDL files.
+ */
+struct Bodypart_HL1 {
+ //! The bodypart name.
+ char name[64];
+
+ //! The number of available models for this bodypart.
+ int32_t nummodels;
+
+ //! Used to convert from a global model index
+ //! to a local bodypart model index.
+ int32_t base;
+
+ //! The offset to the first model chunk.
+ int32_t modelindex;
+} PACK_STRUCT;
+
+/** \struct Texture_HL1
+ * \brief Data structure for a texture in HL1 MDL files.
+ */
+struct Texture_HL1 {
+ //! Texture file name.
+ char name[64];
+
+ //! Texture flags.
+ int32_t flags;
+
+ //! Texture width in pixels.
+ int32_t width;
+
+ //! Texture height in pixels.
+ int32_t height;
+
+ //! Offset to the image data.
+ //! This offset is relative to the texture file header.
+ int32_t index;
+} PACK_STRUCT;
+
+/** \struct Model_HL1
+ * \brief Data structure for a model in HL1 MDL files.
+ */
+struct Model_HL1 {
+ //! Model name.
+ char name[64];
+
+ //! Was "type".
+ int32_t unused;
+
+ //! Was "boundingradius".
+ float unused2;
+
+ //! The number of meshes in the model.
+ int32_t nummesh;
+
+ //! Offset to the first mesh chunk.
+ int32_t meshindex;
+
+ //! The number of unique vertices.
+ int32_t numverts;
+
+ //! Offset to the vertex bone array.
+ int32_t vertinfoindex;
+
+ //! Offset to the vertex array.
+ int32_t vertindex;
+
+ //! The number of unique normals.
+ int32_t numnorms;
+
+ //! Offset to the normal bone array.
+ int32_t norminfoindex;
+
+ //! Offset to the normal array.
+ int32_t normindex;
+
+ //! Was "numgroups".
+ int32_t unused3;
+
+ //! Was "groupindex".
+ int32_t unused4;
+} PACK_STRUCT;
+
+/** \struct Mesh_HL1
+ * \brief Data structure for a mesh in HL1 MDL files.
+ */
+struct Mesh_HL1 {
+ //! Can be interpreted as the number of triangles in the mesh.
+ int32_t numtris;
+
+ //! Offset to the start of the tris sequence.
+ int32_t triindex;
+
+ //! The skin index.
+ int32_t skinref;
+
+ //! The number of normals in the mesh.
+ int32_t numnorms;
+
+ //! Was "normindex".
+ int32_t unused;
+} PACK_STRUCT;
+
+/** \struct Trivert
+ * \brief Data structure for a trivert in HL1 MDL files.
+ */
+struct Trivert {
+ //! Index into Model_HL1 vertex array.
+ short vertindex;
+
+ //! Index into Model_HL1 normal array.
+ short normindex;
+
+ //! Texture coordinates in absolute space (unnormalized).
+ short s, t;
+} PACK_STRUCT;
+
+#include <assimp/Compiler/poppack1.h>
+
+#if (!defined AI_MDL_HL1_VERSION)
+#define AI_MDL_HL1_VERSION 10
+#endif
+#if (!defined AI_MDL_HL1_MAX_TRIANGLES)
+#define AI_MDL_HL1_MAX_TRIANGLES 20000
+#endif
+#if (!defined AI_MDL_HL1_MAX_VERTICES)
+#define AI_MDL_HL1_MAX_VERTICES 2048
+#endif
+#if (!defined AI_MDL_HL1_MAX_SEQUENCES)
+#define AI_MDL_HL1_MAX_SEQUENCES 2048
+#endif
+#if (!defined AI_MDL_HL1_MAX_SEQUENCE_GROUPS)
+#define AI_MDL_HL1_MAX_SEQUENCE_GROUPS 32
+#endif
+#if (!defined AI_MDL_HL1_MAX_TEXTURES)
+#define AI_MDL_HL1_MAX_TEXTURES 100
+#endif
+#if (!defined AI_MDL_HL1_MAX_SKIN_FAMILIES)
+#define AI_MDL_HL1_MAX_SKIN_FAMILIES 100
+#endif
+#if (!defined AI_MDL_HL1_MAX_BONES)
+#define AI_MDL_HL1_MAX_BONES 128
+#endif
+#if (!defined AI_MDL_HL1_MAX_BODYPARTS)
+#define AI_MDL_HL1_MAX_BODYPARTS 32
+#endif
+#if (!defined AI_MDL_HL1_MAX_MODELS)
+#define AI_MDL_HL1_MAX_MODELS 32
+#endif
+#if (!defined AI_MDL_HL1_MAX_MESHES)
+#define AI_MDL_HL1_MAX_MESHES 256
+#endif
+#if (!defined AI_MDL_HL1_MAX_EVENTS)
+#define AI_MDL_HL1_MAX_EVENTS 1024
+#endif
+#if (!defined AI_MDL_HL1_MAX_BONE_CONTROLLERS)
+#define AI_MDL_HL1_MAX_BONE_CONTROLLERS 8
+#endif
+#if (!defined AI_MDL_HL1_MAX_ATTACHMENTS)
+#define AI_MDL_HL1_MAX_ATTACHMENTS 512
+#endif
+
+// lighting options
+#if (!defined AI_MDL_HL1_STUDIO_NF_FLATSHADE)
+#define AI_MDL_HL1_STUDIO_NF_FLATSHADE 0x0001
+#endif
+#if (!defined AI_MDL_HL1_STUDIO_NF_CHROME)
+#define AI_MDL_HL1_STUDIO_NF_CHROME 0x0002
+#endif
+#if (!defined AI_MDL_HL1_STUDIO_NF_ADDITIVE)
+#define AI_MDL_HL1_STUDIO_NF_ADDITIVE 0x0020
+#endif
+#if (!defined AI_MDL_HL1_STUDIO_NF_MASKED)
+#define AI_MDL_HL1_STUDIO_NF_MASKED 0x0040
+#endif
+
+} // namespace HalfLife
+} // namespace MDL
+} // namespace Assimp
+
+#endif // AI_HL1FILEDATA_INCLUDED