// fprintf(stderr, "brushside with %s: %d matches (%f area)\n", buildSide->shaderInfo->shader, matches, best);
}
+static void ConvertOriginBrush( FILE *f, int num, vec3_t origin )
+{
+ char pattern[6][5][3] = {
+ { "+++", "+-+", "-++", " - ", "- " },
+ { "+++", "-++", "++-", "+ ", " +" },
+ { "+++", "++-", "+-+", " - ", " +" },
+ { "---", "+--", "-+-", " - ", "+ " },
+ { "---", "--+", "+--", "- ", " +" },
+ { "---", "-+-", "--+", " + ", " +" }
+ };
+ int i;
+#define S(a,b,c) (pattern[a][b][c] == '+' ? +1 : pattern[a][b][c] == '-' ? -1 : 0)
+#define FRAC(x) ((x) - floor(x))
+
+ /* start brush */
+ fprintf( f, "\t// brush %d\n", num );
+ fprintf( f, "\t{\n" );
+ fprintf( f, "\tbrushDef\n" );
+ fprintf( f, "\t{\n" );
+ /* print brush side */
+ /* ( 640 24 -224 ) ( 448 24 -224 ) ( 448 -232 -224 ) common/caulk 0 48 0 0.500000 0.500000 0 0 0 */
+
+ for(i = 0; i < 6; ++i)
+ fprintf( f, "\t\t( %.3f %.3f %.3f ) ( %.3f %.3f %.3f ) ( %.3f %.3f %.3f ) ( ( %.8f %.8f %.8f ) ( %.8f %.8f %.8f ) ) %s %d 0 0\n",
+ origin[0] + 8 * S(i,0,0), origin[1] + 8 * S(i,0,1), origin[2] + 8 * S(i,0,2),
+ origin[0] + 8 * S(i,1,0), origin[1] + 8 * S(i,1,1), origin[2] + 8 * S(i,1,2),
+ origin[0] + 8 * S(i,2,0), origin[1] + 8 * S(i,2,1), origin[2] + 8 * S(i,2,2),
+ 1/16.0, 0.0, FRAC((S(i,3,0) * origin[0] + S(i,3,1) * origin[1] + S(i,3,2) * origin[2]) / 16.0 + 0.5),
+ 0.0, 1/16.0, FRAC((S(i,4,0) * origin[0] + S(i,4,1) * origin[1] + S(i,4,2) * origin[2]) / 16.0 + 0.5),
+ "common/origin",
+ 0
+ );
+#undef FRAC
+#undef S
+
+ /* end brush */
+ fprintf( f, "\t}\n" );
+ fprintf( f, "\t}\n\n" );
+}
+
static void ConvertBrush( FILE *f, int num, bspBrush_t *brush, vec3_t origin )
{
int i, j;
buildBrush = AllocBrush( 512 );
buildBrush->entityNum = 0;
buildBrush->original = buildBrush;
+
+ if(origin[0] != 0 || origin[1] != 0 || origin[2] != 0)
+ ConvertOriginBrush(f, -1, origin);
/* go through each brush in the model */
for( i = 0; i < model->numBSPBrushes; i++ )
exports entity key/value pairs to a map file
*/
-static void ConvertEPairs( FILE *f, entity_t *e )
+static void ConvertEPairs( FILE *f, entity_t *e, qboolean skip_origin )
{
epair_t *ep;
if( !Q_stricmp( ep->key, "model" ) && ep->value[ 0 ] == '*' )
continue;
+ /* ignore origin keys if skip_origin is set */
+ if( skip_origin && !Q_stricmp( ep->key, "origin" ) )
+ continue;
+
/* emit the epair */
fprintf( f, "\t\"%s\" \"%s\"\n", ep->key, ep->value );
}
fprintf( f, "// entity %d\n", i );
fprintf( f, "{\n" );
- /* export keys */
- ConvertEPairs( f, e );
- fprintf( f, "\n" );
-
/* get model num */
if( i == 0 )
modelNum = 0;
modelNum = -1;
}
+ /* export keys */
+ ConvertEPairs( f, e, modelNum >= 0 );
+ fprintf( f, "\n" );
+
/* only handle bsp models */
if( modelNum >= 0 )
{