[Change] Knockback is now dependent on DamageType.
This commit is contained in:
parent
698b22a324
commit
10418a5ba9
10
src/outfit.c
10
src/outfit.c
@ -110,27 +110,33 @@ char** outfit_getTech(int* n, const int* tech, const int techmax) {
|
||||
return outfitnames;
|
||||
}
|
||||
|
||||
void outfit_calcDamage(double* dshield, double* darmour,
|
||||
/* Give the real shield damage, armour damage and knockback modifier. */
|
||||
void outfit_calcDamage(double* dshield, double* darmour, double* knockback,
|
||||
DamageType dtype, double dmg) {
|
||||
|
||||
switch(dtype) {
|
||||
case DAMAGE_TYPE_ENERGY:
|
||||
(*dshield) = dmg*1.1;
|
||||
(*darmour) = dmg*0.7;
|
||||
(*knockback) = 0.1;
|
||||
break;
|
||||
case DAMAGE_TYPE_KINETIC:
|
||||
(*dshield) = dmg*0.8;
|
||||
(*darmour) = dmg*1.2;
|
||||
(*knockback) = 1.;
|
||||
break;
|
||||
case DAMAGE_TYPE_ION:
|
||||
(*dshield) = 0.;
|
||||
(*darmour) = dmg;
|
||||
(*knockback) = 0.4;
|
||||
break;
|
||||
case DAMAGE_TYPE_RADIATION:
|
||||
(*dshield) = 0.15; /* Still take damage, just very little. */
|
||||
(*darmour) = dmg;
|
||||
(*knockback) = 0.8;
|
||||
default:
|
||||
(*dshield) = (*darmour) = 0.;
|
||||
WARN("Unknown damage type: %d!", dtype);
|
||||
(*dshield) = (*darmour) = (*knockback) = 0.;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ typedef struct Outfit_ {
|
||||
} Outfit;
|
||||
|
||||
/* Misc. */
|
||||
void outfit_calcDamage(double* dshield, double* darmour,
|
||||
void outfit_calcDamage(double* dshield, double* darmour, double* knockback,
|
||||
DamageType dtype, double dmg);
|
||||
|
||||
/* Get. */
|
||||
|
10
src/pilot.c
10
src/pilot.c
@ -245,12 +245,12 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) {
|
||||
void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
|
||||
const DamageType dtype, const double damage) {
|
||||
|
||||
double damage_shield, damage_armour, dam_mod;
|
||||
double damage_shield, damage_armour, knockback, dam_mod;
|
||||
|
||||
/* Calculate the damage. */
|
||||
outfit_calcDamage(&damage_shield, &damage_armour, dtype, damage);
|
||||
outfit_calcDamage(&damage_shield, &damage_armour, &knockback, dtype, damage);
|
||||
|
||||
if(p->shield - damage_shield > 0.) {
|
||||
if(p->shield - damage_shield > 0.) { /* Shields take the whole blow. */
|
||||
p->shield -= damage_shield;
|
||||
dam_mod = damage_shield/p->shield_max;
|
||||
}
|
||||
@ -286,8 +286,8 @@ void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
|
||||
/* Knock back effect is dependent on both damage and mass of the weapon. */
|
||||
/* should probably turn it into a partial conservative collision.. */
|
||||
vect_cadd(&p->solid->vel,
|
||||
w->vel.x * (dam_mod/6. + w->mass/p->solid->mass/6.),
|
||||
w->vel.y * (dam_mod/6. + w->mass/p->solid->mass/6.));
|
||||
knockback * (w->vel.x * (dam_mod/6. + w->mass/p->solid->mass/6.)),
|
||||
knockback * (w->vel.y * (dam_mod/6. + w->mass/p->solid->mass/6.)));
|
||||
}
|
||||
|
||||
void pilot_dead(Pilot* p) {
|
||||
|
Loading…
Reference in New Issue
Block a user