netradiant-custom/tools/quake3/q3map2/games.h
2021-09-13 18:49:09 +03:00

121 lines
6.4 KiB
C++

/* -------------------------------------------------------------------------------
Copyright (C) 1999-2007 id Software, Inc. and contributors.
For a list of contributors, see the accompanying CONTRIBUTORS file.
This file is part of GtkRadiant.
GtkRadiant 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.
GtkRadiant 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 GtkRadiant; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
----------------------------------------------------------------------------------
This code has been altered significantly from its original form, to support
several games based on the Quake III Arena engine, in the form of "Q3Map2."
------------------------------------------------------------------------------- */
/* marker */
#pragma once
#include <vector>
/* ydnar: compiler flags, because games have widely varying content/surface flags */
const int C_SOLID = 0x00000001;
const int C_TRANSLUCENT = 0x00000002;
const int C_STRUCTURAL = 0x00000004;
const int C_HINT = 0x00000008;
const int C_NODRAW = 0x00000010;
const int C_LIGHTGRID = 0x00000020;
const int C_ALPHASHADOW = 0x00000040;
const int C_LIGHTFILTER = 0x00000080;
const int C_VERTEXLIT = 0x00000100;
const int C_LIQUID = 0x00000200;
const int C_FOG = 0x00000400;
const int C_SKY = 0x00000800;
const int C_ORIGIN = 0x00001000;
const int C_AREAPORTAL = 0x00002000;
const int C_ANTIPORTAL = 0x00004000; /* like hint, but doesn't generate portals */
const int C_SKIP = 0x00008000; /* like hint, but skips this face (doesn't split bsp) */
const int C_NOMARKS = 0x00010000; /* no decals */
const int C_OB = 0x00020000; /* skip -noob for this */
const int C_DETAIL = 0x08000000; /* THIS MUST BE THE SAME AS IN RADIANT! */
/* ydnar: for multiple game support */
struct surfaceParm_t
{
const char *name;
int contentFlags, contentFlagsClear;
int surfaceFlags, surfaceFlagsClear;
int compileFlags, compileFlagsClear;
};
enum class EMiniMapMode
{
Gray,
Black,
White
};
struct game_t
{
const char *arg; /* -game matches this */
const char *gamePath; /* main game data dir */
const char *homeBasePath; /* home sub-dir on unix */
const char *magic; /* magic word for figuring out base path */
const char *shaderPath; /* shader directory */
int maxLMSurfaceVerts; /* default maximum lightmapped surface verts */
int maxSurfaceVerts; /* default maximum surface verts */
int maxSurfaceIndexes; /* default maximum surface indexes (tris * 3) */
bool emitFlares; /* when true, emit flare surfaces */
const char *flareShader; /* default flare shader (MUST BE SET) */
bool wolfLight; /* when true, lights work like wolf q3map */
int lightmapSize; /* bsp lightmap width/height */
float lightmapGamma; /* default lightmap gamma */
bool lightmapsRGB; /* default lightmap sRGB mode */
bool texturesRGB; /* default texture sRGB mode */
bool colorsRGB; /* default color sRGB mode */
float lightmapExposure; /* default lightmap exposure */
float lightmapCompensate; /* default lightmap compensate value */
float gridScale; /* vortex: default lightgrid scale (affects both directional and ambient spectres) */
float gridAmbientScale; /* vortex: default lightgrid ambient spectre scale */
bool lightAngleHL; /* jal: use half-lambert curve for light angle attenuation */
bool noStyles; /* use lightstyles hack or not */
bool keepLights; /* keep light entities on bsp */
int patchSubdivisions; /* default patchMeta subdivisions tolerance */
bool patchShadows; /* patch casting enabled */
bool deluxeMap; /* compile deluxemaps */
int deluxeMode; /* deluxemap mode (0 - modelspace, 1 - tangentspace with renormalization, 2 - tangentspace without renormalization) */
int miniMapSize; /* minimap size */
float miniMapSharpen; /* minimap sharpening coefficient */
float miniMapBorder; /* minimap border amount */
bool miniMapKeepAspect; /* minimap keep aspect ratio by letterboxing */
EMiniMapMode miniMapMode; /* minimap mode */
const char *miniMapNameFormat; /* minimap name format */
const char *bspIdent; /* 4-letter bsp file prefix */
int bspVersion; /* bsp version to use */
bool lumpSwap; /* cod-style len/ofs order */
typedef void ( *bspFunc )( const char * );
bspFunc load, write; /* load/write function pointers */
std::vector<surfaceParm_t> surfaceParms; /* surfaceparm array */
int brushBevelsSurfaceFlagsMask; /* apply only these surfaceflags to bevels to reduce extra bsp shaders amount; applying them to get correct physics at walkable brush edges and vertices */
};
extern const std::vector<game_t> g_games;
extern const game_t *g_game;