[Change] Knockback is now dependent on DamageType.

This commit is contained in:
Allanis 2013-07-06 19:10:34 +01:00
parent 698b22a324
commit 10418a5ba9
3 changed files with 14 additions and 8 deletions

View File

@ -110,27 +110,33 @@ char** outfit_getTech(int* n, const int* tech, const int techmax) {
return outfitnames; 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) { DamageType dtype, double dmg) {
switch(dtype) { switch(dtype) {
case DAMAGE_TYPE_ENERGY: case DAMAGE_TYPE_ENERGY:
(*dshield) = dmg*1.1; (*dshield) = dmg*1.1;
(*darmour) = dmg*0.7; (*darmour) = dmg*0.7;
(*knockback) = 0.1;
break; break;
case DAMAGE_TYPE_KINETIC: case DAMAGE_TYPE_KINETIC:
(*dshield) = dmg*0.8; (*dshield) = dmg*0.8;
(*darmour) = dmg*1.2; (*darmour) = dmg*1.2;
(*knockback) = 1.;
break; break;
case DAMAGE_TYPE_ION: case DAMAGE_TYPE_ION:
(*dshield) = 0.; (*dshield) = 0.;
(*darmour) = dmg; (*darmour) = dmg;
(*knockback) = 0.4;
break; break;
case DAMAGE_TYPE_RADIATION: case DAMAGE_TYPE_RADIATION:
(*dshield) = 0.15; /* Still take damage, just very little. */ (*dshield) = 0.15; /* Still take damage, just very little. */
(*darmour) = dmg; (*darmour) = dmg;
(*knockback) = 0.8;
default: default:
(*dshield) = (*darmour) = 0.; WARN("Unknown damage type: %d!", dtype);
(*dshield) = (*darmour) = (*knockback) = 0.;
break; break;
} }
} }

View File

@ -121,7 +121,7 @@ typedef struct Outfit_ {
} Outfit; } Outfit;
/* Misc. */ /* Misc. */
void outfit_calcDamage(double* dshield, double* darmour, void outfit_calcDamage(double* dshield, double* darmour, double* knockback,
DamageType dtype, double dmg); DamageType dtype, double dmg);
/* Get. */ /* Get. */

View File

@ -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, void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
const DamageType dtype, const double damage) { const DamageType dtype, const double damage) {
double damage_shield, damage_armour, dam_mod; double damage_shield, damage_armour, knockback, dam_mod;
/* Calculate the damage. */ /* 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; p->shield -= damage_shield;
dam_mod = damage_shield/p->shield_max; 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. */ /* Knock back effect is dependent on both damage and mass of the weapon. */
/* should probably turn it into a partial conservative collision.. */ /* should probably turn it into a partial conservative collision.. */
vect_cadd(&p->solid->vel, vect_cadd(&p->solid->vel,
w->vel.x * (dam_mod/6. + w->mass/p->solid->mass/6.), knockback * (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.y * (dam_mod/6. + w->mass/p->solid->mass/6.)));
} }
void pilot_dead(Pilot* p) { void pilot_dead(Pilot* p) {