mirror of
https://github.com/blendogames/thirtyflightsofloving.git
synced 2024-11-15 00:41:21 +00:00
add4c7cc46
Added new SCR_DrawPic() variants in cl_screen.c. Added new graphics for text fields and sliders in menus. Improved mouse interaction for menu sliders. Added resettargets developer command to default Lazarus and missionpack DLLs. Added hint_test developer command to missionpack DLL. Fixed freeze developer command in default Lazarus and missionpack DLLs so it can be used more than once. More tweaks to Tactician Gunner prox mine safety checks in misssionpack DLL.
322 lines
7.2 KiB
C
322 lines
7.2 KiB
C
/*
|
|
===========================================================================
|
|
Copyright (C) 1997-2001 Id Software, Inc.
|
|
|
|
This file is part of Quake 2 source code.
|
|
|
|
Quake 2 source code 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.
|
|
|
|
Quake 2 source code 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 Quake 2 source code; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
===========================================================================
|
|
*/
|
|
|
|
/*
|
|
d*_t structures are on-disk representations
|
|
m*_t structures are in-memory
|
|
*/
|
|
|
|
/*
|
|
==============================================================================
|
|
|
|
BRUSH MODELS
|
|
|
|
==============================================================================
|
|
*/
|
|
|
|
|
|
//
|
|
// in memory representation
|
|
//
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!!
|
|
typedef struct
|
|
{
|
|
vec3_t position;
|
|
} mvertex_t;
|
|
|
|
typedef struct
|
|
{
|
|
vec3_t mins, maxs;
|
|
vec3_t origin; // for sounds or lights
|
|
float radius;
|
|
int headnode;
|
|
int visleafs; // not including the solid leaf 0
|
|
int firstface, numfaces;
|
|
} mmodel_t;
|
|
|
|
|
|
#define SIDE_FRONT 0
|
|
#define SIDE_BACK 1
|
|
#define SIDE_ON 2
|
|
|
|
|
|
#define SURF_PLANEBACK 2
|
|
#define SURF_DRAWSKY 4
|
|
#define SURF_DRAWTURB 0x10
|
|
#define SURF_DRAWBACKGROUND 0x40
|
|
#define SURF_LIGHTMAPPED 0x80
|
|
#define SURF_UNDERWATER 0x100
|
|
#define SURF_UNDERSLIME 0x200
|
|
#define SURF_UNDERLAVA 0x400
|
|
#define SURF_MASK_CAUSTIC (SURF_UNDERWATER|SURF_UNDERSLIME|SURF_UNDERLAVA)
|
|
// Psychospaz's envmapping
|
|
#define SURF_ENVMAP 0x800
|
|
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!!
|
|
typedef struct
|
|
{
|
|
unsigned short v[2];
|
|
unsigned int cachededgeoffset;
|
|
} medge_t;
|
|
|
|
typedef struct mtexinfo_s
|
|
{
|
|
float vecs[2][4];
|
|
int texWidth; // added Q2E hack
|
|
int texHeight; // added Q2E hack
|
|
int flags;
|
|
int numframes;
|
|
struct mtexinfo_s *next; // animation chain
|
|
image_t *image;
|
|
image_t *glow; // glow overlay
|
|
} mtexinfo_t;
|
|
|
|
typedef struct
|
|
{
|
|
vec3_t xyz;
|
|
vec2_t texture_st;
|
|
vec2_t lightmap_st;
|
|
byte basecolor[3];
|
|
byte lightcolor[3];
|
|
} mpolyvertex_t;
|
|
|
|
typedef struct glpoly_s
|
|
{
|
|
struct glpoly_s *next;
|
|
struct glpoly_s *chain;
|
|
int numverts;
|
|
|
|
qboolean vertexlightset;
|
|
vec3_t center;
|
|
|
|
int flags; // for SURF_UNDERWATER (not needed anymore?)
|
|
mpolyvertex_t verts[4]; // variable sized (xyz s1t1 s2t2 rgb rgb)
|
|
} glpoly_t;
|
|
|
|
typedef struct msurface_s
|
|
{
|
|
int visframe; // should be drawn when node is crossed
|
|
|
|
cplane_t *plane;
|
|
int flags;
|
|
|
|
int firstedge; // look up in model->surfedges[], negative numbers
|
|
int numedges; // are backwards edges
|
|
|
|
short texturemins[2];
|
|
short extents[2];
|
|
|
|
int light_s, light_t; // gl lightmap coordinates
|
|
int light_smax, light_tmax;
|
|
int dlight_s, dlight_t; // gl lightmap coordinates for dynamic lightmaps
|
|
|
|
glpoly_t *polys; // multiple if warped
|
|
struct msurface_s *texturechain;
|
|
struct msurface_s *lightmapchain;
|
|
|
|
mtexinfo_t *texinfo;
|
|
|
|
// lighting info
|
|
int dlightframe;
|
|
int dlightbits[(MAX_DLIGHTS+31)>>5]; // derived from MAX_DLIGHTS
|
|
qboolean cached_dlight;
|
|
qboolean isLightmapped; // Knightmare- for whether a warp surface is lightmapped
|
|
|
|
int lightmaptexturenum;
|
|
byte styles[MAXLIGHTMAPS];
|
|
float cached_light[MAXLIGHTMAPS]; // values currently used in lightmap
|
|
byte *samples; // [numstyles*surfsize]
|
|
// byte *stains; // added stainmaps
|
|
|
|
void *chain_part;
|
|
void *chain_ent;
|
|
|
|
int checkCount;
|
|
entity_t *entity; // entity pointer
|
|
} msurface_t;
|
|
|
|
|
|
typedef struct surfaceHandle_s
|
|
{
|
|
msurface_t *surf;
|
|
entity_t *entity; // entity pointer
|
|
int flags; // entity-specific surface flags
|
|
struct surfaceHandle_s *surfacechain; // next surface
|
|
} surfaceHandle_t;
|
|
|
|
|
|
typedef struct mnode_s
|
|
{
|
|
// common with leaf
|
|
int contents; // -1, to differentiate from leafs
|
|
int visframe; // node needs to be traversed if current
|
|
|
|
float minmaxs[6]; // for bounding box culling
|
|
|
|
struct mnode_s *parent;
|
|
|
|
// node specific
|
|
cplane_t *plane;
|
|
struct mnode_s *children[2];
|
|
|
|
unsigned short firstsurface;
|
|
unsigned short numsurfaces;
|
|
} mnode_t;
|
|
|
|
|
|
|
|
typedef struct mleaf_s
|
|
{
|
|
// common with node
|
|
int contents; // wil be a negative contents number
|
|
int visframe; // node needs to be traversed if current
|
|
|
|
float minmaxs[6]; // for bounding box culling
|
|
|
|
struct mnode_s *parent;
|
|
|
|
// leaf specific
|
|
int cluster;
|
|
int area;
|
|
|
|
msurface_t **firstmarksurface;
|
|
int nummarksurfaces;
|
|
} mleaf_t;
|
|
|
|
|
|
//===================================================================
|
|
|
|
//
|
|
// Whole model
|
|
//
|
|
|
|
//Harven++ MD3 added mod_md3
|
|
typedef enum {mod_bad, mod_brush, mod_sprite, mod_alias, mod_md2 } modtype_t;
|
|
//Harven-- MD3
|
|
|
|
typedef struct model_s
|
|
{
|
|
char name[MAX_QPATH];
|
|
|
|
int registration_sequence;
|
|
|
|
modtype_t type;
|
|
int numframes;
|
|
|
|
int flags;
|
|
|
|
//
|
|
// volume occupied by the model graphics
|
|
//
|
|
vec3_t mins, maxs;
|
|
float radius;
|
|
|
|
//
|
|
// solid volume for clipping
|
|
//
|
|
qboolean clipbox;
|
|
vec3_t clipmins, clipmaxs;
|
|
|
|
//
|
|
// brush model
|
|
//
|
|
int firstmodelsurface, nummodelsurfaces;
|
|
int lightmap; // only for submodels
|
|
|
|
int numsubmodels;
|
|
mmodel_t *submodels;
|
|
|
|
int numplanes;
|
|
cplane_t *planes;
|
|
|
|
int numleafs; // number of visible leafs, not counting 0
|
|
mleaf_t *leafs;
|
|
|
|
int numvertexes;
|
|
mvertex_t *vertexes;
|
|
|
|
int numedges;
|
|
medge_t *edges;
|
|
|
|
int numnodes;
|
|
int firstnode;
|
|
mnode_t *nodes;
|
|
|
|
int numtexinfo;
|
|
mtexinfo_t *texinfo;
|
|
|
|
int numsurfaces;
|
|
msurface_t *surfaces;
|
|
|
|
int numsurfedges;
|
|
int *surfedges;
|
|
|
|
int nummarksurfaces;
|
|
msurface_t **marksurfaces;
|
|
|
|
dvis_t *vis;
|
|
|
|
byte *lightdata;
|
|
|
|
// for alias models and skins
|
|
// Echon's per-mesh skin support
|
|
image_t *skins[MD3_MAX_MESHES][MD2_MAX_SKINS];
|
|
// image_t *skins[MD2_MAX_SKINS];
|
|
|
|
size_t extradatasize;
|
|
void *extradata;
|
|
|
|
qboolean hasAlpha; // if model has scripted transparency
|
|
int bspVersion; // For checking BSP version for compatibility
|
|
int bspFeatures; // flags for BSP features
|
|
|
|
#ifdef PROJECTION_SHADOWS // projection shadows from BeefQuake R6
|
|
//signed int edge_tri[MD2_MAX_TRIANGLES][3]; // make this dynamically allocated?
|
|
int *edge_tri;
|
|
#endif // end projection shadows from BeefQuake R6
|
|
} model_t;
|
|
|
|
// Knightmare- BSP features flags
|
|
#define BSPF_WARPLIGHTMAPS 0x00000001
|
|
|
|
//============================================================================
|
|
|
|
void Mod_Init (void);
|
|
void Mod_ClearAll (void);
|
|
void Mod_SetTCModParmsDefaults (tcmodParms_t *tcmod);
|
|
void Mod_SetRenderParmsDefaults (renderparms_t *parms);
|
|
void Mod_LoadModelScript (model_t *mod, maliasmodel_t *aliasmod);
|
|
model_t *Mod_ForName (char *name, qboolean crash);
|
|
mleaf_t *Mod_PointInLeaf (float *p, model_t *model);
|
|
byte *Mod_ClusterPVS (int cluster, model_t *model);
|
|
|
|
void Mod_Modellist_f (void);
|
|
|
|
void *Hunk_Begin (size_t maxsize);
|
|
void *Hunk_Alloc (size_t size);
|
|
size_t Hunk_End (void);
|
|
void Hunk_Free (void *base);
|
|
|
|
void Mod_FreeAll (void);
|
|
void Mod_Free (model_t *mod);
|
|
|
|
extern qboolean registration_active; // map registration flag
|