- extern double backface;
- BRUSH brush;
- int contents;
- int i, j;
- float Steep;
- vec3_t PlaneNormal,SurfNormal;
- bool CheckAngle;
- vec3_t t[2];
-
- // if texture2 is identical to texture0, there's no need to
- // check surface angle
- if(!g_strcasecmp(texture0,texture2) || !strlen(texture2))
- CheckAngle = FALSE;
- else
- {
- CheckAngle = TRUE;
- Steep = (float)cos((double)SlantAngle/57.2957795);
- switch(Plane)
- {
- case PLANE_XY0: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break;
- case PLANE_XY1: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]=-1.;break;
- case PLANE_XZ0: PlaneNormal[0]= 0.;PlaneNormal[1]= 1.;PlaneNormal[2]= 1.;break;
- case PLANE_XZ1: PlaneNormal[0]= 0.;PlaneNormal[1]=-1.;PlaneNormal[2]= 1.;break;
- case PLANE_YZ0: PlaneNormal[0]= 1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break;
- case PLANE_YZ1: PlaneNormal[0]=-1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break;
- }
- }
-
- contents = 0;
- if(surf)
- {
- if(UseDetail) contents += CONTENTS_DETAIL;
- if(UseLadder) contents += CONTENTS_LADDER;
- }
-
- OpenFuncGroup();
- for(i=0; i<NumTris; i++)
- {
- brush.Number = i;
- brush.NumFaces = 5;
- // front
- brush.face[0].v[0][0] = Node[Tri[i].v[0]].p[0];
- brush.face[0].v[0][1] = Node[Tri[i].v[0]].p[1];
- brush.face[0].v[0][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[0].v[1][0] = Node[Tri[i].v[2]].p[0];
- brush.face[0].v[1][1] = Node[Tri[i].v[2]].p[1];
- brush.face[0].v[1][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[0].v[2][0] = Node[Tri[i].v[1]].p[0];
- brush.face[0].v[2][1] = Node[Tri[i].v[1]].p[1];
- brush.face[0].v[2][2] = Node[Tri[i].v[1]].p[2];
-
- if(offset != 0)
- {
- switch(Plane)
- {
- case PLANE_XY0:
- brush.face[0].v[0][2] += offset;
- brush.face[0].v[1][2] += offset;
- brush.face[0].v[1][2] += offset;
- break;
- case PLANE_XY1:
- brush.face[0].v[0][2] -= offset;
- brush.face[0].v[1][2] -= offset;
- brush.face[0].v[1][2] -= offset;
- break;
- case PLANE_XZ0:
- brush.face[0].v[0][1] += offset;
- brush.face[0].v[1][1] += offset;
- brush.face[0].v[1][1] += offset;
- break;
- case PLANE_XZ1:
- brush.face[0].v[0][1] -= offset;
- brush.face[0].v[1][1] -= offset;
- brush.face[0].v[1][1] -= offset;
- break;
- case PLANE_YZ0:
- brush.face[0].v[0][0] += offset;
- brush.face[0].v[1][0] += offset;
- brush.face[0].v[1][0] += offset;
- break;
- case PLANE_YZ1:
- brush.face[0].v[0][0] -= offset;
- brush.face[0].v[1][0] -= offset;
- brush.face[0].v[1][0] -= offset;
- break;
- }
- }
- switch(Plane)
- {
- case PLANE_XZ0:
- case PLANE_XZ1:
- // back
- brush.face[1].v[0][0] = Node[Tri[i].v[0]].p[0];
- brush.face[1].v[0][1] = (float)backface;
- brush.face[1].v[0][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[1].v[1][0] = Node[Tri[i].v[1]].p[0];
- brush.face[1].v[1][1] = (float)backface;
- brush.face[1].v[1][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[1].v[2][0] = Node[Tri[i].v[2]].p[0];
- brush.face[1].v[2][1] = (float)backface;
- brush.face[1].v[2][2] = Node[Tri[i].v[2]].p[2];
-
- // 0-1 side
- brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
- brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
- brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
- brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
- brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[2].v[2][0] = Node[Tri[i].v[1]].p[0];
- brush.face[2].v[2][1] = (float)backface;
- brush.face[2].v[2][2] = Node[Tri[i].v[1]].p[2];
-
- // 1-2 side
- brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
- brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
- brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
- brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
- brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[3].v[2][0] = Node[Tri[i].v[2]].p[0];
- brush.face[3].v[2][1] = (float)backface;
- brush.face[3].v[2][2] = Node[Tri[i].v[2]].p[2];
-
- // 2-0 side
- brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
- brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
- brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
- brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
- brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[4].v[2][0] = Node[Tri[i].v[0]].p[0];
- brush.face[4].v[2][1] = (float)backface;
- brush.face[4].v[2][2] = Node[Tri[i].v[0]].p[2];
- break;
- case PLANE_YZ0:
- case PLANE_YZ1:
- // back
- brush.face[1].v[0][0] = (float)backface;
- brush.face[1].v[0][1] = Node[Tri[i].v[0]].p[1];
- brush.face[1].v[0][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[1].v[1][0] = (float)backface;
- brush.face[1].v[1][1] = Node[Tri[i].v[1]].p[1];
- brush.face[1].v[1][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[1].v[2][0] = (float)backface;
- brush.face[1].v[2][1] = Node[Tri[i].v[2]].p[1];
- brush.face[1].v[2][2] = Node[Tri[i].v[2]].p[2];
-
- // 0-1 side
- brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
- brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
- brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
- brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
- brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[2].v[2][0] = (float)backface;
- brush.face[2].v[2][1] = Node[Tri[i].v[1]].p[1];
- brush.face[2].v[2][2] = Node[Tri[i].v[1]].p[2];
-
- // 1-2 side
- brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
- brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
- brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
- brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
- brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[3].v[2][0] = (float)backface;
- brush.face[3].v[2][1] = Node[Tri[i].v[2]].p[1];
- brush.face[3].v[2][2] = Node[Tri[i].v[2]].p[2];
-
- // 2-0 side
- brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
- brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
- brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
- brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
- brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[4].v[2][0] = (float)backface;
- brush.face[4].v[2][1] = Node[Tri[i].v[0]].p[1];
- brush.face[4].v[2][2] = Node[Tri[i].v[0]].p[2];
- break;
- default:
- // back
- brush.face[1].v[0][0] = Node[Tri[i].v[0]].p[0];
- brush.face[1].v[0][1] = Node[Tri[i].v[0]].p[1];
- brush.face[1].v[0][2] = (float)backface;
-
- brush.face[1].v[1][0] = Node[Tri[i].v[1]].p[0];
- brush.face[1].v[1][1] = Node[Tri[i].v[1]].p[1];
- brush.face[1].v[1][2] = (float)backface;
-
- brush.face[1].v[2][0] = Node[Tri[i].v[2]].p[0];
- brush.face[1].v[2][1] = Node[Tri[i].v[2]].p[1];
- brush.face[1].v[2][2] = (float)backface;
-
- // 0-1 side
- brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
- brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
- brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
- brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
- brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[2].v[2][0] = Node[Tri[i].v[1]].p[0];
- brush.face[2].v[2][1] = Node[Tri[i].v[1]].p[1];
- brush.face[2].v[2][2] = (float)backface;
-
- // 1-2 side
- brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
- brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
- brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];
-
- brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
- brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
- brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[3].v[2][0] = Node[Tri[i].v[2]].p[0];
- brush.face[3].v[2][1] = Node[Tri[i].v[2]].p[1];
- brush.face[3].v[2][2] = (float)backface;
-
- // 2-0 side
- brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
- brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
- brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];
-
- brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
- brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
- brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];
-
- brush.face[4].v[2][0] = Node[Tri[i].v[0]].p[0];
- brush.face[4].v[2][1] = Node[Tri[i].v[0]].p[1];
- brush.face[4].v[2][2] = (float)backface;
- }
-
- for(j=0; j<5; j++)
- {
- strcpy(brush.face[j].texture,
- (strlen(texture1) ? texture1 : texture0));
- brush.face[j].Shift[0] = (float)TexOffset[0];
- brush.face[j].Shift[1] = (float)TexOffset[1];
- brush.face[j].Rotate = 0.;
- brush.face[j].Scale[0] = (float)TexScale[0];
- brush.face[j].Scale[1] = (float)TexScale[1];
- brush.face[j].Contents = contents;
- if(surf)
- brush.face[j].Surface = 0;
- else
- brush.face[j].Surface = SURF_HINT;
- brush.face[j].Value = 0;
- }
-
- if(CheckAngle)
- {
- XYZVectorSubtract(brush.face[0].v[2],brush.face[0].v[0],t[0]);
- XYZVectorSubtract(brush.face[0].v[1],brush.face[0].v[2],t[1]);
- CrossProduct(t[0],t[1],SurfNormal);
- VectorNormalize(SurfNormal,SurfNormal);
- if(DotProduct(SurfNormal,PlaneNormal) < Steep)
- strcpy(brush.face[0].texture,texture2);
- else
- strcpy(brush.face[0].texture,texture0);
- }
- else
- strcpy(brush.face[0].texture,texture0);
-
- if(surf) brush.face[0].Value = ArghRad2;
- MakeBrush(&brush);
- }
- CloseFuncGroup();
+ extern double backface;
+ BRUSH brush;
+ int contents;
+ int i, j;
+ float Steep;
+ vec3_t PlaneNormal, SurfNormal;
+ bool CheckAngle;
+ vec3_t t[2];
+
+ // if texture2 is identical to texture0, there's no need to
+ // check surface angle
+ if (!g_strcasecmp(texture0, texture2) || !strlen(texture2)) {
+ CheckAngle = FALSE;
+ } else {
+ CheckAngle = TRUE;
+ Steep = (float) cos((double) SlantAngle / 57.2957795);
+ switch (Plane) {
+ case PLANE_XY0:
+ PlaneNormal[0] = 0.;
+ PlaneNormal[1] = 0.;
+ PlaneNormal[2] = 1.;
+ break;
+ case PLANE_XY1:
+ PlaneNormal[0] = 0.;
+ PlaneNormal[1] = 0.;
+ PlaneNormal[2] = -1.;
+ break;
+ case PLANE_XZ0:
+ PlaneNormal[0] = 0.;
+ PlaneNormal[1] = 1.;
+ PlaneNormal[2] = 1.;
+ break;
+ case PLANE_XZ1:
+ PlaneNormal[0] = 0.;
+ PlaneNormal[1] = -1.;
+ PlaneNormal[2] = 1.;
+ break;
+ case PLANE_YZ0:
+ PlaneNormal[0] = 1.;
+ PlaneNormal[1] = 0.;
+ PlaneNormal[2] = 1.;
+ break;
+ case PLANE_YZ1:
+ PlaneNormal[0] = -1.;
+ PlaneNormal[1] = 0.;
+ PlaneNormal[2] = 1.;
+ break;
+ }
+ }
+
+ contents = 0;
+ if (surf) {
+ if (UseDetail) {
+ contents += CONTENTS_DETAIL;
+ }
+ if (UseLadder) {
+ contents += CONTENTS_LADDER;
+ }
+ }
+
+ OpenFuncGroup();
+ for (i = 0; i < NumTris; i++) {
+ brush.Number = i;
+ brush.NumFaces = 5;
+ // front
+ brush.face[0].v[0][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[0].v[0][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[0].v[0][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[0].v[1][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[0].v[1][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[0].v[1][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[0].v[2][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[0].v[2][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[0].v[2][2] = Node[Tri[i].v[1]].p[2];
+
+ if (offset != 0) {
+ switch (Plane) {
+ case PLANE_XY0:
+ brush.face[0].v[0][2] += offset;
+ brush.face[0].v[1][2] += offset;
+ brush.face[0].v[1][2] += offset;
+ break;
+ case PLANE_XY1:
+ brush.face[0].v[0][2] -= offset;
+ brush.face[0].v[1][2] -= offset;
+ brush.face[0].v[1][2] -= offset;
+ break;
+ case PLANE_XZ0:
+ brush.face[0].v[0][1] += offset;
+ brush.face[0].v[1][1] += offset;
+ brush.face[0].v[1][1] += offset;
+ break;
+ case PLANE_XZ1:
+ brush.face[0].v[0][1] -= offset;
+ brush.face[0].v[1][1] -= offset;
+ brush.face[0].v[1][1] -= offset;
+ break;
+ case PLANE_YZ0:
+ brush.face[0].v[0][0] += offset;
+ brush.face[0].v[1][0] += offset;
+ brush.face[0].v[1][0] += offset;
+ break;
+ case PLANE_YZ1:
+ brush.face[0].v[0][0] -= offset;
+ brush.face[0].v[1][0] -= offset;
+ brush.face[0].v[1][0] -= offset;
+ break;
+ }
+ }
+ switch (Plane) {
+ case PLANE_XZ0:
+ case PLANE_XZ1:
+ // back
+ brush.face[1].v[0][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[1].v[0][1] = (float) backface;
+ brush.face[1].v[0][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[1].v[1][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[1].v[1][1] = (float) backface;
+ brush.face[1].v[1][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[1].v[2][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[1].v[2][1] = (float) backface;
+ brush.face[1].v[2][2] = Node[Tri[i].v[2]].p[2];
+
+ // 0-1 side
+ brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[2].v[2][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[2].v[2][1] = (float) backface;
+ brush.face[2].v[2][2] = Node[Tri[i].v[1]].p[2];
+
+ // 1-2 side
+ brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[3].v[2][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[3].v[2][1] = (float) backface;
+ brush.face[3].v[2][2] = Node[Tri[i].v[2]].p[2];
+
+ // 2-0 side
+ brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[4].v[2][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[4].v[2][1] = (float) backface;
+ brush.face[4].v[2][2] = Node[Tri[i].v[0]].p[2];
+ break;
+ case PLANE_YZ0:
+ case PLANE_YZ1:
+ // back
+ brush.face[1].v[0][0] = (float) backface;
+ brush.face[1].v[0][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[1].v[0][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[1].v[1][0] = (float) backface;
+ brush.face[1].v[1][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[1].v[1][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[1].v[2][0] = (float) backface;
+ brush.face[1].v[2][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[1].v[2][2] = Node[Tri[i].v[2]].p[2];
+
+ // 0-1 side
+ brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[2].v[2][0] = (float) backface;
+ brush.face[2].v[2][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[2].v[2][2] = Node[Tri[i].v[1]].p[2];
+
+ // 1-2 side
+ brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[3].v[2][0] = (float) backface;
+ brush.face[3].v[2][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[3].v[2][2] = Node[Tri[i].v[2]].p[2];
+
+ // 2-0 side
+ brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[4].v[2][0] = (float) backface;
+ brush.face[4].v[2][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[4].v[2][2] = Node[Tri[i].v[0]].p[2];
+ break;
+ default:
+ // back
+ brush.face[1].v[0][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[1].v[0][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[1].v[0][2] = (float) backface;
+
+ brush.face[1].v[1][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[1].v[1][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[1].v[1][2] = (float) backface;
+
+ brush.face[1].v[2][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[1].v[2][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[1].v[2][2] = (float) backface;
+
+ // 0-1 side
+ brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[2].v[2][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[2].v[2][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[2].v[2][2] = (float) backface;
+
+ // 1-2 side
+ brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
+ brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
+ brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];
+
+ brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[3].v[2][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[3].v[2][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[3].v[2][2] = (float) backface;
+
+ // 2-0 side
+ brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
+ brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
+ brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];
+
+ brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];
+
+ brush.face[4].v[2][0] = Node[Tri[i].v[0]].p[0];
+ brush.face[4].v[2][1] = Node[Tri[i].v[0]].p[1];
+ brush.face[4].v[2][2] = (float) backface;
+ }
+
+ for (j = 0; j < 5; j++) {
+ strcpy(brush.face[j].texture,
+ (strlen(texture1) ? texture1 : texture0));
+ brush.face[j].Shift[0] = (float) TexOffset[0];
+ brush.face[j].Shift[1] = (float) TexOffset[1];
+ brush.face[j].Rotate = 0.;
+ brush.face[j].Scale[0] = (float) TexScale[0];
+ brush.face[j].Scale[1] = (float) TexScale[1];
+ brush.face[j].Contents = contents;
+ if (surf) {
+ brush.face[j].Surface = 0;
+ } else {
+ brush.face[j].Surface = SURF_HINT;
+ }
+ brush.face[j].Value = 0;
+ }
+
+ if (CheckAngle) {
+ XYZVectorSubtract(brush.face[0].v[2], brush.face[0].v[0], t[0]);
+ XYZVectorSubtract(brush.face[0].v[1], brush.face[0].v[2], t[1]);
+ CrossProduct(t[0], t[1], SurfNormal);
+ VectorNormalize(SurfNormal, SurfNormal);
+ if (DotProduct(SurfNormal, PlaneNormal) < Steep) {
+ strcpy(brush.face[0].texture, texture2);
+ } else {
+ strcpy(brush.face[0].texture, texture0);
+ }
+ } else {
+ strcpy(brush.face[0].texture, texture0);
+ }
+
+ if (surf) {
+ brush.face[0].Value = ArghRad2;
+ }
+ MakeBrush(&brush);
+ }
+ CloseFuncGroup();