]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/q3map2.h
another experimental change: better handle leaky maps
[xonotic/netradiant.git] / tools / quake3 / q3map2 / q3map2.h
index 83c756d4bdebf9504d079f6b99968b844fc1cde4..abde6c8573ce2d022e3cc6bbb9fc7a60a0a98df5 100644 (file)
@@ -122,6 +122,12 @@ constants
 
 ------------------------------------------------------------------------------- */
 
+/* temporary hacks and tests (please keep off in SVN to prevent anyone's legacy map from screwing up) */
+/* 2011-01-10 TTimo says we should turn these on in SVN, so turning on now */
+#define Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES  1
+#define Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX            1
+#define Q3MAP2_EXPERIMENTAL_SNAP_PLANE_FIX             1
+
 /* general */
 #define MAX_QPATH                              64
 
@@ -136,7 +142,7 @@ constants
 #define DEF_RADIOSITY_BOUNCE   1.0f    /* ydnar: default to 100% re-emitted light */
 
 #define        MAX_SHADER_INFO                 8192
-#define MAX_CUST_SURFACEPARMS  64
+#define MAX_CUST_SURFACEPARMS  256
 
 #define        SHADER_MAX_VERTEXES             1000
 #define        SHADER_MAX_INDEXES              (6 * SHADER_MAX_VERTEXES)
@@ -311,9 +317,6 @@ abstracted bsp file
 #define MAX_LIGHTMAP_SHADERS   256
 
 /* ok to increase these at the expense of more memory */
-#define        MAX_MAP_ENTITIES                0x1000          //%     0x800   /* ydnar */
-#define        MAX_MAP_ENTSTRING               0x80000         //%     0x40000 /* ydnar */
-
 #define        MAX_MAP_AREAS                   0x100           /* MAX_MAP_AREA_BYTES in q_shared must match! */
 #define        MAX_MAP_FOGS                    30                      //& 0x100       /* RBSP (32 - world fog - goggles) */
 #define        MAX_MAP_LEAFS                   0x20000
@@ -562,6 +565,9 @@ typedef struct game_s
        qboolean                        wolfLight;                                              /* when true, lights work like wolf q3map  */
        int                                     lightmapSize;                                   /* bsp lightmap width/height */
        float                           lightmapGamma;                                  /* default lightmap gamma */
+       qboolean                        lightmapsRGB;                                   /* default lightmap sRGB mode */
+       qboolean                        texturesRGB;                                    /* default texture sRGB mode */
+       qboolean                        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) */
@@ -1524,11 +1530,15 @@ int                                                     BSPMain( 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 );
@@ -1575,11 +1585,11 @@ void                                            MakeNormalVectors( vec3_t forward, vec3_t right, vec3_t up );
 
 
 /* map.c */
-void                                           LoadMapFile( char *filename, qboolean onlyLights );
+void                                           LoadMapFile( char *filename, qboolean onlyLights, qboolean noCollapseGroups );
 int                                                    FindFloatPlane( vec3_t normal, vec_t dist, int numPoints, vec3_t *points );
 int                                                    PlaneTypeForNormal( vec3_t normal );
 void                                           AddBrushBevels( void );
-brush_t                                                *FinishBrush( void );
+brush_t                                                *FinishBrush(qboolean noCollapseGroups);
 
 
 /* portals.c */
@@ -1589,7 +1599,10 @@ void                                             SplitNodePortals( node_t *node );
 
 qboolean                                       PortalPassable( portal_t *p );
 
-qboolean                                       FloodEntities( tree_t *tree );
+#define FLOODENTITIES_LEAKED 1
+#define FLOODENTITIES_GOOD 0
+#define FLOODENTITIES_EMPTY -1
+int                                            FloodEntities( tree_t *tree );
 void                                           FillOutside( node_t *headnode);
 void                                           FloodAreas( tree_t *tree);
 face_t                                         *VisibleFaces( entity_t *e, tree_t *tree );
@@ -1614,7 +1627,7 @@ void                                              SetLightStyles( void );
 int                                                    EmitShader( const char *shader, int *contentFlags, int *surfaceFlags );
 
 void                                           BeginBSPFile( void );
