]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameDraw.cpp
Moved Account::active in Account class. Maybe it should be changed for a method and...
[lugaru.git] / Source / GameDraw.cpp
index 3966a57e92da50b402c98fdfb51b83789247f7d9..76318a4775c4536f1ebba824e8825c73572e1f93 100644 (file)
@@ -1,5 +1,6 @@
 /*
 Copyright (C) 2003, 2010 - Wolfire Games
+Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
 
 This file is part of Lugaru.
 
@@ -22,15 +23,15 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 #include "Input.h"
 #include "Awards.h"
 #include "Menu.h"
+#include "Dialog.h"
+#include "Hotspot.h"
 
 extern XYZ viewer;
 extern int environment;
 extern float texscale;
 extern Light light;
 extern Terrain terrain;
-//extern Sprites sprites;
 extern float multiplier;
-extern float sps;
 extern float viewdistance;
 extern float fadestart;
 extern float screenwidth, screenheight;
@@ -40,7 +41,6 @@ extern Light light;
 extern Objects objects;
 extern int detail;
 extern float usermousesensitivity;
-extern bool osx;
 extern float camerashake;
 extern int slomo;
 extern float slomodelay;
@@ -61,20 +61,12 @@ extern int netstate;
 extern float motionbluramount;
 extern bool isclient;
 extern bool alwaysblur;
-extern int test;
-extern bool tilt2weird;
-extern bool tiltweird;
-extern bool midweird;
-extern bool proportionweird;
-extern bool vertexweird[6];
 extern bool velocityblur;
-extern bool debugmode;
+extern bool devtools;
 extern int mainmenu;
 extern int bloodtoggle;
 extern int difficulty;
 extern bool decals;
-// MODIFIED GWC
-//extern int texdetail;
 extern float texdetail;
 extern bool musictoggle;
 extern int tutoriallevel;
@@ -86,19 +78,9 @@ extern bool againbonus;
 extern float damagedealt;
 extern bool invertmouse;
 
-extern int numhotspots;
-extern int killhotspot;
-extern XYZ hotspot[40];
-extern int hotspottype[40];
-extern float hotspotsize[40];
-extern char hotspottext[40][256];
-extern int currenthotspot;;
-
 extern bool campaign;
 extern bool winfreeze;
 
-extern float menupulse;
-
 extern bool gamestart;
 
 extern bool gamestarted;
@@ -119,13 +101,13 @@ enum drawmodes {
     realmotionblurmode, doublevisionmode, glowmode,
 };
 
-void Game::flash()   // shouldn't be that way, these should be attributes and Person class should not change rendering.
+void Game::flash(float amount, int delay)   // shouldn't be that way, these should be attributes and Person class should not change rendering.
 {
     flashr = 1;
     flashg = 0;
     flashb = 0;
-    flashamount = 1;
-    flashdelay = 1;
+    flashamount = amount;
+    flashdelay = delay;
 }
 
 void DrawMenu();
@@ -230,16 +212,6 @@ int Game::DrawGLScene(StereoSide side)
         if (winfreeze || mainmenu)
             drawmode = normalmode;
 
-#if PLATFORM_MACOSX
-        if (drawmode == glowmode) {
-            RGBColor color2;
-            color2.red = 0;
-            color2.green = 0;
-            color2.blue = 0;
-            DSpContext_FadeGamma(NULL, 200, &color2);
-        }
-#endif
-
         if (drawtoggle != 2)
             drawtoggle = 1 - drawtoggle;
 
@@ -262,7 +234,6 @@ int Game::DrawGLScene(StereoSide side)
         glDrawBuffer(GL_BACK);
         glReadBuffer(GL_BACK);
 
-        //glFinish();
         static XYZ terrainlight;
         static float distance;
         if (drawmode == normalmode)
@@ -333,7 +304,7 @@ int Game::DrawGLScene(StereoSide side)
         for (unsigned k = 0; k < Person::players.size(); k++) {
             if (!Person::players[k]->skeleton.free && Person::players[k]->playerdetail && Person::players[k]->howactive < typesleeping)
                 if (frustum.SphereInFrustum(Person::players[k]->coords.x, Person::players[k]->coords.y + Person::players[k]->scale * 3, Person::players[k]->coords.z, Person::players[k]->scale * 7) && Person::players[k]->occluded < 25)
-                    for (int i = 0; i < Person::players[k]->skeleton.num_joints; i++) {
+                    for (int i = 0; i < Person::players[k]->skeleton.joints.size(); i++) {
                         if (Person::players[k]->skeleton.joints[i].label == leftknee || Person::players[k]->skeleton.joints[i].label == rightknee || Person::players[k]->skeleton.joints[i].label == groin) {
                             point = DoRotation(Person::players[k]->skeleton.joints[i].position, 0, Person::players[k]->yaw, 0) * Person::players[k]->scale + Person::players[k]->coords;
                             size = .4f;
@@ -358,7 +329,7 @@ int Game::DrawGLScene(StereoSide side)
                     }
             if ((Person::players[k]->skeleton.free || Person::players[k]->howactive >= typesleeping) && Person::players[k]->playerdetail)
                 if (frustum.SphereInFrustum(Person::players[k]->coords.x, Person::players[k]->coords.y, Person::players[k]->coords.z, Person::players[k]->scale * 5) && Person::players[k]->occluded < 25)
-                    for (int i = 0; i < Person::players[k]->skeleton.num_joints; i++) {
+                    for (int i = 0; i < Person::players[k]->skeleton.joints.size(); i++) {
                         if (Person::players[k]->skeleton.joints[i].label == leftknee || Person::players[k]->skeleton.joints[i].label == rightknee || Person::players[k]->skeleton.joints[i].label == groin || Person::players[k]->skeleton.joints[i].label == leftelbow || Person::players[k]->skeleton.joints[i].label == rightelbow || Person::players[k]->skeleton.joints[i].label == neck) {
                             if (Person::players[k]->skeleton.free)
                                 point = Person::players[k]->skeleton.joints[i].position * Person::players[k]->scale + Person::players[k]->coords;
@@ -416,9 +387,6 @@ int Game::DrawGLScene(StereoSide side)
         terrain.draw(0);
         terraintexture2.bind();
         terrain.draw(1);
-        //glBindTexture( GL_TEXTURE_2D, terraintexture3);
-        //glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-        //terrain.draw(2);
 
         terrain.drawdecals();
 
@@ -431,18 +399,6 @@ int Game::DrawGLScene(StereoSide side)
 
         glEnable(GL_COLOR_MATERIAL);
 
-        test = 2;
-        tilt2weird = 0;
-        tiltweird = 0;
-        midweird = 0;
-        proportionweird = 0;
-        vertexweird[0] = 0;
-        vertexweird[1] = 0;
-        vertexweird[2] = 0;
-        vertexweird[3] = 0;
-        vertexweird[4] = 0;
-        vertexweird[5] = 0;
-
         if (!cellophane) {
             glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
             glEnable(GL_CULL_FACE);
@@ -459,12 +415,12 @@ int Game::DrawGLScene(StereoSide side)
                     if (distance >= 1)
                         glDisable(GL_BLEND);
                     if (distance >= .5) {
-                        checkpoint = DoRotation(Person::players[k]->skeleton.joints[abs(Random() % Person::players[k]->skeleton.num_joints)].position, 0, Person::players[k]->yaw, 0) * Person::players[k]->scale + Person::players[k]->coords;
+                        checkpoint = DoRotation(Person::players[k]->skeleton.joints[abs(Random() % Person::players[k]->skeleton.joints.size())].position, 0, Person::players[k]->yaw, 0) * Person::players[k]->scale + Person::players[k]->coords;
                         checkpoint.y += 1;
-                        int i;
-                        if (!Person::players[k]->occluded == 0)
+                        int i = -1;
+                        if (Person::players[k]->occluded != 0)
                             i = checkcollide(viewer, checkpoint, Person::players[k]->lastoccluded);
-                        if (i == -1 || Person::players[k]->occluded == 0)
+                        if (i == -1)
                             i = checkcollide(viewer, checkpoint);
                         if (i != -1) {
                             Person::players[k]->occluded += 1;
@@ -524,12 +480,12 @@ int Game::DrawGLScene(StereoSide side)
                 if (distance >= 1)
                     glDisable(GL_BLEND);
                 if (distance >= .5) {
-                    checkpoint = DoRotation(Person::players[k]->skeleton.joints[abs(Random() % Person::players[k]->skeleton.num_joints)].position, 0, Person::players[k]->yaw, 0) * Person::players[k]->scale + Person::players[k]->coords;
+                    checkpoint = DoRotation(Person::players[k]->skeleton.joints[abs(Random() % Person::players[k]->skeleton.joints.size())].position, 0, Person::players[k]->yaw, 0) * Person::players[k]->scale + Person::players[k]->coords;
                     checkpoint.y += 1;
-                    int i;
-                    if (!Person::players[k]->occluded == 0)
+                    int i = -1;
+                    if (Person::players[k]->occluded != 0)
                         i = checkcollide(viewer, checkpoint, Person::players[k]->lastoccluded);
-                    if (i == -1 || Person::players[k]->occluded == 0)
+                    if (i == -1)
                         i = checkcollide(viewer, checkpoint);
                     if (i != -1) {
                         Person::players[k]->occluded += 1;
@@ -603,7 +559,7 @@ int Game::DrawGLScene(StereoSide side)
         glColor4f(.5, .5, .5, 1);
         if (!console) {
             if (!tutoriallevel)
-                if (bonus > 0 && bonustime < 1 && !winfreeze && indialogue == -1/*bonustime<4*/) {
+                if (bonus > 0 && bonustime < 1 && !winfreeze && !Dialog::inDialog()) {
                     const char *bonus_name;
                     if (bonus < bonus_count)
                         bonus_name = bonus_names[bonus];
@@ -928,27 +884,25 @@ int Game::DrawGLScene(StereoSide side)
                 text->glPrint(screenwidth / 2 - 7.6 * strlen(string2)*screenwidth / 1024 * .8, 0 + screenheight * 1 / 10 - 20 * .8 * screenwidth / 1024, string2, 1, 1.5 * screenwidth / 1024 * .8, screenwidth, screenheight);
                 text->glPrint(screenwidth / 2 - 7.6 * strlen(string3)*screenwidth / 1024 * .8, 0 + screenheight * 1 / 10 - 40 * .8 * screenwidth / 1024, string3, 1, 1.5 * screenwidth / 1024 * .8, screenwidth, screenheight);
             }
-            //Hot spots
 
-            if (numhotspots && (bonustime >= 1 || bonus <= 0 || bonustime < 0) && !tutoriallevel) {
-                int closest = -1;
+            //Hot spots
+            if (Hotspot::hotspots.size() && (bonustime >= 1 || bonus <= 0 || bonustime < 0) && !tutoriallevel) {
                 float closestdist = -1;
                 float distance = 0;
-                closest = currenthotspot;
-                for (int i = 0; i < numhotspots; i++) {
-                    distance = distsq(&Person::players[0]->coords, &hotspot[i]);
+                int closest = Hotspot::current;
+                for (int i = 0; i < Hotspot::hotspots.size(); i++) {
+                    distance = distsq(&Person::players[0]->coords, &Hotspot::hotspots[i].position);
                     if (closestdist == -1 || distance < closestdist) {
-                        if (distsq(&Person::players[0]->coords, &hotspot[i]) < hotspotsize[i] && ((hotspottype[i] <= 10 && hotspottype[i] >= 0) || (hotspottype[i] <= 40 && hotspottype[i] >= 20))) {
+                        if (distsq(&Person::players[0]->coords, &Hotspot::hotspots[i].position) < Hotspot::hotspots[i].size && ((Hotspot::hotspots[i].type <= 10 && Hotspot::hotspots[i].type >= 0) || (Hotspot::hotspots[i].type <= 40 && Hotspot::hotspots[i].type >= 20))) {
                             closestdist = distance;
                             closest = i;
                         }
                     }
                 }
-                if (closest != -1)
-                    currenthotspot = closest;
-                if (currenthotspot != -1) {
-                    if (hotspottype[closest] <= 10) {
-                        if (distsq(&Person::players[0]->coords, &hotspot[closest]) < hotspotsize[closest])
+                if (closest != -1) {
+                    Hotspot::current = closest;
+                    if (Hotspot::hotspots[closest].type <= 10) {
+                        if (distsq(&Person::players[0]->coords, &Hotspot::hotspots[closest].position) < Hotspot::hotspots[closest].size)
                             tutorialstagetime = 0;
                         tutorialmaxtime = 1;
                         tutorialopac = tutorialmaxtime - tutorialstagetime;
@@ -957,7 +911,7 @@ int Game::DrawGLScene(StereoSide side)
                         if (tutorialopac < 0)
                             tutorialopac = 0;
 
-                        sprintf (string, "%s", hotspottext[closest]);
+                        sprintf (string, "%s", Hotspot::hotspots[closest].text);
 
                         int lastline = 0;
                         int line = 0;
@@ -978,48 +932,15 @@ int Game::DrawGLScene(StereoSide side)
                                 done = 1;
                             i++;
                         }
-                    } else if (hotspottype[closest] >= 20 && dialoguegonethrough[hotspottype[closest] - 20] == 0) {
-                        whichdialogue = hotspottype[closest] - 20;
-                        for (int j = 0; j < numdialogueboxes[whichdialogue]; j++) {
-                            Person::players[participantfocus[whichdialogue][j]]->coords = participantlocation[whichdialogue][participantfocus[whichdialogue][j]];
-                            Person::players[participantfocus[whichdialogue][j]]->yaw = participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
-                            Person::players[participantfocus[whichdialogue][j]]->targetyaw = participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
-                            Person::players[participantfocus[whichdialogue][j]]->velocity = 0;
-                            Person::players[participantfocus[whichdialogue][j]]->animTarget = Person::players[participantfocus[whichdialogue][j]]->getIdle();
-                            Person::players[participantfocus[whichdialogue][j]]->frameTarget = 0;
-                        }
-                        directing = 0;
-                        indialogue = 0;
-                        dialoguegonethrough[whichdialogue]++;
-                        if (dialogueboxsound[whichdialogue][indialogue] != 0) {
-                            int whichsoundplay;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 1) whichsoundplay = rabbitchitter;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 2) whichsoundplay = rabbitchitter2;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 3) whichsoundplay = rabbitpainsound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 4) whichsoundplay = rabbitpain1sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 5) whichsoundplay = rabbitattacksound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 6) whichsoundplay = rabbitattack2sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 7) whichsoundplay = rabbitattack3sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 8) whichsoundplay = rabbitattack4sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 9) whichsoundplay = growlsound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 10) whichsoundplay = growl2sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 11) whichsoundplay = snarlsound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 12) whichsoundplay = snarl2sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 13) whichsoundplay = barksound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 14) whichsoundplay = bark2sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 15) whichsoundplay = bark3sound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == 16) whichsoundplay = barkgrowlsound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == -1) whichsoundplay = fireendsound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == -2) whichsoundplay = firestartsound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == -3) whichsoundplay = consolesuccesssound;
-                            if (dialogueboxsound[whichdialogue][indialogue] == -4) whichsoundplay = consolefailsound;
-                            emit_sound_at(whichsoundplay, Person::players[participantfocus[whichdialogue][indialogue]]->coords);
-                        }
+                    } else if ((Hotspot::hotspots[closest].type >= 20) && (Dialog::dialogs[Hotspot::hotspots[closest].type - 20].gonethrough == 0)) {
+                        Dialog::whichdialogue = Hotspot::hotspots[closest].type - 20;
+                        Dialog::currentDialog().play();
+                        Dialog::currentDialog().gonethrough++;
                     }
                 }
             }
 
