[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;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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. */
|
||||||
|
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,
|
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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user