Fixed the experimental fighter not running away from chargers.
This oddity was caused by exactly what I thought it was caused by: the code assumed that all bullets are created equal, and each bullet had a 1 in 50 chance of causing the ship to run away. Well, the charger inflicts so much damage that 50 shots would be a ridiculous amount of damage for even the experimental fighter. So now, except in Classic difficulty, whether or not it runs away is determined partly by how much damage a weapon inflicts. Specifically, the chance is now the damage of the bullet out of 150. High-damage weapons are still a useful idea; after all, a 100 damage weapon is 100 guaranteed damage, even if the fighter is likely to flee. However, it gets rid of the skewed nature of the fleeing behavior and prevents the charger from subverting the purpose of the behavior.
This commit is contained in:
parent
efb7a135be
commit
fa43f2aabe
|
@ -1772,6 +1772,8 @@ void alien_destroy(object *alien, object *attacker)
|
||||||
|
|
||||||
void alien_hurt(object *alien, object *attacker, int damage, bool ion)
|
void alien_hurt(object *alien, object *attacker, int damage, bool ion)
|
||||||
{
|
{
|
||||||
|
double run_chance;
|
||||||
|
|
||||||
if (ion)
|
if (ion)
|
||||||
alien->systemPower -= damage;
|
alien->systemPower -= damage;
|
||||||
else
|
else
|
||||||
|
@ -1828,7 +1830,9 @@ void alien_hurt(object *alien, object *attacker, int damage, bool ion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((alien->flags & FL_RUNSAWAY) && ((rand() % 50) == 0))
|
run_chance = (game.difficulty == DIFFICULTY_ORIGINAL) ? 0.2 : damage / 150.;
|
||||||
|
|
||||||
|
if ((alien->flags & FL_RUNSAWAY) && CHANCE(run_chance))
|
||||||
{
|
{
|
||||||
alien->flags |= FL_LEAVESECTOR;
|
alien->flags |= FL_LEAVESECTOR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue