X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=tools%2Fquake3%2Fq3map2%2Fq3map2.h;h=20acad6e70469759ed374b06361cdb6a85b315fc;hb=d13a0ee2aed177f7ff01b061414fc76c427595c2;hp=935d1c7f078baa9ff936670d85510cea5fe584b2;hpb=3c73487420fde8d4a3b5360d8b99e48132517900;p=xonotic%2Fnetradiant.git diff --git a/tools/quake3/q3map2/q3map2.h b/tools/quake3/q3map2/q3map2.h index 935d1c7f..20acad6e 100644 --- a/tools/quake3/q3map2/q3map2.h +++ b/tools/quake3/q3map2/q3map2.h @@ -32,7 +32,7 @@ #ifndef Q3MAP2_H #define Q3MAP2_H - +#include "globaldefs.h" /* version */ #ifndef Q3MAP_VERSION @@ -41,8 +41,6 @@ #define Q3MAP_MOTD "Your map saw the pretty lights from q3map2's BFG" - - /* ------------------------------------------------------------------------------- dependencies @@ -50,28 +48,25 @@ ------------------------------------------------------------------------------- */ /* platform-specific */ -#if defined( __linux__ ) || defined( __APPLE__ ) - #define Q_UNIX -#endif - -#ifdef Q_UNIX +#if GDEF_OS_POSIX #include #include #include #endif -#ifdef WIN32 +#if GDEF_OS_WINDOWS #include #endif /* general */ -#include "version.h" /* ttimo: might want to guard that if built outside of the GtkRadiant tree */ - #include "cmdlib.h" #include "mathlib.h" #include "md5lib.h" #include "ddslib.h" +#ifdef BUILD_CRUNCH +#include "crn_rgba.h" +#endif // BUILD_CRUNCH #include "picomodel.h" @@ -86,28 +81,27 @@ #include - /* ------------------------------------------------------------------------------- port-related hacks ------------------------------------------------------------------------------- */ -#define MAC_STATIC_HACK 0 -#if defined( __APPLE__ ) && MAC_STATIC_HACK - #define MAC_STATIC static +#if GDEF_OS_WINDOWS + #define Q_stricmp stricmp + #define Q_strncasecmp strnicmp #else - #define MAC_STATIC + #define Q_stricmp strcasecmp + #define Q_strncasecmp strncasecmp #endif -#if 1 - #ifdef WIN32 - #define Q_stricmp stricmp - #define Q_strncasecmp strnicmp - #else - #define Q_stricmp strcasecmp - #define Q_strncasecmp strncasecmp - #endif +// hack to declare and define in the same file +#ifdef MAIN_C + #define Q_EXTERN + #define Q_ASSIGN( a ) = a +#else + #define Q_EXTERN extern + #define Q_ASSIGN( a ) #endif /* macro version */ @@ -180,6 +174,21 @@ #define C_DETAIL 0x08000000 /* THIS MUST BE THE SAME AS IN RADIANT! */ +/* new tex surface flags, like Smokin'Guns */ +#define TEX_SURF_METAL 0x00001000 +#define TEX_SURF_WOOD 0x00080000 +#define TEX_SURF_CLOTH 0x00100000 +#define TEX_SURF_DIRT 0x00200000 +#define TEX_SURF_GLASS 0x00400000 +#define TEX_SURF_PLANT 0x00800000 +#define TEX_SURF_SAND 0x01000000 +#define TEX_SURF_SNOW 0x02000000 +#define TEX_SURF_STONE 0x04000000 +#define TEX_SURF_WATER 0x08000000 +#define TEX_SURF_GRASS 0x10000000 +#define TEX_SURF_BREAKABLE 0x20000000 + + /* shadow flags */ #define WORLDSPAWN_CAST_SHADOWS 1 #define WORLDSPAWN_RECV_SHADOWS 1 @@ -201,7 +210,7 @@ #define HINT_PRIORITY 1000 /* ydnar: force hint splits first and antiportal/areaportal splits last */ #define ANTIPORTAL_PRIORITY -1000 #define AREAPORTAL_PRIORITY -1000 -#define DETAIL_PRIORITY -3000 +#define DETAIL_PRIORITY -3000 #define PSIDE_FRONT 1 #define PSIDE_BACK 2 @@ -274,7 +283,7 @@ #define RAD_LUXEL_SIZE 3 #define SUPER_LUXEL_SIZE 4 #define SUPER_FLAG_SIZE 4 -#define FLAG_FORCE_SUBSAMPLING 1 +#define FLAG_FORCE_SUBSAMPLING 1 #define FLAG_ALREADY_SUBSAMPLED 2 #define SUPER_ORIGIN_SIZE 3 #define SUPER_NORMAL_SIZE 4 @@ -548,6 +557,13 @@ typedef enum } miniMapMode_t; +typedef enum +{ + MINIMAP_SIDECAR_NONE, + MINIMAP_SIDECAR_UNVANQUISHED +} +miniMapSidecarFormat_t; + typedef struct game_s { char *arg; /* -game matches this */ @@ -558,6 +574,7 @@ typedef struct game_s int maxLMSurfaceVerts; /* default maximum meta surface verts */ int maxSurfaceVerts; /* default maximum surface verts */ int maxSurfaceIndexes; /* default maximum surface indexes (tris * 3) */ + qboolean texFile; /* enable per shader prefix surface flags and .tex file */ qboolean emitFlares; /* when true, emit flare surfaces */ char *flareShader; /* default flare shader (MUST BE SET) */ qboolean wolfLight; /* when true, lights work like wolf q3map */ @@ -583,6 +600,7 @@ typedef struct game_s qboolean miniMapKeepAspect; /* minimap keep aspect ratio by letterboxing */ miniMapMode_t miniMapMode; /* minimap mode */ char *miniMapNameFormat; /* minimap name format */ + miniMapSidecarFormat_t miniMapSidecarFormat; /* minimap sidecar format */ char *bspIdent; /* 4-letter bsp file prefix */ int bspVersion; /* bsp version to use */ qboolean lumpSwap; /* cod-style len/ofs order */ @@ -827,7 +845,7 @@ typedef struct face_s struct face_s *next; int planenum; int priority; - //qboolean checked; + //qboolean checked; int compileFlags; winding_t *w; } @@ -959,8 +977,9 @@ typedef struct parseMesh_s shaderInfo_t *shaderInfo; shaderInfo_t *celShader; /* :) */ + /* jal : entity based _lightmapsamplesize */ + int lightmapSampleSize; /* ydnar: gs mods */ - int lightmapSampleSize; /* jal : entity based _lightmapsamplesize */ float lightmapScale; vec3_t eMins, eMaxs; indexMap_t *im; @@ -1002,7 +1021,7 @@ typedef enum } surfaceType_t; -char *surfaceTypes[ NUM_SURFACE_TYPES ] +Q_EXTERN char *surfaceTypes[ NUM_SURFACE_TYPES ] #ifndef MAIN_C ; #else @@ -1235,6 +1254,7 @@ typedef struct { int num; qboolean hint; /* true if this portal was created from a hint splitter */ + qboolean sky; /* true if this portal belongs to a sky leaf */ qboolean removed; visPlane_t plane; /* normal pointing into neighbor */ int leaf; /* neighbor */ @@ -1467,7 +1487,7 @@ typedef struct rawLightmap_s float *bspLuxels[ MAX_LIGHTMAPS ]; float *radLuxels[ MAX_LIGHTMAPS ]; float *superLuxels[ MAX_LIGHTMAPS ]; - unsigned char *superFlags; + unsigned char *superFlags; float *superOrigins; float *superNormals; int *superClusters; @@ -1512,32 +1532,53 @@ surfaceInfo_t; /* main.c */ vec_t Random( void ); -int BSPInfo( int count, char **fileNames ); -int ScaleBSPMain( int argc, char **argv ); -int ConvertMain( int argc, char **argv ); +char *Q_strncpyz( char *dst, const char *src, size_t len ); +char *Q_strcat( char *dst, size_t dlen, const char *src ); +char *Q_strncat( char *dst, size_t dlen, const char *src, size_t slen ); +/* help.c */ +void HelpMain(const char* arg); /* path_init.c */ game_t *GetGame( char *arg ); void InitPaths( int *argc, char **argv ); +/* fixaas.c */ +int FixAASMain( int argc, char **argv ); + + /* bsp.c */ int BSPMain( int argc, char **argv ); +/* bsp_analyze.c */ +int AnalyzeBSPMain( int argc, char **argv ); + + +/* bsp_info.c */ +int BSPInfoMain( int count, char **fileNames ); + +/* bsp_scale.c */ +int ScaleBSPMain( int argc, char **argv ); + +/* minimap.c */ +int MiniMapBSPMain( int argc, char **argv ); + +/* convert_bsp.c */ +int ConvertBSPMain( int argc, char **argv ); + + /* convert_map.c */ int ConvertBSPToMap( char *bspName ); int ConvertBSPToMap_BP( char *bspName ); - /* convert_ase.c */ int ConvertBSPToASE( char *bspName ); /* convert_obj.c */ int ConvertBSPToOBJ( char *bspName ); - /* brush.c */ sideRef_t *AllocSideRef( side_t *side, sideRef_t *next ); int CountBrushList( brush_t *brushes ); @@ -1610,12 +1651,12 @@ void MakeTreePortals( tree_t *tree ); /* leakfile.c */ -xmlNodePtr LeakFile( tree_t *tree ); +xmlNodePtr LeakFile( tree_t *tree, const char *lineFilePath ); /* prtfile.c */ void NumberClusters( tree_t *tree ); -void WritePortalFile( tree_t *tree ); +void WritePortalFile( tree_t *tree, const char *portalFilePath ); /* writebsp.c */ @@ -1625,7 +1666,7 @@ void SetLightStyles( void ); int EmitShader( const char *shader, int *contentFlags, int *surfaceFlags ); void BeginBSPFile( void ); -void EndBSPFile( qboolean do_write ); +void EndBSPFile( qboolean do_write, const char *BSPFilePath, const char *surfaceFilePath ); void EmitBrushes( brush_t *brushes, int *firstBrush, int *numBrushes ); void EmitFogs( void ); @@ -1737,8 +1778,8 @@ int GetSurfaceExtraMinSampleSize( int num ); float GetSurfaceExtraLongestCurve( int num ); void GetSurfaceExtraLightmapAxis( int num, vec3_t lightmapAxis ); -void WriteSurfaceExtraFile( const char *path ); -void LoadSurfaceExtraFile( const char *path ); +void WriteSurfaceExtraFile( const char *surfaceFilePath ); +void LoadSurfaceExtraFile( const char *surfaceFilePath ); /* decals.c */ @@ -1792,6 +1833,7 @@ void RadFreeLights(); /* light_ydnar.c */ void ColorToBytes( const float *color, byte *colorBytes, float scale ); +void ColorToBytesNonZero( const float *color, byte *colorBytes, float scale ); void SmoothNormals( void ); void MapRawLightmap( int num ); @@ -1809,7 +1851,7 @@ void FloodLightRawLightmap( int num ); void IlluminateRawLightmap( int num ); void IlluminateVertexes( int num ); -void SetupBrushesFlags( int mask_any, int test_any, int mask_all, int test_all ); +void SetupBrushesFlags( unsigned int mask_any, unsigned int test_any, unsigned int mask_all, unsigned int test_all ); void SetupBrushes( void ); void SetupClusters( void ); qboolean ClusterVisible( int a, int b ); @@ -1832,7 +1874,12 @@ int ImportLightmapsMain( int argc, char **argv ); void SetupSurfaceLightmaps( void ); void StitchSurfaceLightmaps( void ); -void StoreSurfaceLightmaps( void ); +void StoreSurfaceLightmaps( qboolean fastLightmapSearch, qboolean storeForReal ); + + +/* exportents.c */ +void ExportEntities( void ); +int ExportEntitiesMain( int argc, char **argv ); /* image.c */ @@ -1883,6 +1930,11 @@ void LoadBSPFile( const char *filename ); void WriteBSPFile( const char *filename ); void PrintBSPFileSizes( void ); +void WriteTexFile( char *name ); +void LoadSurfaceFlags( char *filename ); +int GetSurfaceParm( const char *tex ); +void RestoreSurfaceFlags( char *filename ); + epair_t *ParseEPair( void ); void ParseEntities( void ); void UnparseEntities( void ); @@ -1892,7 +1944,7 @@ qboolean KeyExists( const entity_t *ent, const char *key ); / const char *ValueForKey( const entity_t *ent, const char *key ); int IntForKey( const entity_t *ent, const char *key ); vec_t FloatForKey( const entity_t *ent, const char *key ); -void GetVectorForKey( const entity_t *ent, const char *key, vec3_t vec ); +qboolean GetVectorForKey( const entity_t *ent, const char *key, vec3_t vec ); entity_t *FindTargetEntity( const char *target ); void GetEntityShadowFlags( const entity_t *ent, const entity_t *ent2, int *castShadows, int *recvShadows ); void InjectCommandLine( char **argv, int beginArgs, int endArgs ); @@ -1916,14 +1968,6 @@ void WriteRBSPFile( const char *filename ); ------------------------------------------------------------------------------- */ -#ifdef MAIN_C - #define Q_EXTERN - #define Q_ASSIGN( a ) = a -#else - #define Q_EXTERN extern - #define Q_ASSIGN( a ) -#endif - /* game support */ Q_EXTERN game_t games[] #ifndef MAIN_C @@ -1933,19 +1977,21 @@ Q_EXTERN game_t games[] { #include "game_quake3.h" , - #include "game_quakelive.h" /* most be after game_quake3.h as they share defines! */ + #include "game_quakelive.h" /* must be after game_quake3.h as they share defines! */ , - #include "game_nexuiz.h" /* most be after game_quake3.h as they share defines! */ + #include "game_nexuiz.h" /* must be after game_quake3.h as they share defines! */ , - #include "game_xonotic.h" /* most be after game_quake3.h as they share defines! */ + #include "game_xonotic.h" /* must be after game_quake3.h as they share defines! */ , #include "game_tremulous.h" /*LinuxManMikeC: must be after game_quake3.h, depends on #define's set in it */ + , + #include "game_unvanquished.h" /* must be after game_tremulous.h as they share defines! */ , #include "game_tenebrae.h" , #include "game_wolf.h" , - #include "game_wolfet.h" /* most be after game_wolf.h as they share defines! */ + #include "game_wolfet.h" /* must be after game_wolf.h as they share defines! */ , #include "game_etut.h" , @@ -1953,13 +1999,15 @@ Q_EXTERN game_t games[] , #include "game_sof2.h" , - #include "game_jk2.h" /* most be after game_sof2.h as they share defines! */ + #include "game_jk2.h" /* must be after game_sof2.h as they share defines! */ , - #include "game_ja.h" /* most be after game_jk2.h as they share defines! */ + #include "game_ja.h" /* must be after game_jk2.h as they share defines! */ , #include "game_qfusion.h" /* qfusion game */ , #include "game_reaction.h" /* must be after game_quake3.h */ + , + #include "game_smokinguns.h" /* must be after game_quake3.h */ , #include "game_darkplaces.h" /* vortex: darkplaces q1 engine */ , @@ -1996,7 +2044,6 @@ Q_EXTERN float jitters[ MAX_JITTERS ]; /* commandline arguments */ -Q_EXTERN qboolean verbose; Q_EXTERN qboolean verboseEntities Q_ASSIGN( qfalse ); Q_EXTERN qboolean force Q_ASSIGN( qfalse ); Q_EXTERN qboolean infoMode Q_ASSIGN( qfalse ); @@ -2015,8 +2062,8 @@ Q_EXTERN qboolean nofog Q_ASSIGN( qfalse ); Q_EXTERN qboolean noHint Q_ASSIGN( qfalse ); /* ydnar */ Q_EXTERN qboolean renameModelShaders Q_ASSIGN( qfalse ); /* ydnar */ Q_EXTERN qboolean skyFixHack Q_ASSIGN( qfalse ); /* ydnar */ -Q_EXTERN qboolean bspAlternateSplitWeights Q_ASSIGN( qfalse ); /* 27 */ -Q_EXTERN qboolean deepBSP Q_ASSIGN( qfalse ); /* div0 */ +Q_EXTERN qboolean bspAlternateSplitWeights Q_ASSIGN( qfalse ); /* 27 */ +Q_EXTERN qboolean deepBSP Q_ASSIGN( qfalse ); /* div0 */ Q_EXTERN qboolean maxAreaFaceSurface Q_ASSIGN( qfalse ); /* divVerent */ Q_EXTERN int patchSubdivisions Q_ASSIGN( 8 ); /* ydnar: -patchmeta subdivisions */ @@ -2500,7 +2547,7 @@ Q_EXTERN int allocatedBSPBrushSides Q_ASSIGN( 0 ); Q_EXTERN bspBrushSide_t* bspBrushSides Q_ASSIGN( NULL ); Q_EXTERN int numBSPLightBytes Q_ASSIGN( 0 ); -Q_EXTERN byte *bspLightBytes Q_ASSIGN( NULL ); +Q_EXTERN byte *bspLightBytes Q_ASSIGN( NULL ); //% Q_EXTERN int numBSPGridPoints Q_ASSIGN( 0 ); //% Q_EXTERN byte *bspGridPoints Q_ASSIGN( NULL ); @@ -2512,11 +2559,11 @@ Q_EXTERN int numBSPVisBytes Q_ASSIGN( 0 ); Q_EXTERN byte bspVisBytes[ MAX_MAP_VISIBILITY ]; Q_EXTERN int numBSPDrawVerts Q_ASSIGN( 0 ); -Q_EXTERN bspDrawVert_t *bspDrawVerts Q_ASSIGN( NULL ); +Q_EXTERN bspDrawVert_t *bspDrawVerts Q_ASSIGN( NULL ); Q_EXTERN int numBSPDrawIndexes Q_ASSIGN( 0 ); Q_EXTERN int allocatedBSPDrawIndexes Q_ASSIGN( 0 ); -Q_EXTERN int *bspDrawIndexes Q_ASSIGN( NULL ); +Q_EXTERN int *bspDrawIndexes Q_ASSIGN( NULL ); Q_EXTERN int numBSPDrawSurfaces Q_ASSIGN( 0 ); Q_EXTERN bspDrawSurface_t *bspDrawSurfaces Q_ASSIGN( NULL ); @@ -2527,27 +2574,45 @@ Q_EXTERN bspFog_t bspFogs[ MAX_MAP_FOGS ]; Q_EXTERN int numBSPAds Q_ASSIGN( 0 ); Q_EXTERN bspAdvertisement_t bspAds[ MAX_MAP_ADVERTISEMENTS ]; -#define AUTOEXPAND_BY_REALLOC( ptr, reqitem, allocated, def ) \ +// Used for tex file support, Smokin'Guns globals +Q_EXTERN qboolean compile_map; + +#define _AUTOEXPAND_BY_REALLOC( ptr, reqitem, allocated, def, fillWithZeros ) \ do \ { \ + int prevAllocated = allocated; \ if ( reqitem >= allocated ) \ { \ if ( allocated == 0 ) { \ - allocated = def; } \ + allocated = def; \ + } \ while ( reqitem >= allocated && allocated ) \ + { \ allocated *= 2; \ + } \ if ( !allocated || allocated > 2147483647 / (int)sizeof( *ptr ) ) \ { \ - Error( # ptr " over 2 GB" ); \ + Error( #ptr " over 2 GB" ); \ } \ ptr = realloc( ptr, sizeof( *ptr ) * allocated ); \ if ( !ptr ) { \ - Error( # ptr " out of memory" ); } \ + Error( #ptr " out of memory" ); \ + } \ + if ( fillWithZeros ) \ + { \ + memset( ptr + ( sizeof( *ptr ) * prevAllocated ), 0 , sizeof( *ptr ) * ( allocated - prevAllocated ) ); \ + } \ } \ } \ while ( 0 ) -#define AUTOEXPAND_BY_REALLOC_BSP( suffix, def ) AUTOEXPAND_BY_REALLOC( bsp ## suffix, numBSP ## suffix, allocatedBSP ## suffix, def ) +#define AUTOEXPAND_BY_REALLOC( ptr, reqitem, allocated, def ) _AUTOEXPAND_BY_REALLOC( ptr, reqitem, allocated, def, qfalse ) + +#define AUTOEXPAND_BY_REALLOC0( ptr, reqitem, allocated, def ) _AUTOEXPAND_BY_REALLOC( ptr, reqitem, allocated, def, qtrue ) + +#define AUTOEXPAND_BY_REALLOC_BSP( suffix, def ) AUTOEXPAND_BY_REALLOC( bsp##suffix, numBSP##suffix, allocatedBSP##suffix, def ) + +#define AUTOEXPAND_BY_REALLOC0_BSP( suffix, def ) AUTOEXPAND_BY_REALLOC0( bsp##suffix, numBSP##suffix, allocatedBSP##suffix, def ) #define Image_LinearFloatFromsRGBFloat( c ) ( ( ( c ) <= 0.04045f ) ? ( c ) * ( 1.0f / 12.92f ) : (float)pow( ( ( c ) + 0.055f ) * ( 1.0f / 1.055f ), 2.4f ) ) #define Image_sRGBFloatFromLinearFloat( c ) ( ( ( c ) < 0.0031308f ) ? ( c ) * 12.92f : 1.055f * (float)pow( ( c ), 1.0f / 2.4f ) - 0.055f )