diff --git a/src/game.cpp b/src/game.cpp
index 7bb91f4..6dca657 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -211,7 +211,7 @@ void game_doStars()
r.w = 1;
r.h = 1;
- gfx_addBuffer(r.x, r.y, r.w, r.h);
+ screen_addBuffer(r.x, r.y, r.w, r.h);
}
if (SDL_MUSTLOCK(screen))
@@ -1636,8 +1636,8 @@ static void game_doHud()
signed char fontColor;
char text[25];
- gfx_addBuffer(0, 20, 800, 25);
- gfx_addBuffer(0, 550, 800, 34);
+ screen_addBuffer(0, 20, 800, 25);
+ screen_addBuffer(0, 550, 800, 34);
if (engine.minutes > -1)
{
@@ -2111,7 +2111,7 @@ int game_mainLoop()
}
drawBackGround();
- flushBuffer();
+ screen_flushBuffer();
// Default to no aliens dead...
engine.allAliensDead = 0;
@@ -2211,7 +2211,7 @@ int game_mainLoop()
getPlayerInput();
}
- unBuffer();
+ screen_unBuffer();
game_doStars();
game_doCollectables();
game_doBullets();
@@ -2286,7 +2286,7 @@ int game_mainLoop()
delayFrame();
}
- flushBuffer();
+ screen_flushBuffer();
if ((player.shield > 0) && (!missionFailed()))
{
diff --git a/src/gfx.cpp b/src/gfx.cpp
index ea0bbfe..2606ae2 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -29,16 +29,16 @@ SDL_Surface *shape[MAX_SHAPES];
SDL_Surface *shipShape[MAX_SHIPSHAPES];
SDL_Surface *fontShape[MAX_FONTSHAPES];
SDL_Surface *shopSurface[MAX_SHOPSHAPES];
-bRect *bufferHead;
-bRect *bufferTail;
+bRect *screen_bufferHead;
+bRect *screen_bufferTail;
textObject gfx_text[MAX_TEXTSHAPES];
SDL_Surface *messageBox;
void gfx_init()
{
- bufferHead = new bRect;
- bufferHead->next = NULL;
- bufferTail = bufferHead;
+ screen_bufferHead = new bRect;
+ screen_bufferHead->next = NULL;
+ screen_bufferTail = screen_bufferHead;
for (int i = 0 ; i < MAX_SHAPES ; i++)
shape[i] = NULL;
@@ -69,20 +69,6 @@ SDL_Surface *gfx_setTransparent(SDL_Surface *sprite)
return sprite;
}
-void gfx_addBuffer(int x, int y, int w, int h)
-{
- bRect *rect = new bRect;
-
- rect->next = NULL;
- rect->x = x;
- rect->y = y;
- rect->w = w;
- rect->h = h;
-
- bufferTail->next = rect;
- bufferTail = rect;
-}
-
void gfx_blit(SDL_Surface *image, int x, int y, SDL_Surface *dest)
{
// Exit early if image is not on dest at all
@@ -106,56 +92,7 @@ void gfx_blit(SDL_Surface *image, int x, int y, SDL_Surface *dest)
// Only if it is to the screen, mark the region as damaged
if (dest == screen)
- gfx_addBuffer(blitRect.x, blitRect.y, blitRect.w, blitRect.h);
-}
-
-void flushBuffer()
-{
- bRect *prevRect = bufferHead;
- bRect *rect = bufferHead;
- bufferTail = bufferHead;
-
- while (rect->next != NULL)
- {
- rect = rect->next;
-
- prevRect->next = rect->next;
- delete rect;
- rect = prevRect;
- }
-
- bufferHead->next = NULL;
-}
-
-void unBuffer()
-{
- bRect *prevRect = bufferHead;
- bRect *rect = bufferHead;
- bufferTail = bufferHead;
-
- while (rect->next != NULL)
- {
- rect = rect->next;
-
- SDL_Rect blitRect;
-
- blitRect.x = rect->x;
- blitRect.y = rect->y;
- blitRect.w = rect->w;
- blitRect.h = rect->h;
-
- if (SDL_BlitSurface(background, &blitRect, screen, &blitRect) < 0)
- {
- printf("BlitSurface error: %s\n", SDL_GetError());
- showErrorAndExit(2, "");
- }
-
- prevRect->next = rect->next;
- delete rect;
- rect = prevRect;
- }
-
- bufferHead->next = NULL;
+ screen_addBuffer(blitRect.x, blitRect.y, blitRect.w, blitRect.h);
}
/*
diff --git a/src/gfx.h b/src/gfx.h
index de60fb6..2507095 100644
--- a/src/gfx.h
+++ b/src/gfx.h
@@ -27,18 +27,13 @@ extern SDL_Surface *shape[MAX_SHAPES];
extern SDL_Surface *shipShape[MAX_SHIPSHAPES];
extern SDL_Surface *fontShape[MAX_FONTSHAPES];
extern SDL_Surface *shopSurface[MAX_SHOPSHAPES];
-extern bRect *bufferHead;
-extern bRect *bufferTail;
extern textObject gfx_text[MAX_TEXTSHAPES];
extern SDL_Surface *messageBox;
void gfx_init();
SDL_Surface *gfx_setTransparent(SDL_Surface *sprite);
-void gfx_addBuffer(int x, int y, int w, int h);
void gfx_blit(SDL_Surface *image, int x, int y, SDL_Surface *dest);
-extern void flushBuffer();
-extern void unBuffer();
extern int drawString(const char *in, int x, int y, int fontColor, signed char wrap, SDL_Surface *dest);
extern int drawString(const char *in, int x, int y, int fontColor, SDL_Surface *dest);
extern int drawString(const char *in, int x, int y, int fontColor);
diff --git a/src/init.cpp b/src/init.cpp
index c1d148e..bb8e089 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -228,7 +228,7 @@ void cleanUp()
delete(engine.bulletHead);
delete(engine.explosionHead);
delete(engine.collectableHead);
- delete(bufferHead);
+ delete(screen_bufferHead);
for (int i = 0 ; i < MAX_FONTSHAPES ; i++)
{
diff --git a/src/intermission.cpp b/src/intermission.cpp
index c7e195c..2cc503b 100644
--- a/src/intermission.cpp
+++ b/src/intermission.cpp
@@ -719,7 +719,7 @@ int intermission()
}
else
{
- unBuffer();
+ screen_unBuffer();
}
game_doStars();
@@ -897,7 +897,7 @@ int intermission()
break;
}
- gfx_addBuffer(300, 545, 200, 15);
+ screen_addBuffer(300, 545, 200, 15);
if (section != 8)
{
diff --git a/src/misc.cpp b/src/misc.cpp
index b54849a..a8563dd 100644
--- a/src/misc.cpp
+++ b/src/misc.cpp
@@ -138,7 +138,7 @@ void resetLists()
engine.collectableHead->next = NULL;
engine.collectableTail = engine.collectableHead;
- r1 = bufferHead->next;
+ r1 = screen_bufferHead->next;
while (r1 != NULL)
{
r2 = r1;
@@ -146,8 +146,8 @@ void resetLists()
delete r2;
}
- bufferHead->next = NULL;
- bufferTail = bufferHead;
+ screen_bufferHead->next = NULL;
+ screen_bufferTail = screen_bufferHead;
ob = engine.debrisHead->next;
while(ob != NULL)
diff --git a/src/screen.cpp b/src/screen.cpp
index 4ce924e..e1e6320 100644
--- a/src/screen.cpp
+++ b/src/screen.cpp
@@ -17,9 +17,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
+#include
+
#include "SDL.h"
#include "gfx.h"
+#include "init.h"
+#include "structs.h"
SDL_Surface *screen;
@@ -32,3 +36,66 @@ void screen_blitText(int i)
{
screen_blit(gfx_text[i].image, (int)gfx_text[i].x, (int)gfx_text[i].y);
}
+
+void screen_addBuffer(int x, int y, int w, int h)
+{
+ bRect *rect = new bRect;
+
+ rect->next = NULL;
+ rect->x = x;
+ rect->y = y;
+ rect->w = w;
+ rect->h = h;
+
+ screen_bufferTail->next = rect;
+ screen_bufferTail = rect;
+}
+
+void screen_flushBuffer()
+{
+ bRect *prevRect = screen_bufferHead;
+ bRect *rect = screen_bufferHead;
+ screen_bufferTail = screen_bufferHead;
+
+ while (rect->next != NULL)
+ {
+ rect = rect->next;
+
+ prevRect->next = rect->next;
+ delete rect;
+ rect = prevRect;
+ }
+
+ screen_bufferHead->next = NULL;
+}
+
+void screen_unBuffer()
+{
+ bRect *prevRect = screen_bufferHead;
+ bRect *rect = screen_bufferHead;
+ screen_bufferTail = screen_bufferHead;
+
+ while (rect->next != NULL)
+ {
+ rect = rect->next;
+
+ SDL_Rect blitRect;
+
+ blitRect.x = rect->x;
+ blitRect.y = rect->y;
+ blitRect.w = rect->w;
+ blitRect.h = rect->h;
+
+ if (SDL_BlitSurface(background, &blitRect, screen, &blitRect) < 0)
+ {
+ printf("BlitSurface error: %s\n", SDL_GetError());
+ showErrorAndExit(2, "");
+ }
+
+ prevRect->next = rect->next;
+ delete rect;
+ rect = prevRect;
+ }
+
+ screen_bufferHead->next = NULL;
+}
diff --git a/src/screen.h b/src/screen.h
index 24e5841..7dc04ad 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -20,9 +20,16 @@ along with this program. If not, see .
#ifndef SCREEN_H
#define SCREEN_H
+#include "structs.h"
+
extern SDL_Surface *screen;
+extern bRect *screen_bufferHead;
+extern bRect *screen_bufferTail;
void screen_blit(SDL_Surface *image, int x, int y);
void screen_blitText(int i);
+void screen_addBuffer(int x, int y, int w, int h);
+void screen_flushBuffer();
+void screen_unBuffer();
#endif
diff --git a/src/script.cpp b/src/script.cpp
index e81c8ab..4edb428 100644
--- a/src/script.cpp
+++ b/src/script.cpp
@@ -198,7 +198,7 @@ void doCutscene(int scene)
engine.smx = 0;
engine.smy = 0;
- flushBuffer();
+ screen_flushBuffer();
freeGraphics();
resetLists();
loadGameGraphics();
@@ -241,7 +241,7 @@ void doCutscene(int scene)
while (true)
{
renderer_update();
- unBuffer();
+ screen_unBuffer();
getPlayerInput();
game_doStars();
game_doExplosions();
@@ -310,7 +310,7 @@ void doCutscene(int scene)
break;
}
- flushBuffer();
+ screen_flushBuffer();
freeGraphics();
clearScreen(black);
renderer_update();
diff --git a/src/ship.cpp b/src/ship.cpp
index 014b699..05c42f7 100644
--- a/src/ship.cpp
+++ b/src/ship.cpp
@@ -157,7 +157,7 @@ void ship_fireRay(object *ship)
int red = SDL_MapRGB(screen->format, rand() % 256, 0x00, 0x00);
SDL_FillRect(screen, &ray, red);
- gfx_addBuffer(ray.x, ray.y, ray.w, ray.h);
+ screen_addBuffer(ray.x, ray.y, ray.w, ray.h);
if (ship != &player)
{
diff --git a/src/title.cpp b/src/title.cpp
index ca33787..2e3a293 100644
--- a/src/title.cpp
+++ b/src/title.cpp
@@ -180,7 +180,7 @@ int doTitle()
engine.gameSection = SECTION_TITLE;
- flushBuffer();
+ screen_flushBuffer();
freeGraphics();
resetLists();
@@ -277,7 +277,7 @@ int doTitle()
while (!engine.done)
{
renderer_update();
- unBuffer();
+ screen_unBuffer();
now = SDL_GetTicks();
@@ -315,7 +315,7 @@ int doTitle()
if ((now - then >= 27500) || (skip))
{
- gfx_addBuffer(0, 0, screen->w, screen->h);
+ screen_addBuffer(0, 0, screen->w, screen->h);
blevelRect(optionRec.x, optionRec.y, optionRec.w, optionRec.h, redGlow, 0x00, 0x00);
@@ -371,7 +371,7 @@ int doTitle()
drawString("Copyright Parallel Realities 2003", 5, 560, FONT_WHITE, background);
drawString("Copyright Guus Sliepen, Astrid S. de Wijn and others 2012", 5, 580, FONT_WHITE, background);
drawString(buildVersion, 794 - strlen(buildVersion) * 9, 580, FONT_WHITE, background);
- gfx_addBuffer(0, 560, 800, 40);
+ screen_addBuffer(0, 560, 800, 40);
skip = true;
}
}
@@ -393,7 +393,7 @@ int doTitle()
drawString("Copyright Parallel Realities 2003", 5, 560, FONT_WHITE, background);
drawString("Copyright Guus Sliepen, Astrid S. de Wijn and others 2012", 5, 580, FONT_WHITE, background);
drawString(buildVersion, 794 - strlen(buildVersion) * 9, 580, FONT_WHITE, background);
- gfx_addBuffer(0, 560, 800, 40);
+ screen_addBuffer(0, 560, 800, 40);
skip = true;
}
else
@@ -587,7 +587,7 @@ void showStory()
loadBackground("gfx/startUp.jpg");
drawBackGround();
- flushBuffer();
+ screen_flushBuffer();
flushInput();
engine.keyState[KEY_FIRE] = engine.keyState[KEY_ALTFIRE] = 0;
@@ -595,7 +595,7 @@ void showStory()
while (true)
{
renderer_update();
- unBuffer();
+ screen_unBuffer();
getPlayerInput();
@@ -625,7 +625,7 @@ The game over screen :(
*/
void gameover()
{
- flushBuffer();
+ screen_flushBuffer();
freeGraphics();
SDL_FillRect(background, NULL, black);
@@ -658,7 +658,7 @@ void gameover()
renderer_update();
- unBuffer();
+ screen_unBuffer();
x = ((screen->w - gameover->w) / 2) - RANDRANGE(-2, 2);
y = ((screen->h - gameover->h) / 2) - RANDRANGE(-2, 2);
screen_blit(gameover, x, y);
@@ -668,13 +668,13 @@ void gameover()
SDL_FreeSurface(gameover);
audio_haltMusic();
- flushBuffer();
+ screen_flushBuffer();
}
void doCredits()
{
loadBackground("gfx/credits.jpg");
- flushBuffer();
+ screen_flushBuffer();
freeGraphics();
FILE *fp;
@@ -722,7 +722,7 @@ void doCredits()
while (true)
{
renderer_update();
- unBuffer();
+ screen_unBuffer();
getPlayerInput();
if (engine.keyState[KEY_ESCAPE] || engine.keyState[KEY_FIRE] ||