/*** * * Copyright (c) 1996-2002, Valve LLC. All rights reserved. * * This product contains software technology licensed from Id * Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. * All Rights Reserved. * * Use, distribution, and modification of this source code and/or resulting * object code is restricted to non-commercial enhancements to products from * Valve LLC. All other use, distribution, or modification is prohibited * without written permission from Valve LLC. * ****/ #ifndef SPRITE_H #define SPRITE_H #include "build.h" #include STDINT_H #include "synctype.h" /* ============================================================================== SPRITE MODELS .spr extended version (Half-Life compatible sprites with some Xash3D extensions) ============================================================================== */ #define IDSPRITEHEADER (('P'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDSP" #define SPRITE_VERSION_Q1 1 // Quake sprites #define SPRITE_VERSION_HL 2 // Half-Life sprites #define SPRITE_VERSION_32 32 // Captain Obvious mode on typedef enum { FRAME_SINGLE = 0, FRAME_GROUP, FRAME_ANGLED // Xash3D ext } frametype_t; typedef enum { SPR_NORMAL = 0, SPR_ADDITIVE, SPR_INDEXALPHA, SPR_ALPHTEST, } drawtype_t; typedef enum { SPR_FWD_PARALLEL_UPRIGHT = 0, SPR_FACING_UPRIGHT, SPR_FWD_PARALLEL, SPR_ORIENTED, SPR_FWD_PARALLEL_ORIENTED, } angletype_t; typedef enum { SPR_CULL_FRONT = 0, // oriented sprite will be draw with one face SPR_CULL_NONE, // oriented sprite will be draw back face too } facetype_t; // generic helper typedef struct { int32_t ident; // LittleLong 'ISPR' int32_t version; // current version 2 } dsprite_t; STATIC_ASSERT( sizeof( dsprite_t ) == 8, "invalid dsprite_t size" ); typedef struct { int32_t ident; // LittleLong 'ISPR' int32_t version; // current version 2 int32_t type; // camera align float boundingradius; // quick face culling int32_t bounds[2]; // mins\maxs int32_t numframes; // including groups float beamlength; // ??? uint32_t synctype; // animation synctype, was synctype_t } dsprite_q1_t; STATIC_ASSERT( sizeof( dsprite_q1_t ) == 36, "invalid dsprite_q1_t size" ); typedef struct { int32_t ident; // LittleLong 'ISPR' int32_t version; // current version 2 uint32_t type; // camera align, was angletype_t uint32_t texFormat; // rendering mode, was drawtype_t int32_t boundingradius; // quick face culling int32_t bounds[2]; // mins\maxs int32_t numframes; // including groups uint32_t facetype; // cullface (Xash3D ext), was facetype_t uint32_t synctype; // animation synctype, was synctype_t } dsprite_hl_t; STATIC_ASSERT( sizeof( dsprite_hl_t ) == 40, "invalid dsprite_hl_t size" ); typedef struct { int32_t origin[2]; int32_t width; int32_t height; } dspriteframe_t; STATIC_ASSERT( sizeof( dspriteframe_t ) == 16, "invalid dspriteframe_t size" ); typedef struct { int32_t numframes; } dspritegroup_t; STATIC_ASSERT( sizeof( dspritegroup_t ) == 4, "invalid dspritegroup_t size" ); typedef struct { float interval; } dspriteinterval_t; STATIC_ASSERT( sizeof( dspriteinterval_t ) == 4, "invalid dspriteinterval_t size" ); typedef struct { uint32_t type; // was frametype_t } dframetype_t; STATIC_ASSERT( sizeof( dframetype_t ) == 4, "invalid dframetype_t size" ); #endif//SPRITE_H