diff --git a/src/nebulae.c b/src/nebulae.c index be48db9..ce9d0a2 100644 --- a/src/nebulae.c +++ b/src/nebulae.c @@ -212,9 +212,11 @@ void nebu_render(const double dt) { glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA); /* Compensate possible rubmle. */ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glTranslated(shake_pos.x, shake_pos.y, 0.); + if(!paused) { + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glTranslated(shake_pos.x, shake_pos.y, 0.); + } /* Now render. */ glBegin(GL_QUADS); @@ -235,7 +237,8 @@ void nebu_render(const double dt) { glVertex2d(-SCREEN_W/2., SCREEN_H/2.); glEnd(); - glPopMatrix(); /* GL_PROJECTION */ + if(!paused) + glPopMatrix(); /* GL_PROJECTION */ /* Set values to defaults. */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -262,7 +265,9 @@ void nebu_renderOverlay(const double dt) { /* Prepare the matrix. */ glMatrixMode(GL_PROJECTION); glPushMatrix(); - glTranslated(gui_xoff+shake_pos.x, gui_yoff+shake_pos.y, 0.); + glTranslated(gui_xoff, gui_yoff, 0.); + if(!paused) + glTranslated(gui_xoff+shake_pos.x, gui_yoff+shake_pos.y, 0.); /* Mask for area player can still see (partially). */ glShadeModel(GL_SMOOTH); diff --git a/src/opengl.c b/src/opengl.c index 165d43b..f7bfda3 100644 --- a/src/opengl.c +++ b/src/opengl.c @@ -936,6 +936,17 @@ int gl_init(void) { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* Good blend model. */ /* Set up the matrix. */ + gl_defViewport(); + + /* Finishing touches. */ + glClear(GL_COLOR_BUFFER_BIT); /* Must clear the buffer first. */ + gl_checkErr(); + + return 0; +} + +/* Reset viewport to default. */ +void gl_defViewport(void) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-SCREEN_W /2, /* Left edge. */ @@ -944,13 +955,6 @@ int gl_init(void) { SCREEN_H /2, /* Top edge. */ -1., /* Near. */ 1.); /* Far. */ - - - /* Finishing touches. */ - glClear(GL_COLOR_BUFFER_BIT); /* Must clear the buffer first. */ - gl_checkErr(); - - return 0; } /* Clean up our mess. */ diff --git a/src/opengl.h b/src/opengl.h index 895c852..469e86b 100644 --- a/src/opengl.h +++ b/src/opengl.h @@ -104,6 +104,7 @@ int gl_init(void); void gl_exit(void); /* Misc. */ +void gl_defViewport(void); int gl_pot(int n); int gl_isTrans(const glTexture* t, const int x, const int y); void gl_getSpriteFromDir(int* x, int* y, const glTexture* t, const double dir); diff --git a/src/spfx.c b/src/spfx.c index e13d07f..5dcb05f 100644 --- a/src/spfx.c +++ b/src/spfx.c @@ -58,9 +58,11 @@ static int spfx_base_load(char* name, int anim, char* gfx, int sx, int sy) { SPFX_Base* cur; char buf[PATH_MAX]; + /* Create new effect. */ spfx_effects = realloc(spfx_effects, ++spfx_neffects*sizeof(SPFX_Base)); cur = &spfx_effects[spfx_neffects-1]; + /* Fill it with the data. */ cur->name = strdup(name); cur->anim = (double)anim / 1000.; sprintf(buf, SPFX_GFX"%s", gfx); @@ -83,8 +85,11 @@ int spfx_get(char* name) { return 0; } -/* Load/Unload. */ +/* Load/Unload. + * TODO: make it customizable? + */ int spfx_load(void) { + /* Standard explosion effects. */ spfx_base_load("ExpS", 400, "exps.png", 6, 5); spfx_base_load("ExpM", 450, "expm.png", 6, 5); spfx_base_load("ExpL", 500, "expl.png", 6, 5); @@ -207,6 +212,7 @@ void spfx_start(double dt) { vect_pset(&shake_vel, shake_rad, -VANGLE(shake_pos) + (RNGF()-0.5) * M_PI); } + /* The shake decays over time. */ shake_rad -= SHAKE_DECAY * dt; if(shake_rad < 0.) shake_rad = 0.; diff --git a/src/toolkit.c b/src/toolkit.c index 6a600ed..dd44a1d 100644 --- a/src/toolkit.c +++ b/src/toolkit.c @@ -498,6 +498,7 @@ unsigned int window_create(char* name, const int x, const int y, SDL_ShowCursor(SDL_ENABLE); toolkit = 1; /* Enable it. */ pause_game(); + gl_defViewport(); /* Reset the default viewport. */ } return wid;