Adjusted the delay of ray damage, plus some misc code fixes.

This commit is contained in:
Julie Marchant 2019-05-24 22:05:09 -04:00
parent 281687b1c5
commit d7dc0844c8
6 changed files with 35 additions and 38 deletions

View File

@ -1848,7 +1848,6 @@ void alien_move(Object *alien)
player_damage(alien->shield, 0);
alien->shield = 0;
audio_playSound(SFX_EXPLOSION, alien->x, alien->y);
audio_playSound(SFX_HIT, player.x, player.y);
}
if (alien->classDef == CD_ASTEROID2)
@ -1856,13 +1855,11 @@ void alien_move(Object *alien)
player_damage(alien->shield, 0);
alien->shield = 0;
audio_playSound(SFX_EXPLOSION, alien->x, alien->y);
audio_playSound(SFX_HIT, player.x, player.y);
}
if (alien->classDef == CD_BARRIER)
{
player_damage(1, 0);
audio_playSound(SFX_HIT, player.x, player.y);
}
}
}

View File

@ -68,7 +68,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MAX_HOMING 20
#define MAX_DOUBLE_HOMING (game.difficulty != DIFFICULTY_ORIGINAL ? 15 : 10)
#define MAX_MICRO_HOMING 10
#define RAY_DAMAGE_DELAY 10
#define RAY_DAMAGE_DELAY 5
// Object Flags
#define FL_WEAPCO 1

View File

@ -175,7 +175,7 @@ Show a warning. Used when non-fatal things go wrong.
*/
void engine_warn(const char *msg)
{
printf("WARNING: %s", msg);
printf("WARNING: %s\n", msg);
}
/*
@ -184,7 +184,7 @@ never happen.
*/
void engine_error(const char *msg)
{
printf("ERROR: %s\nAborting", msg);
printf("ERROR: %s\nAborting\n", msg);
exit(1);
}

View File

@ -819,8 +819,6 @@ static void game_doBullets()
bullet->shield = 0;
}
audio_playSound(SFX_HIT, player.x, player.y);
if (bullet->id == WT_ROCKET)
explosion_add(bullet->x, bullet->y, SP_BIG_EXPLOSION);
else

View File

@ -84,6 +84,12 @@ void player_setTarget(int index)
engine.targetShield /= aliens[index].shield;
}
/*
Attempt to damage the player by ``amount``. If ``delay`` is specified,
delay any damage dealt by that number of frames (i.e. require that
number of frames of continuous damage before it registers).
Return 1 if damage is inflicted, 0 otherwise.
*/
void player_damage(int amount, int delay)
{
int oldshield = player.shield;
@ -100,32 +106,35 @@ void player_damage(int amount, int delay)
(player_damageDelay >= delay))
{
player.shield -= amount;
LIMIT(player.shield, 0, player.maxShield);
player.hit = 5; // Damage flash timer
audio_playSound(SFX_HIT, player.x, player.y);
// Damage tiers (not in Classic mode)
if ((oldshield > engine.lowShield) &&
(player.shield <= engine.lowShield))
{
info_setLine("!!! WARNING: SHIELD LOW !!!", FONT_RED);
if (game.difficulty != DIFFICULTY_ORIGINAL)
{
player.shield = engine.lowShield;
player_damageDelay = 0;
}
}
else if ((oldshield > 1) && (player.shield <= 1))
{
info_setLine("!!! WARNING: SHIELD CRITICAL !!!", FONT_RED);
if (game.difficulty != DIFFICULTY_ORIGINAL)
{
player.shield = 1;
player_damageDelay = 0;
}
}
}
else
{
player_damageDelay += amount;
LIMIT(player.shield, 0, player.maxShield);
player.hit = 5; // Damage flash timer
// Damage tiers (not in Classic mode)
if ((oldshield > engine.lowShield) &&
(player.shield <= engine.lowShield))
{
info_setLine("!!! WARNING: SHIELD LOW !!!", FONT_RED);
if (game.difficulty != DIFFICULTY_ORIGINAL)
{
player.shield = engine.lowShield;
player_damageDelay = 0;
}
}
else if ((oldshield > 1) && (player.shield <= 1))
{
info_setLine("!!! WARNING: SHIELD CRITICAL !!!", FONT_RED);
if (game.difficulty != DIFFICULTY_ORIGINAL)
{
player.shield = 1;
player_damageDelay = 0;
}
}
}
}

View File

@ -193,14 +193,7 @@ void ship_fireRay(Object *ship)
(!engine.cheatShield) && (engine.missionCompleteTimer == 0))
{
player_damage(1, RAY_DAMAGE_DELAY);
explosion_add(player.x, player.y, SP_SMALL_EXPLOSION);
audio_playSound(SFX_HIT, player.x, player.y);
if (player.shield < 1)
{
audio_playSound(SFX_DEATH, player.x, player.y);
audio_playSound(SFX_EXPLOSION, player.x, player.y);
}
}
}
}