static bool load_image(const char * fname, TGAImageRec & tex);
static bool load_png(const char * fname, TGAImageRec & tex);
static bool load_jpg(const char * fname, TGAImageRec & tex);
-static bool save_image(const char * fname);
+bool save_image(const char * fname);
static bool save_png(const char * fname);
#include "openal_wrapper.h"
-// ADDED GWC
-#ifdef _MSC_VER
-#pragma comment(lib, "opengl32.lib")
-#pragma comment(lib, "glu32.lib")
-#pragma comment(lib, "glaux.lib")
-#endif
-
extern float multiplier;
extern float sps;
extern float realmultiplier;
extern int slomo;
extern bool cellophane;
-// MODIFIED GWC
-//extern int terraindetail;
-//extern int texdetail;
-extern float terraindetail;
extern float texdetail;
extern bool osx;
-extern int numplayers;
extern bool freeze;
-extern Person player[maxplayers];
extern bool stillloading;
extern int mainmenu;
/*extern*/ bool gameFocused;
using namespace std;
-
-
SDL_Rect **resolutions = NULL;
static SDL_Rect rect_1024_768 = { 0, 0, 1024, 768 };
static SDL_Rect rect_800_600 = { 0, 0, 800, 600 };
NULL
};
-
-
-unsigned int resolutionDepths[8][2] = {0};
-
-int closestResolution(int width, int height);
-int resolutionID(int width, int height);
-
-void ReportError (char * strError);
-
void DrawGL(Game & game);
-void CreateGLWindow (void);
Boolean SetUp (Game & game);
void DoUpdate (Game & game);
-void DoEvent (void);
void CleanUp (void);
-
// statics/globals (internal only) ------------------------------------------
-#ifndef WIN32
-typedef struct tagPOINT {
- int x;
- int y;
-} POINT, *PPOINT;
-#endif
-
-
#ifdef _MSC_VER
#pragma warning(push)
// no-op.
}
-
-
-void sdlGetCursorPos(POINT *pt)
-{
- SDL_GetMouseState(&(pt->x), &(pt->y));
-}
-#define GetCursorPos(x) sdlGetCursorPos(x)
-#define SetCursorPos(x, y) SDL_WarpMouse(x, y)
-#define ScreenToClient(x, pt)
-#define ClientToScreen(x, pt)
#ifdef MessageBox
#undef MessageBox
#endif
#define MessageBox(hwnd,text,title,flags) STUBBED("msgbox")
-
-Point delta;
-
-static bool g_button, fullscreen = true;
-
-
// Menu defs
-enum
-{
- kFileQuit = 1
-};
-
-enum
-{
- kForegroundSleep = 10,
- kBackgroundSleep = 10000
-};
-
int kContextWidth;
int kContextHeight;
-const RGBColor rgbBlack = { 0x0000, 0x0000, 0x0000 };
-
-GLuint gFontList;
-char gcstrMode [256] = "";
-
-UInt32 gSleepTime = kForegroundSleep;
-Boolean gDone = false, gfFrontProcess = true;
+Boolean gDone = false;
Game * pgame = 0;
return false;
}
+//-----------------------------------------------------------------------------------------------------------------------
-// --------------------------------------------------------------------------
-
-void ReportError (char * strError)
-{
-#ifdef _MSC_VER // !!! FIXME. --ryan.
- throw std::exception( strError);
-#endif
-
- /* char errMsgCStr [256];
- Str255 strErr;
-
- sprintf (errMsgCStr, "%s", strError);
+// OpenGL Drawing
- // out as debug string
- CToPStr (strErr, errMsgCStr);
- DebugStr (strErr);
- */
-}
+void initGL(){
+ glClear( GL_COLOR_BUFFER_BIT );
+ swap_gl_buffers();
-//-----------------------------------------------------------------------------------------------------------------------
+ // clear all states
+ glDisable( GL_ALPHA_TEST);
+ glDisable( GL_BLEND);
+ glDisable( GL_DEPTH_TEST);
+ // glDisable( GL_DITHER);
+ glDisable( GL_FOG);
+ glDisable( GL_LIGHTING);
+ glDisable( GL_LOGIC_OP);
+ glDisable( GL_TEXTURE_1D);
+ glDisable( GL_TEXTURE_2D);
+ glPixelTransferi( GL_MAP_COLOR, GL_FALSE);
+ glPixelTransferi( GL_RED_SCALE, 1);
+ glPixelTransferi( GL_RED_BIAS, 0);
+ glPixelTransferi( GL_GREEN_SCALE, 1);
+ glPixelTransferi( GL_GREEN_BIAS, 0);
+ glPixelTransferi( GL_BLUE_SCALE, 1);
+ glPixelTransferi( GL_BLUE_BIAS, 0);
+ glPixelTransferi( GL_ALPHA_SCALE, 1);
+ glPixelTransferi( GL_ALPHA_BIAS, 0);
-// OpenGL Drawing
+ // set initial rendering states
+ glShadeModel( GL_SMOOTH);
+ glClearDepth( 1.0f);
+ glDepthFunc( GL_LEQUAL);
+ glDepthMask( GL_TRUE);
+ // glDepthRange( FRONT_CLIP, BACK_CLIP);
+ glEnable( GL_DEPTH_TEST);
+ glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+ glCullFace( GL_FRONT);
+ glEnable( GL_CULL_FACE);
+ glEnable( GL_LIGHTING);
+// glEnable( GL_LIGHT_MODEL_AMBIENT);
+ glEnable( GL_DITHER);
+ glEnable( GL_COLOR_MATERIAL);
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glAlphaFunc( GL_GREATER, 0.5f);
-void DrawGL (Game & game)
-{
- if ( stereomode == stereoNone ) {
- game.DrawGLScene(stereoCenter);
+ if ( CanInitStereo(stereomode) ) {
+ InitStereo(stereomode);
} else {
- game.DrawGLScene(stereoLeft);
- game.DrawGLScene(stereoRight);
+ fprintf(stderr, "Failed to initialize stereo, disabling.\n");
+ stereomode = stereoNone;
}
}
-static void sdlEventProc(const SDL_Event &e, Game &game)
-{
- int val;
- SDLMod mod;
+static void toggleFullscreen(){
+ SDL_Surface* screen=SDL_GetVideoSurface();
+ Uint32 flags=screen->flags;
+ screen=SDL_SetVideoMode(0,0,0,flags^SDL_FULLSCREEN);
+ if(!screen)
+ screen=SDL_SetVideoMode(0,0,0,flags);
+ if(!screen)
+ exit(1);
+ //reload opengl state
+ initGL();
+ for(std::vector<TextureInfo>::iterator it=Game::textures.begin(); it!=Game::textures.end(); it++){
+ it->load();
+ }
+ pgame->text.BuildFont();
+ pgame->LoadScreenTexture();
+}
- switch(e.type)
- {
+static void sdlEventProc(const SDL_Event &e, Game &game){
+ switch(e.type){
case SDL_MOUSEMOTION:
game.deltah += e.motion.xrel;
game.deltav += e.motion.yrel;
- return;
-
+ break;
case SDL_KEYDOWN:
if ((e.key.keysym.sym == SDLK_g) &&
(e.key.keysym.mod & KMOD_CTRL) &&
!(SDL_GetVideoSurface()->flags & SDL_FULLSCREEN) ) {
SDL_WM_GrabInput( ((SDL_WM_GrabInput(SDL_GRAB_QUERY)==SDL_GRAB_ON) ? SDL_GRAB_OFF:SDL_GRAB_ON) );
} else if ( (e.key.keysym.sym == SDLK_RETURN) && (e.key.keysym.mod & KMOD_ALT) ) {
- SDL_WM_ToggleFullScreen(SDL_GetVideoSurface());
+ toggleFullscreen();
}
- return;
+ break;
+ case SDL_ACTIVEEVENT:
+ if(e.active.state&SDL_APPINPUTFOCUS){
+ if(e.active.gain){
+ SDL_WM_GrabInput(SDL_GRAB_ON);
+ gameFocused=true;
+ }else{
+ SDL_WM_GrabInput(SDL_GRAB_OFF);
+ gameFocused=false;
+ }
+ }
+ break;
}
}
LOGFUNC;
- randSeed = UpTime().lo;
-
osx = 0;
cellophane=0;
texdetail=4;
- terraindetail=2;
slomospeed=0.25;
slomofreq=8012;
numplayers=1;
}
Uint32 sdlflags = SDL_OPENGL;
- if (!cmdline("windowed"))
- sdlflags |= SDL_FULLSCREEN;
+ //TODO: commented out temporarily
+ //if (!cmdline("windowed"))
+ //sdlflags |= SDL_FULLSCREEN;
SDL_WM_SetCaption("Lugaru", "Lugaru");
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
+#if SDL_VERSION_ATLEAST(1, 2, 10)
+ SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, vblsync);
+#endif
if (SDL_SetVideoMode(kContextWidth, kContextHeight, 0, sdlflags) == NULL)
{
SDL_WM_GrabInput(SDL_GRAB_ON);
- glClear( GL_COLOR_BUFFER_BIT );
- swap_gl_buffers();
-
- // clear all states
- glDisable( GL_ALPHA_TEST);
- glDisable( GL_BLEND);
- glDisable( GL_DEPTH_TEST);
- // glDisable( GL_DITHER);
- glDisable( GL_FOG);
- glDisable( GL_LIGHTING);
- glDisable( GL_LOGIC_OP);
- glDisable( GL_TEXTURE_1D);
- glDisable( GL_TEXTURE_2D);
- glPixelTransferi( GL_MAP_COLOR, GL_FALSE);
- glPixelTransferi( GL_RED_SCALE, 1);
- glPixelTransferi( GL_RED_BIAS, 0);
- glPixelTransferi( GL_GREEN_SCALE, 1);
- glPixelTransferi( GL_GREEN_BIAS, 0);
- glPixelTransferi( GL_BLUE_SCALE, 1);
- glPixelTransferi( GL_BLUE_BIAS, 0);
- glPixelTransferi( GL_ALPHA_SCALE, 1);
- glPixelTransferi( GL_ALPHA_BIAS, 0);
-
- // set initial rendering states
- glShadeModel( GL_SMOOTH);
- glClearDepth( 1.0f);
- glDepthFunc( GL_LEQUAL);
- glDepthMask( GL_TRUE);
- // glDepthRange( FRONT_CLIP, BACK_CLIP);
- glEnable( GL_DEPTH_TEST);
- glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
- glCullFace( GL_FRONT);
- glEnable( GL_CULL_FACE);
- glEnable( GL_LIGHTING);
-// glEnable( GL_LIGHT_MODEL_AMBIENT);
- glEnable( GL_DITHER);
- glEnable( GL_COLOR_MATERIAL);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glAlphaFunc( GL_GREATER, 0.5f);
+ initGL();
GLint width = kContextWidth;
GLint height = kContextHeight;
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(mainmenu||(abs(game.deltah)<10*realmultiplier*1000&&abs(game.deltav)<10*realmultiplier*1000))
+ if(mainmenu|| ( (abs(game.deltah)<10*realmultiplier*1000) && (abs(game.deltav)<10*realmultiplier*1000) ))
{
game.deltah *= usermousesensitivity;
game.deltav *= usermousesensitivity;
count = multiplier*sps;
if(count<2)count=2;
- //if(count>10)count=10;
realmultiplier=multiplier;
multiplier*=gamespeed;
if(difficulty==0)multiplier*=.8;
if(game.loading==4)multiplier*=.00001;
- //multiplier*.9;
if(slomo&&!mainmenu)multiplier*=slomospeed;
- //if(freeze)multiplier*=0.00001;
oldmult=multiplier;
multiplier/=(float)count;
num_channels = 0;
}
*/
- DrawGL (game);
+ game.DrawGL();
}
// --------------------------------------------------------------------------
{
LOGFUNC;
-// game.Dispose();
-
-
-
-
SDL_Quit();
#define GL_FUNC(ret,fn,params,call,rt) p##fn = NULL;
#include "glstubs.h"
}
-static void launch_web_browser(const char *url)
-{
-#ifdef WIN32
- ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
-
-#elif (defined(__APPLE__) && defined(__MACH__))
- const char *fmt = "open '%s'";
- const size_t len = strlen(fmt) + strlen(url) + 16;
- char *buf = new char[len];
- snprintf(buf, len, fmt, url);
- system(buf);
- delete[] buf;
-
-#elif PLATFORM_LINUX
- const char *fmt = "PATH=$PATH:. xdg-open '%s'";
- const size_t len = strlen(fmt) + strlen(url) + 16;
- char *buf = new char[len];
- snprintf(buf, len, fmt, url);
- system(buf);
- delete[] buf;
-#endif
-}
-
#ifndef WIN32
// (code lifted from physfs: http://icculus.org/physfs/ ... zlib license.)
LOGFUNC;
- //memset( &g_theKeys, 0, sizeof( KeyMap));
-
- //initSDLKeyTable();
-
try
{
- bool regnow = false;
{
Game game;
pgame = &game;
while (!gDone&&!game.quit&&(!game.tryquit))
{
- if (IsFocused())
- {
- gameFocused = true;
+ //if (IsFocused()) {
+ //gameFocused = true;
// check windows messages
SDL_Event e;
if(!game.isWaiting()) {
// message pump
- while( SDL_PollEvent( &e ) )
- {
- if( e.type == SDL_QUIT )
- {
- gDone=true;
- break;
+ while( SDL_PollEvent( &e ) ){
+ switch(e.type){
+ case SDL_QUIT:
+ gDone=true;
+ break;
+ default:
+ sdlEventProc(e, game);
+ break;
}
- sdlEventProc(e, game);
}
}
// game
DoUpdate(game);
- }
- else
- {
+ /*
+ }
+ else
+ {
if (gameFocused)
{
// allow game chance to pause
else if (evt.type == SDL_QUIT)
gDone = true;
}
+ */
}
- regnow = game.registernow;
}
pgame = 0;
- // --------------------------------------------------------------------------
-
- extern int channels[100];
- extern OPENAL_SAMPLE * samp[100];
- extern OPENAL_STREAM * strm[20];
-
- extern "C" void PlaySoundEx(int chan, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused)
- {
- const OPENAL_SAMPLE * currSample = OPENAL_GetCurrentSample(channels[chan]);
- if (currSample && currSample == samp[chan])
- {
- if (OPENAL_GetPaused(channels[chan]))
- {
- OPENAL_StopSound(channels[chan]);
- channels[chan] = OPENAL_FREE;
- }
- else if (OPENAL_IsPlaying(channels[chan]))
- {
- int loop_mode = OPENAL_GetLoopMode(channels[chan]);
- if (loop_mode & OPENAL_LOOP_OFF)
- {
- channels[chan] = OPENAL_FREE;
- }
- }
- }
- else
- {
- channels[chan] = OPENAL_FREE;
- }
-
- channels[chan] = OPENAL_PlaySoundEx(channels[chan], sptr, dsp, startpaused);
- if (channels[chan] < 0)
- {
- channels[chan] = OPENAL_PlaySoundEx(OPENAL_FREE, sptr, dsp, startpaused);
- }
- }
-
- extern "C" void PlayStreamEx(int chan, OPENAL_STREAM *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused)
- {
- const OPENAL_SAMPLE * currSample = OPENAL_GetCurrentSample(channels[chan]);
- if (currSample && currSample == OPENAL_Stream_GetSample(sptr))
- {
- OPENAL_StopSound(channels[chan]);
- OPENAL_Stream_Stop(sptr);
- }
- else
- {
- OPENAL_Stream_Stop(sptr);
- channels[chan] = OPENAL_FREE;
- }
-
- channels[chan] = OPENAL_Stream_PlayEx(channels[chan], sptr, dsp, startpaused);
- if (channels[chan] < 0)
- {
- channels[chan] = OPENAL_Stream_PlayEx(OPENAL_FREE, sptr, dsp, startpaused);
- }
- }
+// --------------------------------------------------------------------------
- bool LoadImage(const char * fname, TGAImageRec & tex)
- {
- if ( tex.data == NULL )
- return false;
- else
- return load_image(fname, tex);
- }
+bool LoadImage(const char * fname, TGAImageRec & tex)
+{
+ if ( tex.data == NULL )
+ return false;
+ else
+ return load_image(fname, tex);
+}
- void ScreenShot(const char * fname)
- {
- save_image(fname);
- }
+void ScreenShot(const char * fname)
+{
+
+}
}
-static bool save_image(const char *file_name)
+bool save_image(const char *file_name)
{
const char *ptr = strrchr((char *)file_name, '.');
if (ptr)