]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Models.cpp
License: Update GPLv2+ header to match current FSF recommendation
[lugaru.git] / Source / Models.cpp
index 609d1b1a24b28f3e7d971ff7d5f56533ca76d56c..f6a2a9164e636618eef72a9a892e942397839c94 100644 (file)
@@ -3,20 +3,18 @@ Copyright (C) 2003, 2010 - Wolfire Games
 
 This file is part of Lugaru.
 
-Lugaru 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.
+Lugaru 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.
 
-This program is distributed in the hope that it will be useful,
+Lugaru 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.
+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 this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "Game.h"
@@ -42,10 +40,12 @@ int Model::LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
 
     *p1 = *p1 - *move;
     *p2 = *p2 - *move;
-    if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
-    if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
-    if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
-                                  &boundingsphereradius))return -1;
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, -*rotate, 0);
+    if (*rotate)
+        *p2 = DoRotation(*p2, 0, -*rotate, 0);
+    if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+        return -1;
     firstintersecting = -1;
 
     for (j = 0; j < TriangleNum; j++) {
@@ -58,7 +58,8 @@ int Model::LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
         }
     }
 
-    if (*rotate)*p = DoRotation(*p, 0, *rotate, 0);
+    if (*rotate)
+        *p = DoRotation(*p, 0, *rotate, 0);
     *p = *p + *move;
     return firstintersecting;
 }
@@ -74,11 +75,13 @@ int Model::LineCheckSlide(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
 
     *p1 = *p1 - *move;
     *p2 = *p2 - *move;
-    if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
-                                  &boundingsphereradius))return -1;
+    if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+        return -1;
     firstintersecting = -1;
-    if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
-    if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, -*rotate, 0);
+    if (*rotate)
+        *p2 = DoRotation(*p2, 0, -*rotate, 0);
 
     for (j = 0; j < TriangleNum; j++) {
         intersecting = LineFacetd(p1, p2, &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]], &facenormals[j], &point);
@@ -92,7 +95,8 @@ int Model::LineCheckSlide(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
     distance = abs((facenormals[firstintersecting].x * p2->x) + (facenormals[firstintersecting].y * p2->y) + (facenormals[firstintersecting].z * p2->z) - ((facenormals[firstintersecting].x * vertex[Triangles[firstintersecting].vertex[0]].x) + (facenormals[firstintersecting].y * vertex[Triangles[firstintersecting].vertex[0]].y) + (facenormals[firstintersecting].z * vertex[Triangles[firstintersecting].vertex[0]].z)));
     *p2 -= facenormals[firstintersecting] * distance;
 
-    if (*rotate)*p2 = DoRotation(*p2, 0, *rotate, 0);
+    if (*rotate)
+        *p2 = DoRotation(*p2, 0, *rotate, 0);
     *p2 = *p2 + *move;
     return firstintersecting;
 }
@@ -108,11 +112,13 @@ int Model::LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
 
     *p1 = *p1 - *move;
     *p2 = *p2 - *move;
-    if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
-                                  &boundingsphereradius))return -1;
+    if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+        return -1;
     firstintersecting = -1;
-    if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
-    if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, -*rotate, 0);
+    if (*rotate)
+        *p2 = DoRotation(*p2, 0, -*rotate, 0);
 
     if (numpossible > 0 && numpossible < TriangleNum)
         for (j = 0; j < numpossible; j++) {
@@ -127,7 +133,8 @@ int Model::LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
             }
         }
 
-    if (*rotate)*p = DoRotation(*p, 0, *rotate, 0);
+    if (*rotate)
+        *p = DoRotation(*p, 0, *rotate, 0);
     *p = *p + *move;
     return firstintersecting;
 }
@@ -143,11 +150,13 @@ int Model::LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *ro
 
     *p1 = *p1 - *move;
     *p2 = *p2 - *move;
-    if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
-                                  &boundingsphereradius))return -1;
+    if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+        return -1;
     firstintersecting = -1;
-    if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
-    if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, -*rotate, 0);
+    if (*rotate)
+        *p2 = DoRotation(*p2, 0, -*rotate, 0);
 
     if (numpossible)
         for (j = 0; j < numpossible; j++) {
@@ -166,7 +175,8 @@ int Model::LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *ro
         *p2 -= facenormals[firstintersecting] * distance;
     }
 
