Fixed some problems with the charge cannon.
Specifically: - When an enemy is hit, its damage is reduced, not its lifetime. - When the shot's lifetime ends, it no longer explodes.
This commit is contained in:
parent
717d56755c
commit
6610cddeac
|
@ -228,6 +228,7 @@ void doBullets()
|
||||||
object *alien, *theCargo;
|
object *alien, *theCargo;
|
||||||
|
|
||||||
bool okayToHit = false;
|
bool okayToHit = false;
|
||||||
|
int old_shield;
|
||||||
float homingMissileSpeed = 0;
|
float homingMissileSpeed = 0;
|
||||||
|
|
||||||
while (bullet->next != NULL)
|
while (bullet->next != NULL)
|
||||||
|
@ -325,6 +326,8 @@ void doBullets()
|
||||||
{
|
{
|
||||||
if ((bullet->active) && (collision(bullet, alien)))
|
if ((bullet->active) && (collision(bullet, alien)))
|
||||||
{
|
{
|
||||||
|
old_shield = alien->shield;
|
||||||
|
|
||||||
if (bullet->owner == &player)
|
if (bullet->owner == &player)
|
||||||
{
|
{
|
||||||
currentGame.hits++;
|
currentGame.hits++;
|
||||||
|
@ -343,9 +346,17 @@ void doBullets()
|
||||||
|
|
||||||
if (bullet->id == WT_CHARGER)
|
if (bullet->id == WT_CHARGER)
|
||||||
{
|
{
|
||||||
bullet->shield -= alien->shield;
|
bullet->damage -= old_shield;
|
||||||
if (bullet->shield <= 0)
|
if (bullet->damage <= 0)
|
||||||
|
{
|
||||||
bullet->active = false;
|
bullet->active = false;
|
||||||
|
bullet->shield = 0;
|
||||||
|
audio_playSound(SFX_EXPLOSION, bullet->x);
|
||||||
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
|
addExplosion(bullet->x + rrand(-35, 35),
|
||||||
|
bullet->y + rrand(-35, 35),
|
||||||
|
E_BIG_EXPLOSION);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -365,9 +376,11 @@ void doBullets()
|
||||||
if ((bullet->flags & WF_WEAPCO) || (bullet->id == WT_ROCKET) ||
|
if ((bullet->flags & WF_WEAPCO) || (bullet->id == WT_ROCKET) ||
|
||||||
(bullet->id == WT_LASER) || (bullet->id == WT_CHARGER))
|
(bullet->id == WT_LASER) || (bullet->id == WT_CHARGER))
|
||||||
{
|
{
|
||||||
if ((bullet->active) && (player.shield > 0) &&
|
if (bullet->active && (player.shield > 0) &&
|
||||||
(collision(bullet, &player)) && (bullet->owner != &player))
|
(bullet->owner != &player) && collision(bullet, &player))
|
||||||
{
|
{
|
||||||
|
old_shield = player.shield;
|
||||||
|
|
||||||
if ((!engine.cheatShield) || (engine.missionCompleteTimer != 0))
|
if ((!engine.cheatShield) || (engine.missionCompleteTimer != 0))
|
||||||
{
|
{
|
||||||
if ((player.shield > engine.lowShield) &&
|
if ((player.shield > engine.lowShield) &&
|
||||||
|
@ -383,17 +396,24 @@ void doBullets()
|
||||||
(bullet->owner->classDef == CD_URSULA))
|
(bullet->owner->classDef == CD_URSULA))
|
||||||
getPlayerHitMessage(bullet->owner);
|
getPlayerHitMessage(bullet->owner);
|
||||||
|
|
||||||
if (bullet->id != WT_CHARGER)
|
if (bullet->id == WT_CHARGER)
|
||||||
|
{
|
||||||
|
bullet->damage -= old_shield;
|
||||||
|
if (bullet->damage <= 0)
|
||||||
|
{
|
||||||
|
bullet->active = false;
|
||||||
|
bullet->shield = 0;
|
||||||
|
audio_playSound(SFX_EXPLOSION, bullet->x);
|
||||||
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
|
addExplosion(bullet->x + rrand(-35, 35),
|
||||||
|
bullet->y + rrand(-35, 35), E_BIG_EXPLOSION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
bullet->active = false;
|
bullet->active = false;
|
||||||
bullet->shield = 0;
|
bullet->shield = 0;
|
||||||
}
|
}
|
||||||
else if (bullet->id == WT_CHARGER)
|
|
||||||
{
|
|
||||||
bullet->shield -= alien->shield;
|
|
||||||
if (bullet->shield < 0)
|
|
||||||
bullet->active = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
audio_playSound(SFX_HIT, player.x);
|
audio_playSound(SFX_HIT, player.x);
|
||||||
|
|
||||||
|
@ -441,18 +461,16 @@ void doBullets()
|
||||||
|
|
||||||
if (bullet->shield < 1)
|
if (bullet->shield < 1)
|
||||||
{
|
{
|
||||||
if ((bullet->flags & WF_TIMEDEXPLOSION) ||
|
if (bullet->flags & WF_TIMEDEXPLOSION)
|
||||||
(bullet->id == WT_CHARGER))
|
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_EXPLOSION, bullet->x);
|
audio_playSound(SFX_EXPLOSION, bullet->x);
|
||||||
for (int i = 0 ; i < 10 ; i++)
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
addExplosion(bullet->x + rrand(-35, 35),
|
addExplosion(bullet->x + rrand(-35, 35),
|
||||||
bullet->y + rrand(-35, 35), E_BIG_EXPLOSION);
|
bullet->y + rrand(-35, 35), E_BIG_EXPLOSION);
|
||||||
|
|
||||||
if (bullet->flags & WF_TIMEDEXPLOSION)
|
if (checkPlayerShockDamage(bullet->x, bullet->y))
|
||||||
if (checkPlayerShockDamage(bullet->x, bullet->y))
|
setInfoLine("Warning: Missile Shockwave Damage!!",
|
||||||
setInfoLine("Warning: Missile Shockwave Damage!!",
|
FONT_RED);
|
||||||
FONT_RED);
|
|
||||||
}
|
}
|
||||||
bullet->active = false;
|
bullet->active = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,7 +318,8 @@ static void evaluateRequirement(int type, int id, int *completed, int *targetVal
|
||||||
{
|
{
|
||||||
char message[25];
|
char message[25];
|
||||||
|
|
||||||
if ((*targetValue <= 0) && (type != M_PROTECT_TARGET) && (type != M_PROTECT_PICKUP))
|
if ((*targetValue <= 0) && (type != M_PROTECT_TARGET) &&
|
||||||
|
(type != M_PROTECT_PICKUP))
|
||||||
{
|
{
|
||||||
*completed = 2;
|
*completed = 2;
|
||||||
checkTimer();
|
checkTimer();
|
||||||
|
|
|
@ -37,10 +37,10 @@ struct object {
|
||||||
int deathCounter; // how long to explode for
|
int deathCounter; // how long to explode for
|
||||||
|
|
||||||
signed char speed;
|
signed char speed;
|
||||||
unsigned char damage; // Contact damage for bullets
|
int damage; // Contact damage for bullets
|
||||||
unsigned char ammo[2]; // Ammo for 2nd weapon.
|
unsigned char ammo[2]; // Ammo for 2nd weapon.
|
||||||
|
|
||||||
signed char face; // Either 0 or 1
|
int face; // Either 0 or 1
|
||||||
|
|
||||||
object *owner; // Who owns this object
|
object *owner; // Who owns this object
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue