Implemented centering of the target arrow in Classic difficulty.
This commit is contained in:
parent
e86e5210df
commit
7a066e08a0
70
README.txt
70
README.txt
|
@ -50,19 +50,29 @@ CLASSIC DIFFICULTY DIFFERENCES
|
||||||
|
|
||||||
Classic difficulty is designed to emulate the experience of version 1.1
|
Classic difficulty is designed to emulate the experience of version 1.1
|
||||||
of the game (the last version released by Parallel Realities) as closely
|
of the game (the last version released by Parallel Realities) as closely
|
||||||
as possible. However, there are a few minor differences in addition to
|
as possible. However, there are several minor differences in addition to
|
||||||
the changes to graphics, sound, and dialog:
|
the changes to graphics, sound, and dialog. Here you can fine a list of
|
||||||
|
notable differences.
|
||||||
|
|
||||||
* The current target is shown by an arrow at the edge of the screen which
|
* The arrow pointing toward the current target is colored green if the
|
||||||
precisely indicates the target's position. In contrast, version 1.1's
|
target is an ally, whereas version 1.1 always showed a red arrow.
|
||||||
optional target arrow rested in the middle of the screen and only
|
The arrow is also positioned lower than in version 1.1 and does not
|
||||||
pointed in the general direction (north, south, east, west, northwest,
|
disappear when radio messages are broadcast.
|
||||||
northeast, southwest, southeast) of the target.
|
|
||||||
|
* Life bars for named characters are labeled with the respective
|
||||||
|
character's name instead of "Target".
|
||||||
|
|
||||||
* Selling your secondary weapon leaves you with standard Rockets. In
|
* Selling your secondary weapon leaves you with standard Rockets. In
|
||||||
version 1.1, it instead left you with no secondary weapon at all (with
|
version 1.1, it instead left you with no secondary weapon at all (with
|
||||||
no way to gain standard Rockets back).
|
no way to gain standard Rockets back).
|
||||||
|
|
||||||
|
* If you buy a secondary weapon while one other than standard Rockets
|
||||||
|
is already equipped, the currently equipped secondary weapon is
|
||||||
|
automatically sold for you (which gives you money equal to half of
|
||||||
|
said weapon's cost). In version 1.1, the old secondary weapon would
|
||||||
|
simply disappear in this case, meaning the money was lost unless you
|
||||||
|
explicitly used the "Sell" button.
|
||||||
|
|
||||||
* Travel in Spirit works the same as in every other system, except that
|
* Travel in Spirit works the same as in every other system, except that
|
||||||
there is no chance of interceptions in Classic difficulty. Version
|
there is no chance of interceptions in Classic difficulty. Version
|
||||||
1.1 instead instantly teleported you to the target planet as soon as
|
1.1 instead instantly teleported you to the target planet as soon as
|
||||||
|
@ -79,41 +89,19 @@ the changes to graphics, sound, and dialog:
|
||||||
when he first appears in the Elamale mission is different from version
|
when he first appears in the Elamale mission is different from version
|
||||||
1.1.
|
1.1.
|
||||||
|
|
||||||
* Version 1.1 had a bug in the shop which caused selling something to
|
* Several bugs present in version 1.1 have been fixed. Many of these
|
||||||
redeem half the cost of the next item, rather than half the cost of
|
bugs affected gameplay in notable ways; such bugs include:
|
||||||
the item being sold. This led to the last item in a series being sold
|
|
||||||
for nothing (actually a result of undefined behavior), and it also
|
|
||||||
allowed the player to continuously gain money by buying and selling
|
|
||||||
the first permanent cooling upgrade. This bug is fixed in the current
|
|
||||||
release (including Classic difficulty).
|
|
||||||
|
|
||||||
* Version 1.1 had some overflow bugs, most notably with plasma ammo.
|
* A bug in the shop that caused goods to be sold at the wrong price
|
||||||
The effect of this bug was that you could sometimes gain too much
|
(notably exploitable to gain infinite cash by buying and selling
|
||||||
plasma ammo, resulting in the recorded amount being lower than before
|
the permanent cooling upgrade)
|
||||||
the powerup was picked up. These bugs are fixed in the current
|
* Overflow bugs that caused various numbers (especially plasma ammo)
|
||||||
release (including Classic difficulty).
|
to "wrap around" to zero (leading to cases where gaining plasma
|
||||||
|
ammo would cause you to lose plasma ammo instead)
|
||||||
* A bug made it possible to occasionally get damaged after completing a
|
* A broken event in the Odeon mission that showed a odd error message
|
||||||
mission, during the warp out sequence (the code was designed to
|
* A bug that caused slaves rescued after the interception is destroyed
|
||||||
protect against this, but a mistake led to one case being uncovered).
|
to not count toward the total for the purpose of the Eyananth
|
||||||
The current release fixes this bug.
|
interception mission
|
||||||
|
|
||||||
* The Odeon mission in version 1.1 had a broken event with undefined
|
|
||||||
behavior. Players saw it as a message from Sid Wilson saying that
|
|
||||||
Ursula was running away, followed by an error message. In fact the
|
|
||||||
source code never defined a fail condition for Ursula running away, so
|
|
||||||
if the event had been defined properly, all it would have done is
|
|
||||||
render the mission unwinnable. The current release simply removes the
|
|
||||||
broken event entirely (including for Classic difficulty).
|
|
||||||
|
|
||||||
* The "unlimited time" cheat option in version 1.1 caused the Mars
|
|
||||||
mission to be unwinnable. The current release fixes that by allowing
|
|
||||||
the timer to count down on the Mars mission only while this cheat is
|
|
||||||
enabled.
|
|
||||||
|
|
||||||
* The code checking for rescued slaves for the interception mission in
|
|
||||||
Eyananth failed to work after the interception was cleared in version
|
|
||||||
1.1. This bug is fixed in the current release.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
61
src/game.c
61
src/game.c
|
@ -1742,33 +1742,46 @@ static void game_doArrow(int i)
|
||||||
|
|
||||||
if (arrow != -1)
|
if (arrow != -1)
|
||||||
{
|
{
|
||||||
arrowX = aliens[i].x + aliens[i].image[0]->w / 2 - gfx_sprites[arrow]->w;
|
if (game.difficulty == DIFFICULTY_ORIGINAL)
|
||||||
arrowX = MAX(0, MIN(arrowX, screen->w - gfx_sprites[arrow]->w));
|
|
||||||
arrowY = aliens[i].y + aliens[i].image[0]->h / 2 - gfx_sprites[arrow]->h;
|
|
||||||
arrowY = MAX(0, MIN(arrowY, screen->h - gfx_sprites[arrow]->h));
|
|
||||||
screen_blit(gfx_sprites[arrow], arrowX, arrowY);
|
|
||||||
|
|
||||||
if (i == ALIEN_SID)
|
|
||||||
indicator = SP_INDICATOR_SID;
|
|
||||||
else if (i == ALIEN_PHOEBE)
|
|
||||||
indicator = SP_INDICATOR_PHOEBE;
|
|
||||||
else if (i == ALIEN_URSULA)
|
|
||||||
indicator = SP_INDICATOR_URSULA;
|
|
||||||
else if (i == ALIEN_KLINE)
|
|
||||||
indicator = SP_INDICATOR_KLINE;
|
|
||||||
else if (i == engine.targetIndex)
|
|
||||||
indicator = SP_INDICATOR_TARGET;
|
|
||||||
|
|
||||||
if (indicator != -1)
|
|
||||||
{
|
{
|
||||||
indicatorX = arrowX + gfx_sprites[arrow]->w / 2 - gfx_sprites[indicator]->w / 2;
|
indicator = SP_INDICATOR_TARGET;
|
||||||
indicatorX = MAX(indicatorX, gfx_sprites[arrow]->w + 5);
|
indicatorX = (screen->w / 2) - (gfx_sprites[indicator]->w / 2);
|
||||||
indicatorX = MIN(indicatorX, screen->w - gfx_sprites[arrow]->w - gfx_sprites[indicator]->w - 5);
|
indicatorY = 120;
|
||||||
indicatorY = arrowY + gfx_sprites[arrow]->h / 2 - gfx_sprites[indicator]->h / 2;
|
arrowX = indicatorX + gfx_sprites[indicator]->w / 2 - (gfx_sprites[arrow]->w / 2);
|
||||||
indicatorY = MAX(indicatorY, gfx_sprites[arrow]->h + 5);
|
arrowY = indicatorY + gfx_sprites[indicator]->h + 5;
|
||||||
indicatorY = MIN(indicatorY, screen->h - gfx_sprites[arrow]->h - gfx_sprites[indicator]->h - 5);
|
screen_blit(gfx_sprites[arrow], arrowX, arrowY);
|
||||||
screen_blit(gfx_sprites[indicator], indicatorX, indicatorY);
|
screen_blit(gfx_sprites[indicator], indicatorX, indicatorY);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arrowX = aliens[i].x + aliens[i].image[0]->w / 2 - gfx_sprites[arrow]->w;
|
||||||
|
arrowX = MAX(0, MIN(arrowX, screen->w - gfx_sprites[arrow]->w));
|
||||||
|
arrowY = aliens[i].y + aliens[i].image[0]->h / 2 - gfx_sprites[arrow]->h;
|
||||||
|
arrowY = MAX(0, MIN(arrowY, screen->h - gfx_sprites[arrow]->h));
|
||||||
|
screen_blit(gfx_sprites[arrow], arrowX, arrowY);
|
||||||
|
|
||||||
|
if (i == ALIEN_SID)
|
||||||
|
indicator = SP_INDICATOR_SID;
|
||||||
|
else if (i == ALIEN_PHOEBE)
|
||||||
|
indicator = SP_INDICATOR_PHOEBE;
|
||||||
|
else if (i == ALIEN_URSULA)
|
||||||
|
indicator = SP_INDICATOR_URSULA;
|
||||||
|
else if (i == ALIEN_KLINE)
|
||||||
|
indicator = SP_INDICATOR_KLINE;
|
||||||
|
else if (i == engine.targetIndex)
|
||||||
|
indicator = SP_INDICATOR_TARGET;
|
||||||
|
|
||||||
|
if (indicator != -1)
|
||||||
|
{
|
||||||
|
indicatorX = arrowX + gfx_sprites[arrow]->w / 2 - gfx_sprites[indicator]->w / 2;
|
||||||
|
indicatorX = MAX(indicatorX, gfx_sprites[arrow]->w + 5);
|
||||||
|
indicatorX = MIN(indicatorX, screen->w - gfx_sprites[arrow]->w - gfx_sprites[indicator]->w - 5);
|
||||||
|
indicatorY = arrowY + gfx_sprites[arrow]->h / 2 - gfx_sprites[indicator]->h / 2;
|
||||||
|
indicatorY = MAX(indicatorY, gfx_sprites[arrow]->h + 5);
|
||||||
|
indicatorY = MIN(indicatorY, screen->h - gfx_sprites[arrow]->h - gfx_sprites[indicator]->h - 5);
|
||||||
|
screen_blit(gfx_sprites[indicator], indicatorX, indicatorY);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue