]> git.jsancho.org Git - lugaru.git/blobdiff - Source/OpenGL_Windows.cpp
merging :-)
[lugaru.git] / Source / OpenGL_Windows.cpp
index e112066ebb79df5d3c0946be2b206cc709278283..76f9777e402a7860c1399fbed70fa6e733c8683f 100644 (file)
@@ -19,6 +19,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 
+
 #ifdef WIN32
 #define UINT8 WIN32API_UINT8
 #define UINT16 WIN32API_UINT16
@@ -35,7 +36,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 extern "C" {
        #include "zlib.h"
        #include "png.h"
-       #include "jpeglib.h"
+   #ifdef WIN32
+               #define INT32 INT32_jpeg
+               #include "jpeglib.h"
+               #undef INT32
+       #else
+               #include "jpeglib.h"
+       #endif
 }
 
 static bool load_image(const char * fname, TGAImageRec & tex);
@@ -56,51 +63,28 @@ static bool save_png(const char * fname);
 
 extern bool buttons[3];
 extern float multiplier;
-extern float screenwidth,screenheight;
 extern float sps;
 extern float realmultiplier;
 extern int slomo;
-extern bool ismotionblur;
-extern float usermousesensitivity;
-extern int detail;
-extern bool floatjump;
 extern bool cellophane;
 // MODIFIED GWC
 //extern int terraindetail;
 //extern int texdetail;
 extern float terraindetail;
 extern float texdetail;
-extern int bloodtoggle;
+
 extern bool osx;
-extern bool autoslomo;
-extern bool foliage;
-extern bool musictoggle;
-extern bool trilinear;
-extern float gamespeed;
-extern int difficulty;
-extern bool damageeffects;
 extern int numplayers;
-extern bool decals;
-extern bool invertmouse;
-extern bool texttoggle;
-extern bool ambientsound;
-extern bool mousejump;
 extern bool freeze;
 extern Person player[maxplayers];
-extern bool vblsync;
 extern bool stillloading;
-extern bool showpoints;
-extern bool alwaysblur;
-extern bool immediate;
-extern bool velocityblur;
-extern bool debugmode;
 extern int mainmenu;
 /*extern*/ bool gameFocused;
-extern int kBitsPerPixel;
+
 extern float slomospeed;
 extern float slomofreq;
-extern float oldgamespeed;
-extern float volume;
+
+
 
 #include <math.h>
 #include <stdio.h>
@@ -109,17 +93,17 @@ extern float volume;
 #include <iostream>
 #include "gamegl.h"
 #include "MacCompatibility.h"
+#include "Settings.h"
 
 #ifdef WIN32
 #include <shellapi.h>
+#include "win-res/resource.h"
 #endif
 
-#include "res/resource.h"
-
 using namespace std;
 
 
-#if USE_SDL
+
 SDL_Rect **resolutions = NULL;
 static SDL_Rect rect_1024_768 = { 0, 0, 1024, 768 };
 static SDL_Rect rect_800_600  = { 0, 0, 800,  600 };
@@ -130,7 +114,7 @@ static SDL_Rect *hardcoded_resolutions[] = {
     &rect_640_480,
     NULL
 };
-#endif
+
 
 
 unsigned int resolutionDepths[8][2] = {0};
@@ -163,7 +147,7 @@ typedef struct tagPOINT {
 } POINT, *PPOINT; 
 #endif
 
-#if USE_SDL
+
 
 #ifdef _MSC_VER
 #pragma warning(push)
@@ -225,7 +209,7 @@ void sdlGetCursorPos(POINT *pt)
 #undef MessageBox
 #endif
 #define MessageBox(hwnd,text,title,flags) STUBBED("msgbox")
-#endif
+
 
 Point delta;
 
@@ -339,9 +323,7 @@ Boolean Button()
     return g_button;
 }
 
-#if !USE_SDL
-static void initSDLKeyTable(void) {}
-#else
+
 #define MAX_SDLKEYS SDLK_LAST
 static unsigned short KeyTable[MAX_SDLKEYS];
 
@@ -555,7 +537,7 @@ static void sdlEventProc(const SDL_Event &e, Game &game)
             return;
     }
 }
-#endif
+
 
 // --------------------------------------------------------------------------
 
@@ -570,285 +552,20 @@ Boolean SetUp (Game & game)
        randSeed = UpTime().lo;
 
        osx = 0;