-            if (indialogue != -1 && !mainmenu) {
+            if (Dialog::inDialog() && !mainmenu) {
                 glDisable(GL_DEPTH_TEST);
                 glDisable(GL_CULL_FACE);
                 glDisable(GL_LIGHTING);
@@ -1032,13 +953,13 @@ int Game::DrawGLScene(StereoSide side)
                 glMatrixMode(GL_MODELVIEW);
                 glPushMatrix();
                 glLoadIdentity();
-                if (dialogueboxlocation[whichdialogue][indialogue] == 1)
+                if (Dialog::currentScene().location == 1)
                     glTranslatef(0, screenheight * 3 / 4, 0);
                 glScalef(screenwidth, screenheight / 4, 1);
                 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
                 glEnable(GL_BLEND);
 
-                glColor4f(dialogueboxcolor[whichdialogue][indialogue][0], dialogueboxcolor[whichdialogue][indialogue][1], dialogueboxcolor[whichdialogue][indialogue][2], 0.7);
+                glColor4f(Dialog::currentScene().color[0], Dialog::currentScene().color[1], Dialog::currentScene().color[2], 0.7);
                 glBegin(GL_QUADS);
                 glVertex3f(0, 0, 0.0f);
                 glVertex3f(1, 0, 0.0f);
@@ -1061,32 +982,28 @@ int Game::DrawGLScene(StereoSide side)
                 float starty;
 
                 startx = screenwidth * 1 / 5;
-                if (dialogueboxlocation[whichdialogue][indialogue] == 1)
+                if (Dialog::currentScene().location == 1)
                     starty = screenheight / 16 + screenheight * 4 / 5;
-                if (dialogueboxlocation[whichdialogue][indialogue] == 2)
+                if (Dialog::currentScene().location == 2)
                     starty = screenheight * 1 / 5 - screenheight / 16;
 
                 char tempname[264];
-                bool goodchar;
                 int tempnum = 0;
                 for (int i = 0; i < 264; i++) {
                     tempname[i] = '\0';
                 }
 
-                for (int i = 0; i < (int)strlen(dialoguename[whichdialogue][indialogue]); i++) {
-                    tempname[tempnum] = dialoguename[whichdialogue][indialogue][i];
-                    goodchar = 1;
-                    if (dialoguename[whichdialogue][indialogue][i] == '#' || dialoguename[whichdialogue][indialogue][i] == '\0')
-                        goodchar = 0;
-                    if (goodchar)
-                        tempnum++;
-                    else
+                for (int i = 0; i < Dialog::currentScene().name.size(); i++) {
+                    tempname[tempnum] = Dialog::currentScene().name[i];
+                    if (tempname[tempnum] == '#' || tempname[tempnum] == '\0')
                         tempname[tempnum] = '\0';
+                    else
+                        tempnum++;
                 }
 
                 sprintf (string, "%s: ", tempname);
 
-                if (dialogueboxcolor[whichdialogue][indialogue][0] + dialogueboxcolor[whichdialogue][indialogue][1] + dialogueboxcolor[whichdialogue][indialogue][2] < 1.5) {
+                if (Dialog::currentScene().color[0] + Dialog::currentScene().color[1] + Dialog::currentScene().color[2] < 1.5) {
                     glColor4f(0, 0, 0, tutorialopac);
                     text->glPrintOutline(startx - 2 * 7.6 * strlen(string)*screenwidth / 1024 - 4, starty - 4, string, 1, 1.5 * 1.25 * screenwidth / 1024, screenwidth, screenheight);
                     glColor4f(0.7, 0.7, 0.7, tutorialopac);
@@ -1097,9 +1014,9 @@ int Game::DrawGLScene(StereoSide side)
                 }
 
                 tempnum = 0;
-                for (int i = 0; i < (int)strlen(dialoguetext[whichdialogue][indialogue]) + 1; i++) {
-                    tempname[tempnum] = dialoguetext[whichdialogue][indialogue][i];
-                    if (dialoguetext[whichdialogue][indialogue][i] != '#')
+                for (int i = 0; i < Dialog::currentScene().text.size() + 1; i++) {
+                    tempname[tempnum] = Dialog::currentScene().text[i];
+                    if (Dialog::currentScene().text[i] != '#')
                         tempnum++;
                 }
 
@@ -1111,7 +1028,7 @@ int Game::DrawGLScene(StereoSide side)
                 int i = 0;
                 while (!done) {
                     if (string[i] == '\n' || string[i] > 'z' || string[i] < ' ' || string[i] == '\0') {
-                        if (dialogueboxcolor[whichdialogue][indialogue][0] + dialogueboxcolor[whichdialogue][indialogue][1] + dialogueboxcolor[whichdialogue][indialogue][2] < 1.5) {
+                        if (Dialog::currentScene().color[0] + Dialog::currentScene().color[1] + Dialog::currentScene().color[2] < 1.5) {
                             glColor4f(0, 0, 0, tutorialopac);
                             text->glPrintOutline(startx/*-7.6*(i-lastline)*screenwidth/1024*/ - 4, starty - 4 - 20 * screenwidth / 1024 * line, string, 1, 1.5 * 1.25 * screenwidth / 1024, screenwidth, screenheight, lastline, i);
                             glColor4f(1, 1, 1, tutorialopac);
@@ -1131,12 +1048,12 @@ int Game::DrawGLScene(StereoSide side)
                 }
             }
 
-            if (!tutoriallevel && !winfreeze && indialogue == -1 && !mainmenu) {
+            if (!tutoriallevel && !winfreeze && !Dialog::inDialog() && !mainmenu) {
                 if (campaign) {
                     if (scoreadded)
-                        sprintf (string, "Score: %d", (int)accountactive->getCampaignScore());
+                        sprintf (string, "Score: %d", (int)Account::active->getCampaignScore());
                     else
-                        sprintf (string, "Score: %d", (int)accountactive->getCampaignScore() + (int)bonustotal);
+                        sprintf (string, "Score: %d", (int)Account::active->getCampaignScore() + (int)bonustotal);
                 }
                 if (!campaign)
                     sprintf (string, "Score: %d", (int)bonustotal);
@@ -1233,7 +1150,7 @@ int Game::DrawGLScene(StereoSide side)
             glColor4f(.5, .5, .5, 1);
 
 
-            if ((texttoggle || editorenabled) && debugmode && !mainmenu) {
+            if ((texttoggle || editorenabled) && devtools && !mainmenu) {
                 sprintf (string, "The framespersecond is %d.", (int)(fps));
                 text->glPrint(10, 30, string, 0, .8, 1024, 768);
 
@@ -1443,7 +1360,7 @@ int Game::DrawGLScene(StereoSide side)
                     }
         }
 
-        if (difficulty < 2 && indialogue == -1) { // minimap
+        if (difficulty < 2 && !Dialog::inDialog()) { // minimap
             float mapviewdist = 20000;
 
             glDisable(GL_DEPTH_TEST);
@@ -1473,50 +1390,9 @@ int Game::DrawGLScene(StereoSide side)
             XYZ center;
             float radius;
             float distcheck;
-            int numliveplayers = 0;
-            center = 0;
-            for (unsigned i = 0; i < Person::players.size(); i++) {
-                if (!Person::players[i]->dead)
-                    numliveplayers++;
-            }
-
-            int numadd = 0;
-
-            for (int i = 0; i < objects.numobjects; i++) {
-                if (objects.type[i] == treetrunktype || objects.type[i] == boxtype) {
-                    center += objects.position[i];
-                    numadd++;
-                }
-            }
-            for (unsigned i = 0; i < Person::players.size(); i++) {
-                if (!Person::players[i]->dead)
-                    center += Person::players[i]->coords;
-            }
-            center /= numadd + numliveplayers;
 
             center = Person::players[0]->coords;
 
-            float maxdistance = 0;
-            float tempdist;
-            //~ int whichclosest;
-            for (int i = 0; i < objects.numobjects; i++) {
-                tempdist = distsq(&center, &objects.position[i]);
-                if (tempdist > maxdistance) {
-                    //~ whichclosest=i;
-                    maxdistance = tempdist;
-                }
-            }
-            for (unsigned i = 0; i < Person::players.size(); i++) {
-                if (!Person::players[i]->dead) {
-                    tempdist = distsq(&center, &Person::players[i]->coords);
-                    if (tempdist > maxdistance) {
-                        //~ whichclosest=i;
-                        maxdistance = tempdist;
-                    }
-                }
-            }
-            radius = fast_sqrt(maxdistance);
-
             radius = 110;
 
             glScalef(.25 / radius * 256 * terrain.scale * .4, .25 / radius * 256 * terrain.scale * .4, 1);
@@ -1683,7 +1559,6 @@ int Game::DrawGLScene(StereoSide side)
                 text->glPrint(1024 / 2 - 90, 768 / 2, string, 1, 2, 1024, 768);
             }
             loading = 2;
-            //if(ismotionblur)drawmode=motionblurmode;
             drawmode = normalmode;
         }
 
@@ -1735,21 +1610,19 @@ int Game::DrawGLScene(StereoSide side)
             sprintf (string, "Score:     %d", (int)(bonustotal - startbonustotal));
             text->glPrintOutlined(1024 / 30, 768 * 6 / 8, string, 1, 2, 1024, 768);
 
-            if (campaign)
-                sprintf (string, "Press Escape or Space to continue");
-            else
-                sprintf (string, "Press Escape to return to menu or Space to continue");
+            sprintf (string, "Press Escape to return to menu or Space to continue");
             text->glPrintOutlined(640 / 2 - strlen(string) * 5, 480 * 1 / 16, string, 1, 1, 640, 480);
 
             char temp[255];
 
             for (int i = 0; i < 255; i++)
                 string[i] = '\0';
-            sprintf (temp, "Time:      %d:", (int)(((int)leveltime - (int)(leveltime) % 60) / 60));
+            int wontime = (int)round(wonleveltime);
+            sprintf (temp, "Time:      %d:", int((wontime - wontime % 60) / 60));
             strcat(string, temp);
-            if ((int)(leveltime) % 60 < 10)
+            if (wontime % 60 < 10)
                 strcat(string, "0");
-            sprintf (temp, "%d", (int)(leveltime) % 60);
+            sprintf (temp, "%d", wontime % 60);
             strcat(string, temp);
             text->glPrintOutlined(1024 / 30, 768 * 6 / 8 - 40, string, 1, 2, 1024, 768);
 
@@ -1770,7 +1643,6 @@ int Game::DrawGLScene(StereoSide side)
                     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
                     GLfloat subtractColor[4] = { 0.5, 0.5, 0.5, 0.0 };
                     glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, subtractColor);
-                    //glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_SUBTRACT);
                     glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
                     glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_CONSTANT_EXT);
                     glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 2.0f);
@@ -1798,7 +1670,6 @@ int Game::DrawGLScene(StereoSide side)
                     glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, kTextureSize, kTextureSize, 0);
                 }
             }
-            //glFlush();
         }
 
         glClear(GL_DEPTH_BUFFER_BIT);
@@ -1835,7 +1706,6 @@ int Game::DrawGLScene(StereoSide side)
             if (drawmode == motionblurmode) {
                 if (motionbluramount < .2)
                     motionbluramount = .2;
-                //glColor4f(1,1,1,fast_sqrt(multiplier)*2.9*motionbluramount);
                 glColor4f(1, 1, 1, motionbluramount);
                 glPushMatrix();
                 glBegin(GL_QUADS);
@@ -1984,7 +1854,6 @@ int Game::DrawGLScene(StereoSide side)
             }
             if (drawmode == radialzoommode) {
                 for (int i = 0; i < 3; i++) {
-                    //glRotatef((float)i*.1,0,0,1);
                     glColor4f(1, 1, 1, 1 / ((float)i + 1));
                     glPushMatrix();
                     glScalef(1 + (float)i * .01, 1 + (float)i * .01, 1);
@@ -2046,17 +1915,14 @@ int Game::DrawGLScene(StereoSide side)
         multiplier = 0;
     }
 
-    //glFlush();
     if ( side == stereoRight || side == stereoCenter ) {
         if (drawmode != motionblurmode || mainmenu) {
             swap_gl_buffers();
         }
     }
 
-    //myassert(glGetError() == GL_NO_ERROR);
     glDrawBuffer(GL_BACK);
     glReadBuffer(GL_BACK);
-    //glFlush();
 
     weapons.DoStuff();
 
@@ -2178,7 +2044,6 @@ void DrawMenu()
         glColor4f(1, 1, 1, 1);
         Game::cursortexture.bind();
         glPushMatrix();
-        //glScalef(.25,.25,.25);
         glBegin(GL_QUADS);
         glTexCoord2f(0, 0);
         glVertex3f(-1, -1, 0.0f);