Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+
#ifdef WIN32
#define UINT8 WIN32API_UINT8
#define UINT16 WIN32API_UINT16
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);
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>
#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 };
&rect_640_480,
NULL
};
-#endif
+
unsigned int resolutionDepths[8][2] = {0};
} POINT, *PPOINT;
#endif
-#if USE_SDL
+
#ifdef _MSC_VER
#pragma warning(push)
#undef MessageBox
#endif
#define MessageBox(hwnd,text,title,flags) STUBBED("msgbox")
-#endif
+
Point delta;
void DrawGL (Game & game)
{
- game.DrawGLScene();
+ if ( stereomode == stereoNone ) {
+ game.DrawGLScene(stereoCenter);
+ } else {
+ game.DrawGLScene(stereoLeft);
+ game.DrawGLScene(stereoRight);
+ }
}
return g_button;
}
-#if !USE_SDL
-static void initSDLKeyTable(void) {}
-#else
+
#define MAX_SDLKEYS SDLK_LAST
static unsigned short KeyTable[MAX_SDLKEYS];
return;
}
}
-#endif
+
// --------------------------------------------------------------------------
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;
SetupDSpFullScreen();
-#if USE_SDL
+
if (!SDL_WasInit(SDL_INIT_VIDEO))
{
if (SDL_Init(SDL_INIT_VIDEO) == -1)
SDL_ShowCursor(0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
-
+ SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
+
if (SDL_SetVideoMode(kContextWidth, kContextHeight, 0, sdlflags) == NULL)
{
fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError());
if (!cmdline("nomousegrab"))
SDL_WM_GrabInput(SDL_GRAB_ON);
-#endif
+
glClear( GL_COLOR_BUFFER_BIT );
swap_gl_buffers();
glDisable( GL_FOG);
glDisable( GL_LIGHTING);
glDisable( GL_LOGIC_OP);
- glDisable( GL_STENCIL_TEST);
glDisable( GL_TEXTURE_1D);
glDisable( GL_TEXTURE_2D);
glPixelTransferi( GL_MAP_COLOR, GL_FALSE);
game.newscreenwidth=screenwidth;
game.newscreenheight=screenheight;
+ if ( CanInitStereo(stereomode) ) {
+ InitStereo(stereomode);
+ } else {
+ fprintf(stderr, "Failed to initialize stereo, disabling.\n");
+ stereomode = stereoNone;
+ }
+
game.InitGame();
return true;
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;
else if (game.mousecoordv >= kContextHeight)
game.mousecoordv = kContextHeight - 1;
}
-#endif
+
}
-#if USE_SDL
+
SDL_Quit();
#define GL_FUNC(ret,fn,params,call,rt) p##fn = NULL;
#include "glstubs.h"
// cheat here...static destructors are calling glDeleteTexture() after
// the context is destroyed and libGL unloaded by SDL_Quit().
pglDeleteTextures = glDeleteTextures_doNothing;
-#endif
+
}
// --------------------------------------------------------------------------
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;
}
sdlEventProc(e, game);
}
- #endif
+
// game
DoUpdate(game);
// --------------------------------------------------------------------------
-#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)
{
// 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;
}
}
}
+
bool LoadImage(const char * fname, TGAImageRec & tex)
{
bool res = true;