-       ifstream ipstream(ConvertFileName(":Data:config.txt"), std::ios::in /*| std::ios::nocreate*/);
-       detail=1;
-       ismotionblur=0;
-       usermousesensitivity=1;
-       kContextWidth=640;
-       kContextHeight=480;
-       kBitsPerPixel = 32;
-       floatjump=0;
        cellophane=0;
        texdetail=4;
-       autoslomo=1;
-       decals=1;
-       invertmouse=0;
-       bloodtoggle=0;
        terraindetail=2;
-       foliage=1;
-       musictoggle=1;
-       trilinear=1;
-       gamespeed=1;
-       difficulty=1;
-       damageeffects=0;
-       texttoggle=1;
-       alwaysblur=0;
-       showpoints=0;
-       immediate=0;
-       velocityblur=0;
-
        slomospeed=0.25;
        slomofreq=8012;
-
-       volume = 0.8f;
-
-       game.crouchkey=MAC_SHIFT_KEY;
-       game.jumpkey=MAC_SPACE_KEY;
-       game.leftkey=MAC_A_KEY;
-       game.forwardkey=MAC_W_KEY;
-       game.backkey=MAC_S_KEY;
-       game.rightkey=MAC_D_KEY;
-       game.drawkey=MAC_E_KEY;
-       game.throwkey=MAC_Q_KEY;
-       game.attackkey=MAC_MOUSEBUTTON1;
-       game.chatkey=MAC_T_KEY;
        numplayers=1;
-       ambientsound=1;
-       vblsync=0;
-       debugmode=0;
+       
+       DefaultSettings(game);
 
        selectDetail(kContextWidth, kContextHeight, kBitsPerPixel, detail);
 
