Re-implemented a targeting system similar to the original for Classic.

It's not exactly the same technically, but in function it is. The
only functional difference is that the original would sometimes show
an unexpected health bar for a small(ish) enemy, whereas the new
implementation never does that.

Also different is that exact location is still shown. Will fix that
next.
This commit is contained in:
Julie Marchant 2019-05-26 18:22:08 -04:00
parent ac44cbdf75
commit e86e5210df
2 changed files with 32 additions and 9 deletions

View File

@ -53,13 +53,11 @@ of the game (the last version released by Parallel Realities) as closely
as possible. However, there are a few minor differences in addition to
the changes to graphics, sound, and dialog:
* Where targets are is shown via arrows at the edge of the screen, and
all targets are indicated in this way; the main target is indicated
with text that says "Target", unless the target is one of the cast of
named characters, and all named characters have their arrows indicated
with their respective arrows. In contrast, version 1.1 only had an
optional arrow that rested in the middle of the screen and pointed in
the general direction of the active (main) target.
* The current target is shown by an arrow at the edge of the screen which
precisely indicates the target's position. In contrast, version 1.1's
optional target arrow rested in the middle of the screen and only
pointed in the general direction (north, south, east, west, northwest,
northeast, southwest, southeast) of the target.
* Selling your secondary weapon leaves you with standard Rockets. In
version 1.1, it instead left you with no secondary weapon at all (with

View File

@ -1774,10 +1774,12 @@ static void game_doArrow(int i)
static void game_doHud()
{
static int last_arrow = -1;
int shieldColor = 0;
SDL_Rect bar;
int fontColor;
char text[25];
int i;
screen_addBuffer(0, 20, screen->w, 25);
screen_addBuffer(0, screen->h - 50, screen->w, 34);
@ -1809,8 +1811,31 @@ static void game_doHud()
gfx_createTextObject(TS_CASH, text, 90, 21, FONT_WHITE);
screen_blitText(TS_CASH);
for (int i = 0; i < ALIEN_MAX; i++)
if (game.difficulty == DIFFICULTY_ORIGINAL)
{
i = engine.targetIndex;
if ((i >= 0) && aliens[i].active && (aliens[i].shield > 0) && (!(aliens[i].flags & FL_ISCLOAKED)))
game_doArrow(i);
else
{
i = last_arrow;
if ((i >= 0) && aliens[i].active && (aliens[i].shield > 0) && (!(aliens[i].flags & FL_ISCLOAKED)))
game_doArrow(i);
else
{
last_arrow = rand() % ALIEN_MAX;
if (aliens[last_arrow].flags & FL_FRIEND)
last_arrow = 0;
game_doArrow(last_arrow);
}
}
}
else
{
for (i = 0; i < ALIEN_MAX; i++)
game_doArrow(i);
}
fontColor = FONT_WHITE;
if (player.ammo[0] > 0)