-    if (*rotate)*p2 = DoRotation(*p2, 0, *rotate, 0);
+    if (*rotate)
+        *p2 = DoRotation(*p2, 0, *rotate, 0);
     *p2 = *p2 + *move;
     return firstintersecting;
 }
@@ -186,8 +196,10 @@ int Model::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate)
 
     oldp1 = *p1;
     *p1 = *p1 - *move;
-    if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
-    if (distsq(p1, &boundingspherecenter) > radius * radius + boundingsphereradius * boundingsphereradius)return -1;
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, -*rotate, 0);
+    if (distsq(p1, &boundingspherecenter) > radius * radius + boundingsphereradius * boundingsphereradius)
+        return -1;
 
     for (i = 0; i < 4; i++) {
         for (j = 0; j < TriangleNum; j++) {
@@ -195,16 +207,14 @@ int Model::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate)
             distance = abs((facenormals[j].x * p1->x) + (facenormals[j].y * p1->y) + (facenormals[j].z * p1->z) - ((facenormals[j].x * vertex[Triangles[j].vertex[0]].x) + (facenormals[j].y * vertex[Triangles[j].vertex[0]].y) + (facenormals[j].z * vertex[Triangles[j].vertex[0]].z)));
             if (distance < radius) {
                 point = *p1 - facenormals[j] * distance;
-                if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))intersecting = 1;
-                if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
-                                                     &vertex[Triangles[j].vertex[1]],
-                                                     p1, &radius);
-                if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]],
-                                                     &vertex[Triangles[j].vertex[2]],
-                                                     p1, &radius);
-                if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
-                                                     &vertex[Triangles[j].vertex[2]],
-                                                     p1, &radius);
+                if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))
+                    intersecting = 1;
+                if (!intersecting)
+                    intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], p1, &radius);
+                if (!intersecting)
+                    intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]], p1, &radius);
+                if (!intersecting)
+                    intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[2]], p1, &radius);
                 if (intersecting) {
                     *p1 += facenormals[j] * (distance - radius);
                     /*start=*p1;
@@ -222,16 +232,18 @@ int Model::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate)
             }
         }
     }
-    if (*rotate)*p = DoRotation(*p, 0, *rotate, 0);
+    if (*rotate)
+        *p = DoRotation(*p, 0, *rotate, 0);
     *p = *p + *move;
-    if (*rotate)*p1 = DoRotation(*p1, 0, *rotate, 0);
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, *rotate, 0);
     *p1 += *move;
     return firstintersecting;
 }
 
 int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
 {
-    static int i, j;
+    static int j;
     static float distance;
     static float olddistance;
     static int intersecting;
@@ -247,7 +259,8 @@ int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
 
     numpossible = 0;
 
-    if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, -*rotate, 0);
     if (distsq(p1, &boundingspherecenter) > radius * radius + boundingsphereradius * boundingsphereradius) {
         *p1 = oldp1;
         return -1;
@@ -258,16 +271,14 @@ int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
         distance = abs((facenormals[j].x * p1->x) + (facenormals[j].y * p1->y) + (facenormals[j].z * p1->z) - ((facenormals[j].x * vertex[Triangles[j].vertex[0]].x) + (facenormals[j].y * vertex[Triangles[j].vertex[0]].y) + (facenormals[j].z * vertex[Triangles[j].vertex[0]].z)));
         if (distance < radius) {
             point = *p1 - facenormals[j] * distance;
-            if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))intersecting = 1;
-            if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
-                                                 &vertex[Triangles[j].vertex[1]],
-                                                 p1, &radius);
-            if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]],
-                                                 &vertex[Triangles[j].vertex[2]],
-                                                 p1, &radius);
-            if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
-                                                 &vertex[Triangles[j].vertex[2]],
-                                                 p1, &radius);
+            if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))
+                intersecting = 1;
+            if (!intersecting)
+                intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], p1, &radius);
+            if (!intersecting)
+                intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]], p1, &radius);
+            if (!intersecting)
+                intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[2]], p1, &radius);
             if (intersecting) {
                 //if(j>=0&&j<TriangleNum)
                 possible[numpossible] = j;
@@ -279,7 +290,8 @@ int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
             firstintersecting = j;
         }
     }
-    if (*rotate)*p1 = DoRotation(*p1, 0, *rotate, 0);
+    if (*rotate)
+        *p1 = DoRotation(*p1, 0, *rotate, 0);
     *p1 += *move;
     return firstintersecting;
 }
@@ -287,7 +299,8 @@ int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
 
 void Model::UpdateVertexArray()
 {
-    if (type != normaltype && type != decalstype)return;
+    if (type != normaltype && type != decalstype)
+        return;
     static int i;
     static int j;
     if (!flat)
@@ -355,7 +368,8 @@ void Model::UpdateVertexArray()
 
 void Model::UpdateVertexArrayNoTex()
 {
-    if (type != normaltype && type != decalstype)return;
+    if (type != normaltype && type != decalstype)
+        return;
     static int i;
     static int j;
     if (!flat)
@@ -410,7 +424,8 @@ void Model::UpdateVertexArrayNoTex()
 
 void Model::UpdateVertexArrayNoTexNoNorm()
 {
-    if (type != normaltype && type != decalstype)return;
+    if (type != normaltype && type != decalstype)
+        return;
     static int i;
     static int j;
     for (i = 0; i < TriangleNum; i++) {
@@ -431,12 +446,12 @@ void Model::UpdateVertexArrayNoTexNoNorm()
 
 bool Model::loadnotex(const char *filename )
 {
-    FILE                       *tfile;
-    long                               i;
+    FILE *tfile;
+    long i;
 
-    int oldvertexNum, oldTriangleNum;
-    oldvertexNum = vertexNum;
-    oldTriangleNum = TriangleNum;
+    //~ int oldvertexNum, oldTriangleNum;
+    //~ oldvertexNum = vertexNum;
+    //~ oldTriangleNum = TriangleNum;
 
     type = notextype;
     color = 0;
@@ -463,7 +478,7 @@ bool Model::loadnotex(const char *filename )
     }
 
     for (i = 0; i < TriangleNum; i++) {
-        //             funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
+        //funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
         short vertex[ 6];
         funpackf(tfile, "Bs Bs Bs Bs Bs Bs", &vertex[ 0], &vertex[ 1], &vertex[ 2], &vertex[ 3], &vertex[ 4], &vertex[ 5]);
         Triangles[i].vertex[ 0] = vertex[ 0];
@@ -499,8 +514,8 @@ bool Model::loadnotex(const char *filename )
 
 bool Model::load(const char *filename, bool texture )
 {
-    FILE                       *tfile;
-    long                               i;
+    FILE *tfile;
+    long i;
 
     LOGFUNC;
 
@@ -509,9 +524,9 @@ bool Model::load(const char *filename, bool texture )
     if (visibleloading)
         Game::LoadingScreen();
 
-    int oldvertexNum, oldTriangleNum;
-    oldvertexNum = vertexNum;
-    oldTriangleNum = TriangleNum;
+    //~ int oldvertexNum, oldTriangleNum;
+    //~ oldvertexNum = vertexNum;
+    //~ oldTriangleNum = TriangleNum;
 
     type = normaltype;
     color = 0;
@@ -541,7 +556,7 @@ bool Model::load(const char *filename, bool texture )
     }
 
     for (i = 0; i < TriangleNum; i++) {
-        //             funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
+        //funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
         short vertex[ 6];
         funpackf(tfile, "Bs Bs Bs Bs Bs Bs", &vertex[ 0], &vertex[ 1], &vertex[ 2], &vertex[ 3], &vertex[ 4], &vertex[ 5]);
         Triangles[i].vertex[ 0] = vertex[ 0];
@@ -578,8 +593,8 @@ bool Model::load(const char *filename, bool texture )
 
 bool Model::loaddecal(const char *filename, bool texture )
 {
-    FILE                       *tfile;
-    long                               i, j;
+    FILE *tfile;
+    long i, j;
 
     LOGFUNC;
 
@@ -588,9 +603,9 @@ bool Model::loaddecal(const char *filename, bool texture )
 
     LOG(std::string("Loading decal...") + FixedFN);
 
-    int oldvertexNum, oldTriangleNum;
-    oldvertexNum = vertexNum;
-    oldTriangleNum = TriangleNum;
+    //~ int oldvertexNum, oldTriangleNum;
+    //~ oldvertexNum = vertexNum;
+    //~ oldTriangleNum = TriangleNum;
 
     type = decalstype;
     numdecals = 0;
@@ -623,7 +638,7 @@ bool Model::loaddecal(const char *filename, bool texture )
     }
 
     for (i = 0; i < TriangleNum; i++) {
-        //             funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
+        //funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
         short vertex[ 6];
         funpackf(tfile, "Bs Bs Bs Bs Bs Bs", &vertex[ 0], &vertex[ 1], &vertex[ 2], &vertex[ 3], &vertex[ 4], &vertex[ 5]);
         Triangles[i].vertex[ 0] = vertex[ 0];
@@ -682,16 +697,16 @@ bool Model::loaddecal(const char *filename, bool texture )
 
 bool Model::loadraw(char *filename )
 {
-    FILE                       *tfile;
-    long                               i;
+    FILE *tfile;
+    long i;
 
     LOGFUNC;
 
     LOG(std::string("Loading raw...") + filename);
 
-    int oldvertexNum, oldTriangleNum;
-    oldvertexNum = vertexNum;
-    oldTriangleNum = TriangleNum;
+    //~ int oldvertexNum, oldTriangleNum;
+    //~ oldvertexNum = vertexNum;
+    //~ oldTriangleNum = TriangleNum;
 
     type = rawtype;
     color = 0;
@@ -720,7 +735,7 @@ bool Model::loadraw(char *filename )
     }
 
     for (i = 0; i < TriangleNum; i++) {
-        //             funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
+        //funpackf(tfile, "Bi Bi Bi", &Triangles[i].vertex[0], &Triangles[i].vertex[1], &Triangles[i].vertex[2]);
         short vertex[ 6];
         funpackf(tfile, "Bs Bs Bs Bs Bs Bs", &vertex[ 0], &vertex[ 1], &vertex[ 2], &vertex[ 3], &vertex[ 4], &vertex[ 5]);
         Triangles[i].vertex[ 0] = vertex[ 0];
@@ -807,7 +822,8 @@ void Model::Scale(float xscale, float yscale, float zscale)
 
 void Model::ScaleNormals(float xscale, float yscale, float zscale)
 {
-    if (type != normaltype && type != decalstype)return;
+    if (type != normaltype && type != decalstype)
+        return;
     static int i;
     for (i = 0; i < vertexNum; i++) {
         normals[i].x *= xscale;
@@ -872,7 +888,8 @@ void Model::CalculateNormals(bool facenormalise)
     if (visibleloading)
         Game::LoadingScreen();
     static int i;
-    if (type != normaltype && type != decalstype)return;
+    if (type != normaltype && type != decalstype)
+        return;
 
     for (i = 0; i < vertexNum; i++) {
         normals[i].x = 0;
@@ -894,7 +911,8 @@ void Model::CalculateNormals(bool facenormalise)
         normals[Triangles[i].vertex[2]].x += facenormals[i].x;
         normals[Triangles[i].vertex[2]].y += facenormals[i].y;
         normals[Triangles[i].vertex[2]].z += facenormals[i].z;
-        if (facenormalise)Normalise(&facenormals[i]);
+        if (facenormalise)
+            Normalise(&facenormals[i]);
     }
     for (i = 0; i < vertexNum; i++) {
         Normalise(&normals[i]);
@@ -914,21 +932,30 @@ void Model::drawimmediate()
         &&isnormal(vertex[Triangles[i].vertex[2]].x)&&isnormal(vertex[Triangles[i].vertex[2]].y)&&isnormal(vertex[Triangles[i].vertex[2]].z)){
         */
         glTexCoord2f(Triangles[i].gx[0], Triangles[i].gy[0]);
-        if (color)glColor3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
-        if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
-        if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
+        if (color)
+            glColor3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
+        if (!color && !flat)
+            glNormal3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
+        if (!color && flat)
+            glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
         glVertex3f(vertex[Triangles[i].vertex[0]].x, vertex[Triangles[i].vertex[0]].y, vertex[Triangles[i].vertex[0]].z);
 
         glTexCoord2f(Triangles[i].gx[1], Triangles[i].gy[1]);
-        if (color)glColor3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
-        if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
-        if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
+        if (color)
+            glColor3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
+        if (!color && !flat)
+            glNormal3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
+        if (!color && flat)
+            glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
         glVertex3f(vertex[Triangles[i].vertex[1]].x, vertex[Triangles[i].vertex[1]].y, vertex[Triangles[i].vertex[1]].z);
 
         glTexCoord2f(Triangles[i].gx[2], Triangles[i].gy[2]);
-        if (color)glColor3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
-        if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
-        if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
+        if (color)
+            glColor3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
+        if (!color && !flat)
+            glNormal3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
+        if (!color && flat)
+            glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
         glVertex3f(vertex[Triangles[i].vertex[2]].x, vertex[Triangles[i].vertex[2]].y, vertex[Triangles[i].vertex[2]].z);
         //}
         //}
@@ -938,14 +965,17 @@ void Model::drawimmediate()
 
 void Model::draw()
 {
-    if (type != normaltype && type != decalstype)return;
+    if (type != normaltype && type != decalstype)
+        return;
 
     glEnableClientState(GL_NORMAL_ARRAY);
     glEnableClientState(GL_VERTEX_ARRAY);
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 
-    if (!color)glInterleavedArrays( GL_T2F_N3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
-    if (color)glInterleavedArrays( GL_T2F_C3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
+    if (!color)
+        glInterleavedArrays( GL_T2F_N3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
+    if (color)
+        glInterleavedArrays( GL_T2F_C3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
     textureptr.bind();
 
 #if PLATFORM_MACOSX
@@ -957,8 +987,10 @@ void Model::draw()
 #endif
 
 
-    if (!color)glDisableClientState(GL_NORMAL_ARRAY);
-    if (color)glDisableClientState(GL_COLOR_ARRAY);
+    if (!color)
+        glDisableClientState(GL_NORMAL_ARRAY);
+    if (color)
+        glDisableClientState(GL_COLOR_ARRAY);
     glDisableClientState(GL_VERTEX_ARRAY);
     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     //drawimmediate();
@@ -970,8 +1002,10 @@ void Model::drawdifftex(GLuint texture)
     glEnableClientState(GL_NORMAL_ARRAY);
     glEnableClientState(GL_VERTEX_ARRAY);
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-    if (!color)glInterleavedArrays( GL_T2F_N3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
-    if (color)glInterleavedArrays( GL_T2F_C3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
+    if (!color)
+        glInterleavedArrays( GL_T2F_N3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
+    if (color)
+        glInterleavedArrays( GL_T2F_C3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
 
     glBindTexture(GL_TEXTURE_2D, (unsigned long)texture);
     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
@@ -987,8 +1021,10 @@ void Model::drawdifftex(GLuint texture)
 #endif
 
 
-    if (!color)glDisableClientState(GL_NORMAL_ARRAY);
-    if (color)glDisableClientState(GL_COLOR_ARRAY);
+    if (!color)
+        glDisableClientState(GL_NORMAL_ARRAY);
+    if (color)
+        glDisableClientState(GL_COLOR_ARRAY);
     glDisableClientState(GL_VERTEX_ARRAY);
     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     //drawdiffteximmediate(texture);
@@ -999,8 +1035,10 @@ void Model::drawdifftex(Texture texture)
     glEnableClientState(GL_NORMAL_ARRAY);
     glEnableClientState(GL_VERTEX_ARRAY);
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-    if (!color)glInterleavedArrays( GL_T2F_N3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
-    if (color)glInterleavedArrays( GL_T2F_C3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
+    if (!color)
+        glInterleavedArrays( GL_T2F_N3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
+    if (color)
+        glInterleavedArrays( GL_T2F_C3F_V3F, 8 * sizeof(GLfloat), &vArray[0]);
 
     texture.bind();
     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
@@ -1016,8 +1054,10 @@ void Model::drawdifftex(Texture texture)
 #endif
 
 
-    if (!color)glDisableClientState(GL_NORMAL_ARRAY);
-    if (color)glDisableClientState(GL_COLOR_ARRAY);
+    if (!color)
+        glDisableClientState(GL_NORMAL_ARRAY);
+    if (color)
+        glDisableClientState(GL_COLOR_ARRAY);
     glDisableClientState(GL_VERTEX_ARRAY);
     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     //drawdiffteximmediate(texture);
@@ -1034,21 +1074,30 @@ void Model::drawdiffteximmediate(GLuint texture)
         &&isnormal(vertex[Triangles[i].vertex[1]].x)&&isnormal(vertex[Triangles[i].vertex[1]].y)&&isnormal(vertex[Triangles[i].vertex[1]].z)
         &&isnormal(vertex[Triangles[i].vertex[2]].x)&&isnormal(vertex[Triangles[i].vertex[2]].y)&&isnormal(vertex[Triangles[i].vertex[2]].z)){
         */glTexCoord2f(Triangles[i].gx[0], Triangles[i].gy[0]);
-        if (color)glColor3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
-        if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
-        if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
+        if (color)
+            glColor3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
+        if (!color && !flat)
+            glNormal3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
+        if (!color && flat)
+            glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
         glVertex3f(vertex[Triangles[i].vertex[0]].x, vertex[Triangles[i].vertex[0]].y, vertex[Triangles[i].vertex[0]].z);
 
         glTexCoord2f(Triangles[i].gx[1], Triangles[i].gy[1]);
-        if (color)glColor3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
-        if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
-        if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
+        if (color)
+            glColor3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
+        if (!color && !flat)
+            glNormal3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
+        if (!color && flat)
+            glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
         glVertex3f(vertex[Triangles[i].vertex[1]].x, vertex[Triangles[i].vertex[1]].y, vertex[Triangles[i].vertex[1]].z);
 
         glTexCoord2f(Triangles[i].gx[2], Triangles[i].gy[2]);
-        if (color)glColor3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
-        if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
-        if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
+        if (color)
+            glColor3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
+        if (!color && !flat)
+            glNormal3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
+        if (!color && flat)
+            glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
         glVertex3f(vertex[Triangles[i].vertex[2]].x, vertex[Triangles[i].vertex[2]].y, vertex[Triangles[i].vertex[2]].z);
         //}
         //}
@@ -1059,14 +1108,15 @@ void Model::drawdiffteximmediate(GLuint texture)
 void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture)
 {
     if (decals) {
-        if (type != decalstype)return;
-        static int i, j;
-        static float distancemult;
+        if (type != decalstype)
+            return;
+        static int i;
+        //~ static float distancemult;
         static int lasttype;
-        static float viewdistsquared;
+        //~ static float viewdistsquared;
         static bool blend;
 
-        viewdistsquared = viewdistance * viewdistance;
+        //~ viewdistsquared = viewdistance * viewdistance;
         blend = 1;
 
         lasttype = -1;
@@ -1075,9 +1125,11 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
         glDisable(GL_CULL_FACE);
         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
         glDepthMask(0);
-        if (numdecals > max_model_decals)numdecals = max_model_decals;
+        if (numdecals > max_model_decals)
+            numdecals = max_model_decals;
         for (i = 0; i < numdecals; i++) {
-            if (decaltype[i] == blooddecalfast && decalalivetime[i] < 2)decalalivetime[i] = 2;
+            if (decaltype[i] == blooddecalfast && decalalivetime[i] < 2)
+                decalalivetime[i] = 2;
 
             if (decaltype[i] == shadowdecal && decaltype[i] != lasttype) {
                 shadowtexture.bind();
@@ -1116,18 +1168,21 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
             }
             if (decaltype[i] == breakdecal) {
                 glColor4f(1, 1, 1, decalopacity[i]);
-                if (decalalivetime[i] > 58)glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
+                if (decalalivetime[i] > 58)
+                    glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
             }
             if ((decaltype[i] == blooddecal || decaltype[i] == blooddecalfast || decaltype[i] == blooddecalslow)) {
                 glColor4f(1, 1, 1, decalopacity[i]);
-                if (decalalivetime[i] < 4)glColor4f(1, 1, 1, decalopacity[i]*decalalivetime[i]*.25);
-                if (decalalivetime[i] > 58)glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
+                if (decalalivetime[i] < 4)
+                    glColor4f(1, 1, 1, decalopacity[i]*decalalivetime[i]*.25);
+                if (decalalivetime[i] > 58)
+                    glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
             }
             lasttype = decaltype[i];
             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
 
-            glMatrixMode(GL_MODELVIEW);                                                        // Select The Modelview Matrix
+            glMatrixMode(GL_MODELVIEW);
             glPushMatrix();
             glBegin(GL_TRIANGLES);
             for (int j = 0; j < 3; j++) {
@@ -1139,10 +1194,14 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
         }
         for (i = numdecals - 1; i >= 0; i--) {
             decalalivetime[i] += multiplier;
-            if (decaltype[i] == blooddecalslow)decalalivetime[i] -= multiplier * 2 / 3;
-            if (decaltype[i] == blooddecalfast)decalalivetime[i] += multiplier * 4;
-            if (decaltype[i] == shadowdecal)DeleteDecal(i);
-            if ((decaltype[i] == blooddecal || decaltype[i] == blooddecalfast || decaltype[i] == blooddecalslow) && decalalivetime[i] >= 60)DeleteDecal(i);
+            if (decaltype[i] == blooddecalslow)
+                decalalivetime[i] -= multiplier * 2 / 3;
+            if (decaltype[i] == blooddecalfast)
+                decalalivetime[i] += multiplier * 4;
+            if (decaltype[i] == shadowdecal)
+                DeleteDecal(i);
+            if ((decaltype[i] == blooddecal || decaltype[i] == blooddecalfast || decaltype[i] == blooddecalslow) && decalalivetime[i] >= 60)
+                DeleteDecal(i);
         }
         glAlphaFunc(GL_GREATER, 0.0001);
         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -1152,7 +1211,8 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
 void Model::DeleteDecal(int which)
 {
     if (decals) {
-        if (type != decalstype)return;
+        if (type != decalstype)
+            return;
         decaltype[which] = decaltype[numdecals - 1];
         decalposition[which] = decalposition[numdecals - 1];
         for (int i = 0; i < 3; i++) {
@@ -1170,7 +1230,8 @@ void Model::DeleteDecal(int which)
 void Model::MakeDecal(int atype, XYZ *where, float *size, float *opacity, float *rotation)
 {
     if (decals) {
-        if (type != decalstype)return;
+        if (type != decalstype)
+            return;
 
         static float placex, placez;
         static XYZ rot;
@@ -1236,7 +1297,8 @@ void Model::MakeDecal(int atype, XYZ *where, float *size, float *opacity, float
                                                     decaltexcoords[numdecals][j][1] = rot.z + .5;
                                                 }
                                             }
-                                            if (numdecals < max_model_decals - 1)numdecals++;
+                                            if (numdecals < max_model_decals - 1)
+                                                numdecals++;
                                         }
                         }
                     }
@@ -1247,7 +1309,8 @@ void Model::MakeDecal(int atype, XYZ *where, float *size, float *opacity, float
 void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rotation)
 {
     if (decals) {
-        if (type != decalstype)return;
+        if (type != decalstype)
+            return;
 
         static float placex, placez;
         static XYZ rot;
@@ -1313,7 +1376,8 @@ void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rot
                                                     decaltexcoords[numdecals][j][1] = rot.z + .5;
                                                 }
                                             }
-                                            if (numdecals < max_model_decals - 1)numdecals++;
+                                            if (numdecals < max_model_decals - 1)
+                                                numdecals++;
                                         }
                         }
                     } else if (distance < .02 && abs(facenormals[i].x) > abs(facenormals[i].y) && abs(facenormals[i].x) > abs(facenormals[i].z)) {
@@ -1370,7 +1434,8 @@ void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rot
                                                     decaltexcoords[numdecals][j][1] = rot.z + .5;
                                                 }
                                             }
-                                            if (numdecals < max_model_decals - 1)numdecals++;
+                                            if (numdecals < max_model_decals - 1)
+                                                numdecals++;
                                         }
                         }
                     } else if (distance < .02 && abs(facenormals[i].z) > abs(facenormals[i].y) && abs(facenormals[i].z) > abs(facenormals[i].x)) {
@@ -1427,7 +1492,8 @@ void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rot
                                                     decaltexcoords[numdecals][j][1] = rot.z + .5;
                                                 }
                                             }
-                                            if (numdecals < max_model_decals - 1)numdecals++;
+                                            if (numdecals < max_model_decals - 1)
+                                                numdecals++;
                                         }
                         }
                     }
@@ -1445,25 +1511,32 @@ void Model::deallocate()
 {
     int i = 0, j = 0;
 
-    if (owner)free(owner);
+    if (owner)
+        free(owner);
     owner = 0;
 
-    if (possible)free(possible);
+    if (possible)
+        free(possible);
     possible = 0;
 
-    if (vertex)free(vertex);
+    if (vertex)
+        free(vertex);
     vertex = 0;
 
-    if (normals)free(normals);
+    if (normals)
+        free(normals);
     normals = 0;
 
-    if (facenormals)free(facenormals);
+    if (facenormals)
+        free(facenormals);
     facenormals = 0;
 
-    if (Triangles)free(Triangles);
+    if (Triangles)
+        free(Triangles);
     Triangles = 0;
 
-    if (vArray)free(vArray);
+    if (vArray)
+        free(vArray);
     vArray = 0;