Added a new screen_blitText function.

The old one still remains while I adapt the code to the new one.
This is simply a decoupling of the absolute position of text from
the creation of the text, to better facilitate position adaptation
to changes in screen size. Position indicated at creation remains
only for relative position (for use by e.g. credits and status lines).
This commit is contained in:
Julie Marchant 2019-05-30 18:09:15 -04:00
parent 3c866fe150
commit 0ac42df374
5 changed files with 74 additions and 64 deletions

View File

@ -1826,24 +1826,24 @@ static void game_doHud()
fontColor = FONT_YELLOW; fontColor = FONT_YELLOW;
else else
fontColor = FONT_WHITE; fontColor = FONT_WHITE;
screen_blitText(TS_TIME_T); screen_blitTextInPlace(TS_TIME_T);
sprintf(text, "%.2d:%.2d", engine.minutes, engine.seconds); sprintf(text, "%.2d:%.2d", engine.minutes, engine.seconds);
gfx_createTextObject(TS_TIME, text, screen->w / 2 + 10, 21, fontColor); gfx_createTextObject(TS_TIME, text, screen->w / 2 + 10, 21, fontColor);
screen_blitText(TS_TIME); screen_blitTextInPlace(TS_TIME);
} }
if (game.area != MISN_INTERCEPTION) if (game.area != MISN_INTERCEPTION)
{ {
screen_blitText(TS_OBJECTIVES_T); screen_blitTextInPlace(TS_OBJECTIVES_T);
sprintf(text, "%d", (mission.remainingObjectives1 + mission.remainingObjectives2)); sprintf(text, "%d", (mission.remainingObjectives1 + mission.remainingObjectives2));
gfx_createTextObject(TS_OBJECTIVES, text, screen->w - 55, 21, FONT_WHITE); gfx_createTextObject(TS_OBJECTIVES, text, screen->w - 55, 21, FONT_WHITE);
screen_blitText(TS_OBJECTIVES); screen_blitTextInPlace(TS_OBJECTIVES);
} }
screen_blitText(TS_CASH_T); // cash screen_blitTextInPlace(TS_CASH_T); // cash
sprintf(text, "%.6d", game.cash); sprintf(text, "%.6d", game.cash);
gfx_createTextObject(TS_CASH, text, 90, 21, FONT_WHITE); gfx_createTextObject(TS_CASH, text, 90, 21, FONT_WHITE);
screen_blitText(TS_CASH); screen_blitTextInPlace(TS_CASH);
if (game.difficulty == DIFFICULTY_ORIGINAL) if (game.difficulty == DIFFICULTY_ORIGINAL)
{ {
@ -1877,12 +1877,12 @@ static void game_doHud()
if (player.ammo[0] <= 25) fontColor = FONT_YELLOW; if (player.ammo[0] <= 25) fontColor = FONT_YELLOW;
if (player.ammo[0] <= 10) fontColor = FONT_RED; if (player.ammo[0] <= 10) fontColor = FONT_RED;
} }
screen_blitText(TS_PLASMA_T); screen_blitTextInPlace(TS_PLASMA_T);
sprintf(text, "%.3d", player.ammo[0]); sprintf(text, "%.3d", player.ammo[0]);
gfx_createTextObject(TS_PLASMA, text, screen->w * 5 / 16 + 70, screen->h - 49, fontColor); gfx_createTextObject(TS_PLASMA, text, screen->w * 5 / 16 + 70, screen->h - 49, fontColor);
screen_blitText(TS_PLASMA); screen_blitTextInPlace(TS_PLASMA);
screen_blitText(TS_AMMO_T); screen_blitTextInPlace(TS_AMMO_T);
if ((player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_LASER)) if ((player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_LASER))
{ {
@ -1892,7 +1892,7 @@ static void game_doHud()
fontColor = FONT_WHITE; fontColor = FONT_WHITE;
sprintf(text, "%.2d", player.ammo[1]); // rocket ammo sprintf(text, "%.2d", player.ammo[1]); // rocket ammo
gfx_createTextObject(TS_AMMO, text, screen->w / 2 + 80, screen->h - 49, fontColor); gfx_createTextObject(TS_AMMO, text, screen->w / 2 + 80, screen->h - 49, fontColor);
screen_blitText(TS_AMMO); screen_blitTextInPlace(TS_AMMO);
} }
if (((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER)) && (player.ammo[1] > 0)) if (((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER)) && (player.ammo[1] > 0))
@ -1973,7 +1973,7 @@ static void game_doHud()
if (gfx_textSprites[i].life > 0) if (gfx_textSprites[i].life > 0)
{ {
gfx_textSprites[i].y = screen->h - 75 - (i * 20); gfx_textSprites[i].y = screen->h - 75 - (i * 20);
screen_blitText(i); screen_blitTextInPlace(i);
gfx_textSprites[i].life--; gfx_textSprites[i].life--;
if (gfx_textSprites[i].life == 0) if (gfx_textSprites[i].life == 0)
@ -2002,18 +2002,18 @@ static void game_doHud()
{ {
if (game.difficulty == DIFFICULTY_ORIGINAL) if (game.difficulty == DIFFICULTY_ORIGINAL)
{ {
screen_blitText(TS_TARGET); screen_blitTextInPlace(TS_TARGET);
} }
else else
{ {
if (engine.targetIndex == ALIEN_SID) if (engine.targetIndex == ALIEN_SID)
screen_blitText(TS_TARGET_SID); screen_blitTextInPlace(TS_TARGET_SID);
else if (engine.targetIndex == ALIEN_PHOEBE) else if (engine.targetIndex == ALIEN_PHOEBE)
screen_blitText(TS_TARGET_PHOEBE); screen_blitTextInPlace(TS_TARGET_PHOEBE);
else if (engine.targetIndex == ALIEN_KLINE) else if (engine.targetIndex == ALIEN_KLINE)
screen_blitText(TS_TARGET_KLINE); screen_blitTextInPlace(TS_TARGET_KLINE);
else else
screen_blitText(TS_TARGET); screen_blitTextInPlace(TS_TARGET);
} }
bar.w = MAX(screen->w / 800, 1); bar.w = MAX(screen->w / 800, 1);
@ -2036,7 +2036,7 @@ static void game_doHud()
} }
} }
screen_blitText(TS_POWER); screen_blitTextInPlace(TS_POWER);
bar.w = screen->w / 32; bar.w = screen->w / 32;
bar.h = 12; bar.h = 12;
@ -2055,7 +2055,7 @@ static void game_doHud()
bar.x += screen->w * 3 / 80; bar.x += screen->w * 3 / 80;
} }
screen_blitText(TS_OUTPUT); screen_blitTextInPlace(TS_OUTPUT);
bar.w = screen->w / 32; bar.w = screen->w / 32;
bar.h = 12; bar.h = 12;
@ -2076,7 +2076,7 @@ static void game_doHud()
bar.x += screen->w * 3 / 80; bar.x += screen->w * 3 / 80;
} }
screen_blitText(TS_COOLER); screen_blitTextInPlace(TS_COOLER);
bar.w = screen->w / 32; bar.w = screen->w / 32;
bar.h = 12; bar.h = 12;
@ -2096,7 +2096,7 @@ static void game_doHud()
bar.x += screen->w * 3 / 80; bar.x += screen->w * 3 / 80;
} }
screen_blitText(TS_SHIELD); screen_blitTextInPlace(TS_SHIELD);
if (player.shield < 1) if (player.shield < 1)
return; return;
@ -2540,7 +2540,7 @@ int game_mainLoop()
if (engine.paused) if (engine.paused)
{ {
gfx_createTextObject(TS_PAUSED, "PAUSED", -1, screen->h / 2, FONT_WHITE); gfx_createTextObject(TS_PAUSED, "PAUSED", -1, screen->h / 2, FONT_WHITE);
screen_blitText(TS_PAUSED); screen_blitTextInPlace(TS_PAUSED);
renderer_update(); renderer_update();
audio_pauseMusic(); audio_pauseMusic();

View File

@ -699,7 +699,7 @@ static void intermission_showStatus(SDL_Surface *infoSurface)
{ {
gfx_textSprites[i].y -= speed; gfx_textSprites[i].y -= speed;
if ((gfx_textSprites[i].y > 80) && (gfx_textSprites[i].y < 70 + infoSurface->h)) if ((gfx_textSprites[i].y > 80) && (gfx_textSprites[i].y < 70 + infoSurface->h))
screen_blitText(i); screen_blitTextInPlace(i);
} }
if (gfx_textSprites[TS_STATUS_FOOTER - 1].y < 65) if (gfx_textSprites[TS_STATUS_FOOTER - 1].y < 65)
@ -720,8 +720,8 @@ static void intermission_showStatus(SDL_Surface *infoSurface)
screen_drawRect(x, infoSurface->h + 70, infoSurface->w, 20, 0x00, 0x00, 0x99); screen_drawRect(x, infoSurface->h + 70, infoSurface->w, 20, 0x00, 0x00, 0x99);
screen_blitText(TS_STATUS_HEADER); screen_blitTextInPlace(TS_STATUS_HEADER);
screen_blitText(TS_STATUS_FOOTER); screen_blitTextInPlace(TS_STATUS_FOOTER);
} }
static void intermission_createCommsSurface(SDL_Surface *comms) static void intermission_createCommsSurface(SDL_Surface *comms)
@ -1449,7 +1449,7 @@ int intermission()
engine.ssy /= 100; engine.ssy /= 100;
} }
screen_blitText(TS_CURRENT_SYSTEM); screen_blitTextInPlace(TS_CURRENT_SYSTEM);
switch(section) switch(section)
{ {
@ -1504,9 +1504,9 @@ int intermission()
gfx_createTextObject(TS_DEST_PLANET, string, screen->w - 250, screen->h - 120, FONT_WHITE); gfx_createTextObject(TS_DEST_PLANET, string, screen->w - 250, screen->h - 120, FONT_WHITE);
} }
screen_blitText(TS_CURRENT_PLANET); screen_blitTextInPlace(TS_CURRENT_PLANET);
if (game.stationedPlanet != game.destinationPlanet) if (game.stationedPlanet != game.destinationPlanet)
screen_blitText(TS_DEST_PLANET); screen_blitTextInPlace(TS_DEST_PLANET);
break; break;
case 2: case 2:
@ -1547,9 +1547,9 @@ int intermission()
intermission_showSystem(orbit_pos, 0); intermission_showSystem(orbit_pos, 0);
screen_blit(intermission_planets[game.stationedPlanet].image, 150, screen->h - 90); screen_blit(intermission_planets[game.stationedPlanet].image, 150, screen->h - 90);
screen_blitText(TS_CURRENT_PLANET); screen_blitTextInPlace(TS_CURRENT_PLANET);
screen_blit(intermission_planets[game.destinationPlanet].image, screen->w - 150, screen->h - 90); screen_blit(intermission_planets[game.destinationPlanet].image, screen->w - 150, screen->h - 90);
screen_blitText(TS_DEST_PLANET); screen_blitTextInPlace(TS_DEST_PLANET);
game.distanceCovered += distance * (screen->w - 350) / 450.; game.distanceCovered += distance * (screen->w - 350) / 450.;
destRect.w = (int)game.distanceCovered; destRect.w = (int)game.distanceCovered;
@ -1606,9 +1606,9 @@ int intermission()
(!intermission_planets[game.stationedPlanet].missionCompleted))) (!intermission_planets[game.stationedPlanet].missionCompleted)))
{ {
if (game.stationedPlanet == game.destinationPlanet) if (game.stationedPlanet == game.destinationPlanet)
screen_blitText(TS_INFO_START_MISSION); screen_blitTextInPlace(TS_INFO_START_MISSION);
else else
screen_blitText(TS_INFO_GOTO); screen_blitTextInPlace(TS_INFO_GOTO);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1619,7 +1619,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + w / 7, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + w / 7, y, 32, 32))
{ {
screen_blitText(TS_INFO_MAP); screen_blitTextInPlace(TS_INFO_MAP);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1630,7 +1630,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 2 * w / 7, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 2 * w / 7, y, 32, 32))
{ {
screen_blitText(TS_INFO_STATUS); screen_blitTextInPlace(TS_INFO_STATUS);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1641,7 +1641,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 3 * w / 7, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 3 * w / 7, y, 32, 32))
{ {
screen_blitText(TS_INFO_SAVE_GAME); screen_blitTextInPlace(TS_INFO_SAVE_GAME);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1652,7 +1652,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 4 * w / 7, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 4 * w / 7, y, 32, 32))
{ {
screen_blitText(TS_INFO_SHOP); screen_blitTextInPlace(TS_INFO_SHOP);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1663,7 +1663,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 5 * w / 7, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 5 * w / 7, y, 32, 32))
{ {
screen_blitText(TS_INFO_COMMS); screen_blitTextInPlace(TS_INFO_COMMS);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1675,7 +1675,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 6 * w / 7, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + 6 * w / 7, y, 32, 32))
{ {
screen_blitText(TS_INFO_OPTIONS); screen_blitTextInPlace(TS_INFO_OPTIONS);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {
@ -1686,7 +1686,7 @@ int intermission()
} }
else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + w, y, 32, 32)) else if (game_collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, x + w, y, 32, 32))
{ {
screen_blitText(TS_INFO_EXIT); screen_blitTextInPlace(TS_INFO_EXIT);
if ((engine.keyState[KEY_FIRE])) if ((engine.keyState[KEY_FIRE]))
{ {

View File

@ -36,7 +36,17 @@ void screen_blit(SDL_Surface *image, int x, int y)
gfx_blit(image, x, y, screen); gfx_blit(image, x, y, screen);
} }
void screen_blitText(int i) void screen_blitText(int i, int x, int y)
{
if (x == -1)
x = (screen->w - gfx_textSprites[i].image->w) / 2;
screen_blit(gfx_textSprites[i].image,
(x + (int)gfx_textSprites[i].x), (y +(int)gfx_textSprites[i].y));
}
// Legacy function; will be removed later
void screen_blitTextInPlace(int i)
{ {
screen_blit(gfx_textSprites[i].image, (int)gfx_textSprites[i].x, (int)gfx_textSprites[i].y); screen_blit(gfx_textSprites[i].image, (int)gfx_textSprites[i].x, (int)gfx_textSprites[i].y);
} }

View File

@ -30,7 +30,7 @@ extern LinkedRect *screen_bufferHead;
extern LinkedRect *screen_bufferTail; extern LinkedRect *screen_bufferTail;
void screen_blit(SDL_Surface *image, int x, int y); void screen_blit(SDL_Surface *image, int x, int y);
void screen_blitText(int i); void screen_blitTextInPlace(int i);
int screen_renderString(const char *in, int x, int y, int fontColor); int screen_renderString(const char *in, int x, int y, int fontColor);
void screen_drawBackground(); void screen_drawBackground();
void screen_addBuffer(int x, int y, int w, int h); void screen_addBuffer(int x, int y, int w, int h);

View File

@ -41,24 +41,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static int showGameMenu(int continueSaveSlot) static int showGameMenu(int continueSaveSlot)
{ {
screen_blitText(TS_START_NEW_GAME); screen_blitTextInPlace(TS_START_NEW_GAME);
screen_blitText(TS_LOAD_GAME); screen_blitTextInPlace(TS_LOAD_GAME);
if (continueSaveSlot != -1) if (continueSaveSlot != -1)
{ {
screen_blitText(TS_CONTINUE_CURRENT_GAME); screen_blitTextInPlace(TS_CONTINUE_CURRENT_GAME);
} }
screen_blitText(TS_OPTIONS); screen_blitTextInPlace(TS_OPTIONS);
screen_blitText(TS_CREDITS); screen_blitTextInPlace(TS_CREDITS);
if (engine.cheat) if (engine.cheat)
{ {
gfx_textSprites[TS_QUIT].y = screen->h / 3 + 170; gfx_textSprites[TS_QUIT].y = screen->h / 3 + 170;
screen_blitText(TS_CHEAT_OPTIONS); screen_blitTextInPlace(TS_CHEAT_OPTIONS);
} }
else else
{ {
gfx_textSprites[TS_QUIT].y = screen->h / 3 + 150; gfx_textSprites[TS_QUIT].y = screen->h / 3 + 150;
} }
screen_blitText(TS_QUIT); screen_blitTextInPlace(TS_QUIT);
if (engine.cheat) if (engine.cheat)
return 7; return 7;
@ -75,11 +75,11 @@ static int showLoadMenu()
rtn++; rtn++;
if (gfx_textSprites[i].image != NULL) if (gfx_textSprites[i].image != NULL)
{ {
screen_blitText(i); screen_blitTextInPlace(i);
gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = gfx_textSprites[i].y + 40; gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = gfx_textSprites[i].y + 40;
} }
} }
screen_blitText(TS_BACK_TO_MAIN_MENU); screen_blitTextInPlace(TS_BACK_TO_MAIN_MENU);
return rtn; return rtn;
} }
@ -110,9 +110,9 @@ static int showDifficultyMenu()
{ {
gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = screen->h / 3 + 110; gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = screen->h / 3 + 110;
screen_blitText(TS_START_GAME); screen_blitTextInPlace(TS_START_GAME);
screen_blitText(TS_DIFFICULTY); screen_blitTextInPlace(TS_DIFFICULTY);
screen_blitText(TS_BACK_TO_MAIN_MENU); screen_blitTextInPlace(TS_BACK_TO_MAIN_MENU);
return 3; return 3;
} }
@ -152,11 +152,11 @@ static int showOptionsMenu()
{ {
gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = screen->h / 3 + 150; gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = screen->h / 3 + 150;
screen_blitText(TS_SOUND); screen_blitTextInPlace(TS_SOUND);
screen_blitText(TS_MUSIC); screen_blitTextInPlace(TS_MUSIC);
screen_blitText(TS_FULLSCREEN); screen_blitTextInPlace(TS_FULLSCREEN);
screen_blitText(TS_AUTOPAUSE); screen_blitTextInPlace(TS_AUTOPAUSE);
screen_blitText(TS_BACK_TO_MAIN_MENU); screen_blitTextInPlace(TS_BACK_TO_MAIN_MENU);
return 5; return 5;
} }
@ -196,11 +196,11 @@ static int showCheatMenu()
{ {
gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = screen->h / 3 + 150; gfx_textSprites[TS_BACK_TO_MAIN_MENU].y = screen->h / 3 + 150;
screen_blitText(TS_UNLIMITED_SHIELD); screen_blitTextInPlace(TS_UNLIMITED_SHIELD);
screen_blitText(TS_UNLIMITED_AMMO); screen_blitTextInPlace(TS_UNLIMITED_AMMO);
screen_blitText(TS_UNLIMITED_CASH); screen_blitTextInPlace(TS_UNLIMITED_CASH);
screen_blitText(TS_UNLIMITED_TIME); screen_blitTextInPlace(TS_UNLIMITED_TIME);
screen_blitText(TS_BACK_TO_MAIN_MENU); screen_blitTextInPlace(TS_BACK_TO_MAIN_MENU);
return 5; return 5;
} }
@ -360,11 +360,11 @@ int title_show()
} }
else if ((now - then > 9000) && (now - then < 15000) && (!skip)) else if ((now - then > 9000) && (now - then < 15000) && (!skip))
{ {
screen_blitText(TS_PRESENTS); screen_blitTextInPlace(TS_PRESENTS);
} }
else if ((now - then > 16000) && (now - then < 21000) && (!skip)) else if ((now - then > 16000) && (now - then < 21000) && (!skip))
{ {
screen_blitText(TS_AN_SDL_GAME); screen_blitTextInPlace(TS_AN_SDL_GAME);
} }
else if ((now - then > 25500) || (skip)) else if ((now - then > 25500) || (skip))
{ {