-       if(!ipstream) {
-               ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
-               opstream << "Screenwidth:\n";
-               opstream << kContextWidth;
-               opstream << "\nScreenheight:\n";
-               opstream << kContextHeight;
-               opstream << "\nMouse sensitivity:\n";
-               opstream << usermousesensitivity;
-               opstream << "\nBlur(0,1):\n";
-               opstream << ismotionblur;
-               opstream << "\nOverall Detail(0,1,2) higher=better:\n";
-               opstream << detail;
-               opstream << "\nFloating jump:\n";
-               opstream << floatjump;
-               opstream << "\nMouse jump:\n";
-               opstream << mousejump;
-               opstream << "\nAmbient sound:\n";
-               opstream << ambientsound;
-               opstream << "\nBlood (0,1,2):\n";
-               opstream << bloodtoggle;
-               opstream << "\nAuto slomo:\n";
-               opstream << autoslomo;
-               opstream << "\nFoliage:\n";
-               opstream << foliage;
-               opstream << "\nMusic:\n";
-               opstream << musictoggle;
-               opstream << "\nTrilinear:\n";
-               opstream << trilinear;
-               opstream << "\nDecals(shadows,blood puddles,etc):\n";
-               opstream << decals;
-               opstream << "\nInvert mouse:\n";
-               opstream << invertmouse;
-               opstream << "\nGamespeed:\n";
-               opstream << gamespeed;
-               opstream << "\nDifficulty(0,1,2) higher=harder:\n";
-               opstream << difficulty;
-               opstream << "\nDamage effects(blackout, doublevision):\n";
-               opstream << damageeffects;
-               opstream << "\nText:\n";
-               opstream << texttoggle;
-               opstream << "\nDebug:\n";
-               opstream << debugmode;
-               opstream << "\nVBL Sync:\n";
-               opstream << vblsync;
-               opstream << "\nShow Points:\n";
-               opstream << showpoints;
-               opstream << "\nAlways Blur:\n";
-               opstream << alwaysblur;
-               opstream << "\nImmediate mode (turn on on G5):\n";
-               opstream << immediate;
-               opstream << "\nVelocity blur:\n";
-               opstream << velocityblur;
-               opstream << "\nVolume:\n";
-               opstream << volume;
-               opstream << "\nForward key:\n";
-               opstream << KeyToChar(game.forwardkey);
-               opstream << "\nBack key:\n";
-               opstream << KeyToChar(game.backkey);
-               opstream << "\nLeft key:\n";
-               opstream << KeyToChar(game.leftkey);
-               opstream << "\nRight key:\n";
-               opstream << KeyToChar(game.rightkey);
-               opstream << "\nJump key:\n";
-               opstream << KeyToChar(game.jumpkey);
-               opstream << "\nCrouch key:\n";
-               opstream << KeyToChar(game.crouchkey);
-               opstream << "\nDraw key:\n";
-               opstream << KeyToChar(game.drawkey);
-               opstream << "\nThrow key:\n";
-               opstream << KeyToChar(game.throwkey);
-               opstream << "\nAttack key:\n";
-               opstream << KeyToChar(game.attackkey);
-               opstream << "\nChat key:\n";
-               opstream << KeyToChar(game.chatkey);
-               opstream.close();
-       }
-       if(ipstream){
-               int i;
-               ipstream.ignore(256,'\n');
-               ipstream >> kContextWidth;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> kContextHeight;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> usermousesensitivity;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               ismotionblur = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> detail;
-               if(detail!=0)kBitsPerPixel=32;
-               else kBitsPerPixel=16;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               floatjump = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               mousejump = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               ambientsound = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> bloodtoggle;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               autoslomo = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               foliage = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               musictoggle = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               trilinear = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               decals = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               invertmouse = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> gamespeed;
-               oldgamespeed=gamespeed;
-               if(oldgamespeed==0){
-                       gamespeed=1;
-                       oldgamespeed=1;
-               }
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> difficulty;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               damageeffects = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               texttoggle = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               debugmode = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               vblsync = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               showpoints = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               alwaysblur = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               immediate = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               velocityblur = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n'); 
-               ipstream >> volume;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n'); 
-               ipstream >> string;
-               game.forwardkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.backkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.leftkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.rightkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.jumpkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.crouchkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.drawkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.throwkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.attackkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.chatkey=CharToKey(string);
-               ipstream.close();
-
-               if(detail>2)detail=2;
-               if(detail<0)detail=0;
-               if(screenwidth<0)screenwidth=640;
-               if(screenheight<0)screenheight=480;
-#if !USE_SDL  // we'll take anything that works.
-               if(screenwidth>3000)screenwidth=640;
-               if(screenheight>3000)screenheight=480;
-#endif
+       if(!LoadSettings(game)) {
+               fprintf(stderr, "Failed to load config, creating default\n");
+               SaveSettings(game);
        }
        if(kBitsPerPixel!=32&&kBitsPerPixel!=16){
                kBitsPerPixel=16;
@@ -859,7 +576,7 @@ Boolean SetUp (Game & game)
 
        SetupDSpFullScreen();
 
-#if USE_SDL
+
     if (!SDL_WasInit(SDL_INIT_VIDEO))
     {
         if (SDL_Init(SDL_INIT_VIDEO) == -1)
@@ -957,7 +674,7 @@ Boolean SetUp (Game & game)
 
     if (!cmdline("nomousegrab"))
         SDL_WM_GrabInput(SDL_GRAB_ON);
-#endif
+
 
        glClear( GL_COLOR_BUFFER_BIT );
        swap_gl_buffers();
@@ -1020,7 +737,7 @@ Boolean SetUp (Game & game)
 
 static void DoMouse(Game & game)
 {
-#if USE_SDL
+
        if(mainmenu||(abs(game.deltah)<10*realmultiplier*1000&&abs(game.deltav)<10*realmultiplier*1000))
        {
                game.deltah *= usermousesensitivity;
@@ -1036,7 +753,7 @@ static void DoMouse(Game & game)
         else if (game.mousecoordv >= kContextHeight)
             game.mousecoordv = kContextHeight - 1;
        }
-#endif
+
 }
 
 
@@ -1174,7 +891,7 @@ void CleanUp (void)
 
 
 
-#if USE_SDL
+
     SDL_Quit();
     #define GL_FUNC(ret,fn,params,call,rt) p##fn = NULL;
     #include "glstubs.h"
@@ -1182,18 +899,14 @@ void CleanUp (void)
     // cheat here...static destructors are calling glDeleteTexture() after
     //  the context is destroyed and libGL unloaded by SDL_Quit().
     pglDeleteTextures = glDeleteTextures_doNothing;
-#endif
+
 }
 
 // --------------------------------------------------------------------------
 
-static bool g_focused = true;
-
-
 static bool IsFocused()
 {
-    STUBBED("write me");
-       return true;
+    return ((SDL_GetAppState() & SDL_APPINPUTFOCUS) != 0);
 }
 
 
@@ -1356,14 +1069,14 @@ int main(int argc, char **argv)
                        if (!SetUp (game))
                 return 42;
 
-                       while (!gDone&&!game.quit&&(!game.tryquit||!game.registered))
+                       while (!gDone&&!game.quit&&(!game.tryquit))
                        {
                                if (IsFocused())
                                {
                                        gameFocused = true;
 
                                        // check windows messages
-                                       #if USE_SDL
+                       
                                        game.deltah = 0;
                                        game.deltav = 0;
                                        SDL_Event e;
@@ -1377,7 +1090,7 @@ int main(int argc, char **argv)
                                                }
                                                sdlEventProc(e, game);
                                        }
-                                       #endif
+                               
 
                                        // game
                                        DoUpdate(game);
@@ -1439,41 +1152,7 @@ int main(int argc, char **argv)
 
        // --------------------------------------------------------------------------
 
-#if !USE_SDL
-       int resolutionID(int width, int height)
-       {
-               int whichres;
-               whichres=-1;
-               if(width==640 && height==480)whichres=0;
-               if(width==800 && height==600)whichres=1;
-               if(width==1024 && height==768)whichres=2;
-               if(width==1280 && height==1024)whichres=3;
-               if(width==1600 && height==1200)whichres=4;
-               if(width==840 && height==524)whichres=5;
-               if(width==1024 && height==640)whichres=6;
-               if(width==1344 && height==840)whichres=7;
-               if(width==1920 && height==1200)whichres=8;
-
-               return whichres;
-       }
 
-       int closestResolution(int width, int height)
-       {
-               int whichres;
-               whichres=-1;
-               if(width>=640 && height>=480)whichres=0;
-               if(width>=800 && height>=600)whichres=1;
-               if(width>=1024 && height>=768)whichres=2;
-               if(width>=1280 && height>=1024)whichres=3;
-               if(width>=1600 && height>=1200)whichres=4;
-               if(width==840 && height==524)whichres=5;
-               if(width==1024 && height==640)whichres=6;
-               if(width==1344 && height==840)whichres=7;
-               if(width>=1920 && height>=1200)whichres=8;
-
-               return whichres;
-       }
-#endif
 
        bool selectDetail(int & width, int & height, int & bpp, int & detail)
        {
@@ -1481,75 +1160,7 @@ int main(int argc, char **argv)
 
                // currently with SDL, we just use whatever is requested
                //  and don't care.  --ryan.
-               #if !USE_SDL
-               int whichres = closestResolution(width, height);
-
-               while (true)
-               {
-                       if(whichres<=0 || whichres>8){
-                               whichres = 0;
-                               width=640;
-                               height=480;
-                       }
-                       if(whichres==1){
-                               width=800;
-                               height=600;
-                       }
-                       if(whichres==2){
-                               width=1024;
-                               height=768;
-                       }
-                       if(whichres==3){
-                               width=1280;
-                               height=1024;
-                       }
-                       if(whichres==4){
-                               width=1600;
-                               height=1200;
-                       }
-                       if(whichres==5){
-                               width=840;
-                               height=524;
-                       }
-                       if(whichres==6){
-                               width=1024;
-                               height=640;
-                       }
-                       if(whichres==7){
-                               width=1344;
-                               height=840;
-                       }
-                       if(whichres==8){
-                               width=1920;
-                               height=1200;
-                       }
-
-                       if ((detail != 0) && (resolutionDepths[whichres][1] != 0))
-                       {
-                               break;
-                       }
-                       else if ((detail == 0) && (resolutionDepths[whichres][0] != 0))
-                       {
-                               break;
-                       }
-                       else if ((detail != 0) && (resolutionDepths[whichres][0] != 0))
-                       {
-                               res = false;
-                               detail = 0;
-                               break;
-                       }
-                       else
-
-            if (0 == whichres)
-                       {
-                               break;
-                       }
-
-                       --whichres;
-               }
-
-               bpp = resolutionDepths[whichres][(detail != 0)];
-               #endif
+               
 
                return res;
        }
@@ -1610,6 +1221,7 @@ int main(int argc, char **argv)
                }
        }
 
+
        bool LoadImage(const char * fname, TGAImageRec & tex)
        {
                bool res = true;