-void                                           EndBSPFile( void );
+void                                           EndBSPFile( qboolean do_write );
 void                                           EmitBrushes( brush_t *brushes, int *firstBrush, int *numBrushes );
 void                                           EmitFogs( void );
 
@@ -1734,6 +1747,8 @@ void                                              LoadSurfaceExtraFile( const char *path );
 void                                           ProcessDecals( void );
 void                                           MakeEntityDecals( entity_t *e );
 
+/* map.c */
+void                                           TextureAxisFromPlane( plane_t *pln, vec3_t xv, vec3_t yv );
 
 /* brush_primit.c */
 void                                           ComputeAxisBase( vec3_t normal, vec3_t texX, vec3_t texY);
@@ -1796,6 +1811,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                                           SetupBrushes( void );
 void                                           SetupClusters( void );
 qboolean                                       ClusterVisible( int a, int b );
@@ -1846,6 +1862,7 @@ void                                              EmitVertexRemapShader( char *from, char *to );
 
 void                                           LoadShaderInfo( void );
 shaderInfo_t                           *ShaderInfoForShader( const char *shader );
+shaderInfo_t                           *ShaderInfoForShaderNull( const char *shader );
 
 
 /* bspfile_abstract.c */
@@ -1944,6 +1961,8 @@ Q_EXTERN game_t                           games[]
                                                                ,
                                                                #include "game_qfusion.h"       /* qfusion game */
                                                                ,
+                                                               #include "game_reaction.h" /* must be after game_quake3.h */
+                                                               ,
                                                                #include "game_darkplaces.h"    /* vortex: darkplaces q1 engine */
                                                                ,
                                                                #include "game_dq.h"    /* vortex: deluxe quake game ( darkplaces q1 engine) */
@@ -2019,8 +2038,35 @@ Q_EXTERN qboolean                        debugInset Q_ASSIGN( qfalse );
 Q_EXTERN qboolean                      debugPortals Q_ASSIGN( qfalse );
 Q_EXTERN qboolean           lightmapTriangleCheck Q_ASSIGN(qfalse);
 Q_EXTERN qboolean           lightmapExtraVisClusterNudge Q_ASSIGN(qfalse);
+Q_EXTERN qboolean           lightmapFill Q_ASSIGN(qfalse);
+Q_EXTERN int                           metaAdequateScore Q_ASSIGN( -1 );
+Q_EXTERN int                           metaGoodScore Q_ASSIGN( -1 );
+Q_EXTERN float                         metaMaxBBoxDistance Q_ASSIGN( -1 );
+
+#if Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX
+// Increasing the normalEpsilon to compensate for new logic in SnapNormal(), where
+// this epsilon is now used to compare against 0 components instead of the 1 or -1
+// components.  Unfortunately, normalEpsilon is also used in PlaneEqual().  So changing
+// this will affect anything that calls PlaneEqual() as well (which are, at the time
+// of this writing, FindFloatPlane() and AddBrushBevels()).
+Q_EXTERN double                                normalEpsilon Q_ASSIGN(0.00005);
+#else
 Q_EXTERN double                                normalEpsilon Q_ASSIGN( 0.00001 );
+#endif
+
+#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
+// NOTE: This distanceEpsilon is too small if parts of the map are at maximum world
+// extents (in the range of plus or minus 2^16).  The smallest epsilon at values
+// close to 2^16 is about 0.007, which is greater than distanceEpsilon.  Therefore,
+// maps should be constrained to about 2^15, otherwise slightly undesirable effects
+// may result.  The 0.01 distanceEpsilon used previously is just too coarse in my
+// opinion.  The real fix for this problem is to have 64 bit distances and then make
+// this epsilon even smaller, or to constrain world coordinates to plus minus 2^15
+// (or even 2^14).
+Q_EXTERN double                                distanceEpsilon Q_ASSIGN(0.005);
+#else
 Q_EXTERN double                                distanceEpsilon Q_ASSIGN( 0.01 );
+#endif
 
 
 /* bsp */
@@ -2183,6 +2229,7 @@ Q_EXTERN qboolean                 debugDeluxemap Q_ASSIGN( qfalse );
 Q_EXTERN int                           deluxemode Q_ASSIGN( 0 );       /* deluxemap format (0 - modelspace, 1 - tangentspace with renormalization, 2 - tangentspace without renormalization) */
 
 Q_EXTERN qboolean                      fast Q_ASSIGN( qfalse );
