diff --git a/src/Starfighter.cpp b/src/Starfighter.cpp index d75e447..ed91b8b 100644 --- a/src/Starfighter.cpp +++ b/src/Starfighter.cpp @@ -122,7 +122,7 @@ int main(int argc, char **argv) break; case 1: - section = galaxyMap(); + section = intermission(); break; case 2: diff --git a/src/defs.h b/src/defs.h index da0c8f3..c66b4aa 100644 --- a/src/defs.h +++ b/src/defs.h @@ -419,9 +419,11 @@ enum { DIFFICULTY_MAX }; -extern const char *systemNames[]; +const char * const systemNames[] = {"Spirit", "Eyananth", "Mordor", "Sol"}; -extern const char *systemBackground[]; +const char * const systemBackground[] = { + "gfx/spirit.jpg", "gfx/eyananth.jpg", "gfx/mordor.jpg", "gfx/sol.jpg" +}; const int rate2reload[6] = {15, 15, 13, 11, 9, 7}; const int screenWidth = 800; diff --git a/src/game.cpp b/src/game.cpp index ab27195..1f0bb7a 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1507,6 +1507,335 @@ void game_doExplosions() } } +/* +Draw an arrow at the edge of the screen for each enemy ship that is not visible. +*/ +static void game_doArrow(int i) +{ + if (i < 0 || !aliens[i].active || aliens[i].shield <= 0 || aliens[i].flags & FL_ISCLOAKED) + return; + + int x = aliens[i].x + aliens[i].image[0]->w / 2; + int y = aliens[i].y + aliens[i].image[0]->h / 2; + + float sx = fabsf((x - (screen->w / 2)) / (screen->w / 2.0)); + float sy = fabsf((y - (screen->h / 2)) / (screen->h / 2.0)); + float sxy = MAX(sx, sy); + + if (sxy < 1) + return; + + x = screen->w / 2 + (x - screen->w / 2) / sxy; + y = screen->h / 2 + (y - screen->h / 2) / sxy; + + int arrow; + + if (sxy == sx) { + arrow = x < screen->w / 2 ? 42 : 38; + x -= x > screen->w / 2 ? shape[arrow]->w : 0; + y -= shape[arrow]->h / 2; + } else { + arrow = y < screen->h / 2 ? 36 : 40; + x -= shape[arrow]->w / 2; + y -= y > screen->h / 2 ? shape[arrow]->h : 0; + } + + blit(shape[arrow], x, y); + + if (i != engine.targetIndex) + return; + + if (textShape[3].life > 0) + return; + + if (sxy == sx) { + x -= x > screen->w / 2 ? 5 + shape[44]->w : -5 - shape[arrow]->w; + y -= (shape[44]->h - shape[arrow]->h) / 2; + } else { + x -= (shape[44]->w - shape[arrow]->w) / 2; + y -= y > screen->h / 2 ? 5 + shape[44]->h : -5 - shape[arrow]->h; + } + + blit(shape[44], x, y); +} + +static void game_doHud() +{ + int shieldColor = 0; + SDL_Rect bar; + signed char fontColor; + char text[25]; + + addBuffer(0, 20, 800, 25); + addBuffer(0, 550, 800, 34); + + if (engine.minutes > -1) + { + if ((engine.minutes == 0) && (engine.seconds <= 29)) + fontColor = FONT_RED; + else if ((engine.minutes == 0) && (engine.seconds > 29)) + fontColor = FONT_YELLOW; + else + fontColor = FONT_WHITE; + blitText(10); // time remaining + sprintf(text, "%.2d:%.2d", engine.minutes, engine.seconds); + textSurface(30, text, 410, 21, fontColor); + blitText(30); + } + + if (game.area != MISN_INTERCEPTION) + { + blitText(9); // mission objectives + sprintf(text, "%d", (currentMission.remainingObjectives1 + currentMission.remainingObjectives2)); + textSurface(39, text, 745, 21, FONT_WHITE); + blitText(39); + } + + blitText(8); // cash + sprintf(text, "%.6d", game.cash); + textSurface(38, text, 90, 21, FONT_WHITE); + blitText(38); + + for (int i = 0; i < ALIEN_MAX; i++) + game_doArrow(i); + + fontColor = FONT_WHITE; + if (player.ammo[0] > 0) + { + if (player.ammo[0] <= 25) fontColor = FONT_YELLOW; + if (player.ammo[0] <= 10) fontColor = FONT_RED; + } + blitText(5); // plasma ammo + sprintf(text, "%.3d", player.ammo[0]); + textSurface(35, text, 320, 551, fontColor); + blitText(35); + + blitText(6); + + if ((player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_LASER)) + { + if (player.ammo[1] == 1) + fontColor = FONT_RED; + else + fontColor = FONT_WHITE; + sprintf(text, "%.3d", player.ammo[1]); // rocket ammo + textSurface(36, text, 465, 551, fontColor); + blitText(36); + } + + if (((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER)) && (player.ammo[1] > 0)) + { + int c = white; + if (player.ammo[1] > 100) + c = red; + + bar.x = 450; + bar.y = 550; + bar.h = 12; + + for (int i = 0 ; i < (player.ammo[1] / 5) ; i++) + { + bar.w = 1; + SDL_FillRect(screen, &bar, c); + bar.x += 2; + } + } + + if ((!allMissionsCompleted()) && (SDL_GetTicks() >= engine.counter2)) + { + engine.timeTaken++; + engine.counter2 = SDL_GetTicks() + 1000; + if (engine.missionCompleteTimer == 0) + checkScriptEvents(); + } + + if ((engine.timeMission) && (!engine.cheatTime) && (player.shield > 0)) + { + if (SDL_GetTicks() >= engine.counter) + { + if ((engine.seconds > 1) && (engine.seconds <= 11) && (engine.minutes == 0)) + { + audio_playSound(SFX_CLOCK, screen->w / 2); + } + + if (engine.seconds > 0) + { + engine.seconds--; + engine.counter = (SDL_GetTicks() + 1000); + } + else if ((engine.seconds == 0) && (engine.minutes > 0)) + { + engine.minutes--; + engine.seconds = 59; + engine.counter = (SDL_GetTicks() + 1000); + for (int i = 0 ; i < 3 ; i++) + { + if (currentMission.timeLimit1[i] > -1) + currentMission.timeLimit1[i]--; + if (currentMission.timeLimit2[i] > -1) + currentMission.timeLimit2[i]--; + } + checkTimer(); + checkScriptEvents(); + } + + if ((engine.seconds == 0) && (engine.minutes == 0)) + { + for (int i = 0 ; i < 3 ; i++) + { + if (currentMission.timeLimit1[i] > -1) + currentMission.timeLimit1[i]--; + if (currentMission.timeLimit2[i] > -1) + currentMission.timeLimit2[i]--; + } + checkTimer(); + checkScriptEvents(); + engine.counter = (SDL_GetTicks() + 1000); + } + } + } + + for (int i = 0 ; i < 3 ; i++) + { + if (textShape[i].life > 0) + { + textShape[i].y = (525 - (i * 20)); + blitText(i); + textShape[i].life--; + + if (textShape[i].life == 0) + { + copyInfoLine(i + 1, i); + copyInfoLine(i + 2, i + 1); + textShape[2].life = 0; + } + } + } + + // Show the radio message if there is one + if (textShape[3].life > 0) + { + blit(messageBox, (800 - messageBox->w) / 2, 50); + textShape[3].life--; + } + + // Do the target's remaining shield (if required) + if (game.area != MISN_DORIM) + { + if ((engine.targetIndex > -1) && (aliens[engine.targetIndex].shield > 0) && (engine.targetIndex > 9)) + { + blitText(7); + bar.w = 1; + bar.h = 12; + bar.x = 620; + bar.y = 550; + + for (float i = 0 ; i < (engine.targetShield * aliens[engine.targetIndex].shield) ; i++) + { + if (i > 50) + shieldColor = green; + else if ((i >= 25) && (i <= 50)) + shieldColor = yellow; + else + shieldColor = red; + SDL_FillRect(screen, &bar, shieldColor); + bar.x += 2; + } + } + } + + blitText(11); + + bar.w = 25; + bar.h = 12; + bar.x = 80; + bar.y = 571; + + for (int i = 1 ; i <= 5 ; i++) + { + if (weapon[W_PLAYER_WEAPON].damage >= i) { + if(i <= game.maxPlasmaDamage || (SDL_GetTicks() % 1000 > (unsigned)i * 100)) + { + SDL_FillRect(screen, &bar, green); + } + } else if (i <= game.maxPlasmaDamage) + SDL_FillRect(screen, &bar, darkGreen); + bar.x += 30; + } + + blitText(12); + + bar.w = 25; + bar.h = 12; + bar.x = 315; + bar.y = 571; + SDL_FillRect(screen, &bar, yellow); + + for (int i = 1 ; i <= 5 ; i++) + { + if (weapon[W_PLAYER_WEAPON].ammo[0] >= i) { + if(i <= game.maxPlasmaOutput || (SDL_GetTicks() % 1000 > (unsigned)i * 100)) + { + SDL_FillRect(screen, &bar, yellow); + } + } + else if (i <= game.maxPlasmaOutput) + SDL_FillRect(screen, &bar, darkYellow); + bar.x += 30; + } + + blitText(13); + + bar.w = 25; + bar.h = 12; + bar.x = 550; + bar.y = 571; + + for (int i = 1 ; i <= 5 ; i++) + { + if (weapon[W_PLAYER_WEAPON].reload[0] <= rate2reload[i]) { + if(i <= game.maxPlasmaRate || (SDL_GetTicks() % 1000 > (unsigned)i * 100)) + { + SDL_FillRect(screen, &bar, blue); + } + } + else if (i <= game.maxPlasmaRate) + SDL_FillRect(screen, &bar, darkerBlue); + bar.x += 30; + } + + blitText(4); + if (player.shield < 1) + return; + + if ((!engine.keyState[KEY_ALTFIRE]) && (player.weaponType[1] == W_LASER) && (engine.eventTimer % 8 == 1)) + LIMIT_ADD(player.ammo[1], -1, 1, 255); + + if ((engine.eventTimer < 30) && (player.shield <= engine.lowShield)) + return; + + signed char blockSize = 1; + + bar.w = blockSize; + bar.h = 12; + bar.x = 95; + bar.y = 550; + + for (int i = 0 ; i < player.shield ; i += blockSize) + { + if (i >= engine.averageShield) + shieldColor = green; + else if ((i >= engine.lowShield) && (i < engine.averageShield)) + shieldColor = yellow; + else + shieldColor = red; + SDL_FillRect(screen, &bar, shieldColor); + bar.x += blockSize; + if (player.maxShield < 75) + bar.x++; + } +} + /* Checked during the main game loop. When the game is paused it goes into a constant loop checking this routine. If escape is @@ -1810,7 +2139,7 @@ int game_mainLoop() game_doCargo(); game_doDebris(); game_doExplosions(); - doInfo(); + game_doHud(); WRAP_ADD(engine.eventTimer, -1, 0, 60); diff --git a/src/intermission.cpp b/src/intermission.cpp index 9b6fc7f..58dd0ad 100644 --- a/src/intermission.cpp +++ b/src/intermission.cpp @@ -19,17 +19,10 @@ along with this program. If not, see . #include "Starfighter.h" -const char *systemNames[] = {"Spirit", "Eyananth", "Mordor", "Sol"}; - -const char *systemBackground[] = { - "gfx/spirit.jpg", "gfx/eyananth.jpg", - "gfx/mordor.jpg", "gfx/sol.jpg" -}; - /* Drives the cursor. Is used by some other screens too */ -static void doCursor() +static void intermission_doCursor() { getPlayerInput(); @@ -43,7 +36,7 @@ Sets the player's current status information lines. These are the lines that are scrolled up the screen when the player clicks on Current Status These are set only once. */ -static void setStatusLines() +static void intermission_setStatusLines() { char string[50]; @@ -171,9 +164,8 @@ static void setStatusLines() /* Sets the names and stats of the planets within the current system. -This will later be placed into a data file. */ -static void setSystemPlanets() +static void intermission_setSystemPlanets() { FILE *fp; @@ -244,10 +236,10 @@ static void setSystemPlanets() /* Spins the planets around the sun, spaced according to their Y value -as defined in setSystemPlanets(). Moving the cursor over the planet +as defined in intermission_setSystemPlanets(). Moving the cursor over the planet will show their name and their current status */ -static bool showSystem(float x, float y, bool selectable) +static bool intermission_showSystem(float x, float y, bool selectable) { SDL_Rect r; signed char planet = 0; @@ -315,7 +307,7 @@ the specified status line reaches a certain Y value, the entire list is reset and the information lines begin again from the bottom (in other words, they loop around). */ -static void showStatus(SDL_Surface *infoSurface) +static void intermission_showStatus(SDL_Surface *infoSurface) { float speed = 0.25; @@ -353,7 +345,7 @@ static void showStatus(SDL_Surface *infoSurface) blitText(27); } -static void updateCommsSurface(SDL_Surface *comms) +static void intermission_updateCommsSurface(SDL_Surface *comms) { if (engine.commsSection == 1) return; @@ -367,7 +359,7 @@ static void updateCommsSurface(SDL_Surface *comms) drawString(string, 80, 35, FONT_WHITE, comms); } -static void createCommsSurface(SDL_Surface *comms) +static void intermission_createCommsSurface(SDL_Surface *comms) { engine.commsSection = 0; @@ -390,10 +382,10 @@ static void createCommsSurface(SDL_Surface *comms) } } - updateCommsSurface(comms); + intermission_updateCommsSurface(comms); } -static void createMissionDetailSurface(SDL_Surface *comms, int missionSlot) +static void intermission_createMissionDetailSurface(SDL_Surface *comms, int missionSlot) { char name[50]; char string[2000]; @@ -454,7 +446,7 @@ static void createMissionDetailSurface(SDL_Surface *comms, int missionSlot) engine.commsSection = 1; } -static void doComms(SDL_Surface *comms) +static void intermission_doComms(SDL_Surface *comms) { if ((engine.keyState[KEY_FIRE])) { @@ -464,7 +456,7 @@ static void doComms(SDL_Surface *comms) { if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 180 + (i * 60), 430, 50)) { - createMissionDetailSurface(comms, i); + intermission_createMissionDetailSurface(comms, i); engine.keyState[KEY_FIRE] = 0; } } @@ -473,14 +465,14 @@ static void doComms(SDL_Surface *comms) { if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 440, 160, 20)) { - createCommsSurface(comms); + intermission_createCommsSurface(comms); engine.keyState[KEY_FIRE] = 0; } } } } -static void createOptions(SDL_Surface *optionsSurface) +static void intermission_createOptions(SDL_Surface *optionsSurface) { SDL_FillRect(optionsSurface, NULL, black); @@ -522,7 +514,7 @@ static void createOptions(SDL_Surface *optionsSurface) drawString("FULLSCREEN", 30, 150, FONT_WHITE, optionsSurface); } -static void showOptions(SDL_Surface *optionsSurface) +static void intermission_doOptions(SDL_Surface *optionsSurface) { if ((engine.keyState[KEY_FIRE])) { @@ -563,17 +555,17 @@ static void showOptions(SDL_Surface *optionsSurface) } } - createOptions(optionsSurface); + intermission_createOptions(optionsSurface); } } /* -Oddly named function that controls the entire intermission -screen. This simply draws a background, stars, gridlines and the icons -at the bottom of the screen. Will call (and continue to call) the specified -functions when the player has selected an icon. +Controls the entire intermission screen. This simply draws a background, +stars, gridlines and the icons at the bottom of the screen. Will call +(and continue to call) the specified functions when the player has +selected an icon. */ -int galaxyMap() +int intermission() { freeGraphics(); @@ -633,9 +625,9 @@ int galaxyMap() int distance = 0; int interceptionChance = 0; - setStatusLines(); + intermission_setStatusLines(); initShop(); - setSystemPlanets(); + intermission_setSystemPlanets(); SDL_Surface *statsSurface = alphaRect(600, 330, 0x00, 0x00, 0x99); SDL_Surface *savesSurface = createSurface(350, 300); @@ -643,8 +635,8 @@ int galaxyMap() SDL_Surface *commsSurface = createSurface(450, 400); createSavesSurface(savesSurface, -1); - createOptions(optionsSurface); - createCommsSurface(commsSurface); + intermission_createOptions(optionsSurface); + intermission_createCommsSurface(commsSurface); signed char section = 1; @@ -814,14 +806,14 @@ int galaxyMap() cosY += 0.01; } - if (showSystem(sinX, cosY, true)) + if (intermission_showSystem(sinX, cosY, true)) { if (game.system == 0) { sprintf(string, "Stationed At: %s", systemPlanet[game.stationedPlanet].name); SDL_FreeSurface(iconInfo[9].image); iconInfo[9].image = textSurface(string, FONT_WHITE); - updateCommsSurface(commsSurface); + intermission_updateCommsSurface(commsSurface); } else { @@ -837,7 +829,7 @@ int galaxyMap() break; case 2: - showStatus(statsSurface); + intermission_showStatus(statsSurface); break; case 3: @@ -851,12 +843,12 @@ int galaxyMap() case 5: blit(commsSurface, 170, 70); - doComms(commsSurface); + intermission_doComms(commsSurface); break; case 6: blit(optionsSurface, 230, 130); - showOptions(optionsSurface); + intermission_doOptions(optionsSurface); break; case 7: @@ -865,7 +857,7 @@ int galaxyMap() break; case 8: - showSystem(sinX, cosY, false); + intermission_showSystem(sinX, cosY, false); blit(systemPlanet[game.stationedPlanet].image, 150, 450); blit(iconInfo[9].image, 135, 480); @@ -886,7 +878,7 @@ int galaxyMap() systemPlanet[game.stationedPlanet].name); SDL_FreeSurface(iconInfo[9].image); iconInfo[9].image = textSurface(string, FONT_WHITE); - updateCommsSurface(commsSurface); + intermission_updateCommsSurface(commsSurface); section = 1; redrawBackGround = true; saveGame(0); @@ -953,7 +945,7 @@ int galaxyMap() } engine.keyState[KEY_FIRE] = engine.keyState[KEY_ALTFIRE] = 0; - doCursor(); + intermission_doCursor(); delayFrame(); } diff --git a/src/intermission.h b/src/intermission.h index 7bb8537..e6ae69c 100644 --- a/src/intermission.h +++ b/src/intermission.h @@ -20,6 +20,6 @@ along with this program. If not, see . #ifndef INTERMISSION_H #define INTERMISSION_H -extern int galaxyMap(); +int intermission(); #endif diff --git a/src/misc.cpp b/src/misc.cpp index bcb59b8..d93544b 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -28,7 +28,7 @@ void clearInfoLines() } // from a to b -static void copyInfoLine(int a, int b) +void copyInfoLine(int a, int b) { textSurface(b, textShape[a].text, -1, 0, textShape[a].fontColor); textShape[b].life = textShape[a].life; @@ -84,338 +84,6 @@ void setRadioMessage(signed char face, const char *in, int priority) createMessageBox(faceShape, in, 1); } -/* -Draw an arrow at the edge of the screen for each enemy ship that is not visible. -*/ -static void doArrow(int i) -{ - if (i < 0 || !aliens[i].active || aliens[i].shield <= 0 || aliens[i].flags & FL_ISCLOAKED) - return; - - int x = aliens[i].x + aliens[i].image[0]->w / 2; - int y = aliens[i].y + aliens[i].image[0]->h / 2; - - float sx = fabsf((x - (screen->w / 2)) / (screen->w / 2.0)); - float sy = fabsf((y - (screen->h / 2)) / (screen->h / 2.0)); - float sxy = MAX(sx, sy); - - if (sxy < 1) - return; - - x = screen->w / 2 + (x - screen->w / 2) / sxy; - y = screen->h / 2 + (y - screen->h / 2) / sxy; - - int arrow; - - if (sxy == sx) { - arrow = x < screen->w / 2 ? 42 : 38; - x -= x > screen->w / 2 ? shape[arrow]->w : 0; - y -= shape[arrow]->h / 2; - } else { - arrow = y < screen->h / 2 ? 36 : 40; - x -= shape[arrow]->w / 2; - y -= y > screen->h / 2 ? shape[arrow]->h : 0; - } - - blit(shape[arrow], x, y); - - if (i != engine.targetIndex) - return; - - if (textShape[3].life > 0) - return; - - if (sxy == sx) { - x -= x > screen->w / 2 ? 5 + shape[44]->w : -5 - shape[arrow]->w; - y -= (shape[44]->h - shape[arrow]->h) / 2; - } else { - x -= (shape[44]->w - shape[arrow]->w) / 2; - y -= y > screen->h / 2 ? 5 + shape[44]->h : -5 - shape[arrow]->h; - } - - blit(shape[44], x, y); -} - -/* -Fill in later... -*/ -void doInfo() -{ - int shieldColor = 0; - SDL_Rect bar; - signed char fontColor; - char text[25]; - - addBuffer(0, 20, 800, 25); - addBuffer(0, 550, 800, 34); - - if (engine.minutes > -1) - { - if ((engine.minutes == 0) && (engine.seconds <= 29)) - fontColor = FONT_RED; - else if ((engine.minutes == 0) && (engine.seconds > 29)) - fontColor = FONT_YELLOW; - else - fontColor = FONT_WHITE; - blitText(10); // time remaining - sprintf(text, "%.2d:%.2d", engine.minutes, engine.seconds); - textSurface(30, text, 410, 21, fontColor); - blitText(30); - } - - if (game.area != MISN_INTERCEPTION) - { - blitText(9); // mission objectives - sprintf(text, "%d", (currentMission.remainingObjectives1 + currentMission.remainingObjectives2)); - textSurface(39, text, 745, 21, FONT_WHITE); - blitText(39); - } - - blitText(8); // cash - sprintf(text, "%.6d", game.cash); - textSurface(38, text, 90, 21, FONT_WHITE); - blitText(38); - - for (int i = 0; i < ALIEN_MAX; i++) - doArrow(i); - - fontColor = FONT_WHITE; - if (player.ammo[0] > 0) - { - if (player.ammo[0] <= 25) fontColor = FONT_YELLOW; - if (player.ammo[0] <= 10) fontColor = FONT_RED; - } - blitText(5); // plasma ammo - sprintf(text, "%.3d", player.ammo[0]); - textSurface(35, text, 320, 551, fontColor); - blitText(35); - - blitText(6); - - if ((player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_LASER)) - { - if (player.ammo[1] == 1) - fontColor = FONT_RED; - else - fontColor = FONT_WHITE; - sprintf(text, "%.3d", player.ammo[1]); // rocket ammo - textSurface(36, text, 465, 551, fontColor); - blitText(36); - } - - if (((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER)) && (player.ammo[1] > 0)) - { - int c = white; - if (player.ammo[1] > 100) - c = red; - - bar.x = 450; - bar.y = 550; - bar.h = 12; - - for (int i = 0 ; i < (player.ammo[1] / 5) ; i++) - { - bar.w = 1; - SDL_FillRect(screen, &bar, c); - bar.x += 2; - } - } - - if ((!allMissionsCompleted()) && (SDL_GetTicks() >= engine.counter2)) - { - engine.timeTaken++; - engine.counter2 = SDL_GetTicks() + 1000; - if (engine.missionCompleteTimer == 0) - checkScriptEvents(); - } - - if ((engine.timeMission) && (!engine.cheatTime) && (player.shield > 0)) - { - if (SDL_GetTicks() >= engine.counter) - { - if ((engine.seconds > 1) && (engine.seconds <= 11) && (engine.minutes == 0)) - { - audio_playSound(SFX_CLOCK, screen->w / 2); - } - - if (engine.seconds > 0) - { - engine.seconds--; - engine.counter = (SDL_GetTicks() + 1000); - } - else if ((engine.seconds == 0) && (engine.minutes > 0)) - { - engine.minutes--; - engine.seconds = 59; - engine.counter = (SDL_GetTicks() + 1000); - for (int i = 0 ; i < 3 ; i++) - { - if (currentMission.timeLimit1[i] > -1) - currentMission.timeLimit1[i]--; - if (currentMission.timeLimit2[i] > -1) - currentMission.timeLimit2[i]--; - } - checkTimer(); - checkScriptEvents(); - } - - if ((engine.seconds == 0) && (engine.minutes == 0)) - { - for (int i = 0 ; i < 3 ; i++) - { - if (currentMission.timeLimit1[i] > -1) - currentMission.timeLimit1[i]--; - if (currentMission.timeLimit2[i] > -1) - currentMission.timeLimit2[i]--; - } - checkTimer(); - checkScriptEvents(); - engine.counter = (SDL_GetTicks() + 1000); - } - } - } - - for (int i = 0 ; i < 3 ; i++) - { - if (textShape[i].life > 0) - { - textShape[i].y = (525 - (i * 20)); - blitText(i); - textShape[i].life--; - - if (textShape[i].life == 0) - { - copyInfoLine(i + 1, i); - copyInfoLine(i + 2, i + 1); - textShape[2].life = 0; - } - } - } - - // Show the radio message if there is one - if (textShape[3].life > 0) - { - blit(messageBox, (800 - messageBox->w) / 2, 50); - textShape[3].life--; - } - - // Do the target's remaining shield (if required) - if (game.area != MISN_DORIM) - { - if ((engine.targetIndex > -1) && (aliens[engine.targetIndex].shield > 0) && (engine.targetIndex > 9)) - { - blitText(7); - bar.w = 1; - bar.h = 12; - bar.x = 620; - bar.y = 550; - - for (float i = 0 ; i < (engine.targetShield * aliens[engine.targetIndex].shield) ; i++) - { - if (i > 50) - shieldColor = green; - else if ((i >= 25) && (i <= 50)) - shieldColor = yellow; - else - shieldColor = red; - SDL_FillRect(screen, &bar, shieldColor); - bar.x += 2; - } - } - } - - blitText(11); - - bar.w = 25; - bar.h = 12; - bar.x = 80; - bar.y = 571; - - for (int i = 1 ; i <= 5 ; i++) - { - if (weapon[W_PLAYER_WEAPON].damage >= i) { - if(i <= game.maxPlasmaDamage || (SDL_GetTicks() % 1000 > (unsigned)i * 100)) - { - SDL_FillRect(screen, &bar, green); - } - } else if (i <= game.maxPlasmaDamage) - SDL_FillRect(screen, &bar, darkGreen); - bar.x += 30; - } - - blitText(12); - - bar.w = 25; - bar.h = 12; - bar.x = 315; - bar.y = 571; - SDL_FillRect(screen, &bar, yellow); - - for (int i = 1 ; i <= 5 ; i++) - { - if (weapon[W_PLAYER_WEAPON].ammo[0] >= i) { - if(i <= game.maxPlasmaOutput || (SDL_GetTicks() % 1000 > (unsigned)i * 100)) - { - SDL_FillRect(screen, &bar, yellow); - } - } - else if (i <= game.maxPlasmaOutput) - SDL_FillRect(screen, &bar, darkYellow); - bar.x += 30; - } - - blitText(13); - - bar.w = 25; - bar.h = 12; - bar.x = 550; - bar.y = 571; - - for (int i = 1 ; i <= 5 ; i++) - { - if (weapon[W_PLAYER_WEAPON].reload[0] <= rate2reload[i]) { - if(i <= game.maxPlasmaRate || (SDL_GetTicks() % 1000 > (unsigned)i * 100)) - { - SDL_FillRect(screen, &bar, blue); - } - } - else if (i <= game.maxPlasmaRate) - SDL_FillRect(screen, &bar, darkerBlue); - bar.x += 30; - } - - blitText(4); - if (player.shield < 1) - return; - - if ((!engine.keyState[KEY_ALTFIRE]) && (player.weaponType[1] == W_LASER) && (engine.eventTimer % 8 == 1)) - LIMIT_ADD(player.ammo[1], -1, 1, 255); - - if ((engine.eventTimer < 30) && (player.shield <= engine.lowShield)) - return; - - signed char blockSize = 1; - - bar.w = blockSize; - bar.h = 12; - bar.x = 95; - bar.y = 550; - - for (int i = 0 ; i < player.shield ; i += blockSize) - { - if (i >= engine.averageShield) - shieldColor = green; - else if ((i >= engine.lowShield) && (i < engine.averageShield)) - shieldColor = yellow; - else - shieldColor = red; - SDL_FillRect(screen, &bar, shieldColor); - bar.x += blockSize; - if (player.maxShield < 75) - bar.x++; - } -} - static const char *faces[] = { "FACE_CHRIS", "FACE_SID", "FACE_KRASS", "FACE_KLINE", "FACE_PHOEBE", "FACE_URSULA", diff --git a/src/misc.h b/src/misc.h index 5bff93b..78efea7 100644 --- a/src/misc.h +++ b/src/misc.h @@ -21,9 +21,9 @@ along with this program. If not, see . #define MISC_H extern void clearInfoLines(); +void copyInfoLine(int a, int b); extern void setInfoLine(const char *in, int color); extern void setRadioMessage(signed char face, const char *in, int priority); -extern void doInfo(); extern int getFace(const char *face); extern void resetLists();