+Q_EXTERN qboolean                      fastpoint Q_ASSIGN( qtrue );
 Q_EXTERN qboolean                      faster Q_ASSIGN( qfalse );
 Q_EXTERN qboolean                      fastgrid Q_ASSIGN( qfalse );
 Q_EXTERN qboolean                      fastbounce Q_ASSIGN( qfalse );
@@ -2226,6 +2273,7 @@ Q_EXTERN qboolean                                 floodlight_lowquality Q_ASSIGN( qfalse );
 Q_EXTERN vec3_t                                                floodlightRGB;
 Q_EXTERN float                                         floodlightIntensity Q_ASSIGN( 512.0f );
 Q_EXTERN float                                         floodlightDistance Q_ASSIGN( 1024.0f );
+Q_EXTERN float                                         floodlightDirectionScale Q_ASSIGN( 1.0f );
 
 Q_EXTERN qboolean                      dump Q_ASSIGN( qfalse );
 Q_EXTERN qboolean                      debug Q_ASSIGN( qfalse );
@@ -2240,6 +2288,7 @@ Q_EXTERN float                            maxMapDistance Q_ASSIGN( 0 );
 
 /* for run time tweaking of light sources */
 Q_EXTERN float                         pointScale Q_ASSIGN( 7500.0f );
+Q_EXTERN float                         spotScale Q_ASSIGN( 7500.0f );
 Q_EXTERN float                         areaScale Q_ASSIGN( 0.25f );
 Q_EXTERN float                         skyScale Q_ASSIGN( 1.0f );
 Q_EXTERN float                         bounceScale Q_ASSIGN( 0.25f );
@@ -2256,7 +2305,10 @@ Q_EXTERN qboolean                        inGrid Q_ASSIGN(0);
 
 /* ydnar: lightmap gamma/compensation */
 Q_EXTERN float                         lightmapGamma Q_ASSIGN( 1.0f );
-Q_EXTERN float                         lightmapExposure Q_ASSIGN( 1.0f );
+Q_EXTERN float                         lightmapsRGB Q_ASSIGN( qfalse );
+Q_EXTERN float                         texturesRGB Q_ASSIGN( qfalse );
+Q_EXTERN float                         colorsRGB Q_ASSIGN( qfalse );
+Q_EXTERN float                         lightmapExposure Q_ASSIGN( 0.0f );
 Q_EXTERN float                         lightmapCompensate Q_ASSIGN( 1.0f );
 
 /* ydnar: for runtime tweaking of falloff tolerance */
@@ -2267,6 +2319,7 @@ Q_EXTERN float                            linearScale Q_ASSIGN( 1.0f / 8000.0f );
 
 // for .ase conversion
 Q_EXTERN qboolean                      shadersAsBitmap Q_ASSIGN( qfalse );
+Q_EXTERN qboolean                      lightmapsAsTexcoord Q_ASSIGN( qfalse );
 
 Q_EXTERN light_t                       *lights;
 Q_EXTERN int                           numPointLights;
@@ -2406,7 +2459,8 @@ abstracted bsp globals
 
 Q_EXTERN int                           numEntities Q_ASSIGN( 0 );
 Q_EXTERN int                           numBSPEntities Q_ASSIGN( 0 );
-Q_EXTERN entity_t                      entities[ MAX_MAP_ENTITIES ];
+Q_EXTERN int                           allocatedEntities Q_ASSIGN( 0 );
+Q_EXTERN entity_t*                     entities Q_ASSIGN(NULL);
 
 Q_EXTERN int                           numBSPModels Q_ASSIGN( 0 );
 Q_EXTERN int                           allocatedBSPModels Q_ASSIGN( 0 );
@@ -2496,5 +2550,8 @@ Q_EXTERN bspAdvertisement_t       bspAds[ MAX_MAP_ADVERTISEMENTS ];
 
 #define AUTOEXPAND_BY_REALLOC_BSP(suffix, def) AUTOEXPAND_BY_REALLOC(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)
+
 /* end marker */
 #endif