From 31ec890d3e21d7cd5d91604e30beeb39fc0e36aa Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Sat, 17 May 2014 13:11:11 +0100 Subject: [PATCH] [Change] Tweaked the rumble system a little. --- dat/outfit.xml | 4 ++-- src/pilot.c | 21 ++++++++++++--------- src/spfx.c | 7 +++---- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/dat/outfit.xml b/dat/outfit.xml index a31ab6c..b2ceedd 100644 --- a/dat/outfit.xml +++ b/dat/outfit.xml @@ -409,7 +409,7 @@ <gfx_store>afterburner</gfx_store> </general> <specific type="afterburner"> - <rumble>30</rumble> + <rumble>0.5</rumble> <sound>afterburner</sound> <thrust_perc>100</thrust_perc> <thrust_abs>50</thrust_abs> @@ -428,7 +428,7 @@ <gfx_store>afterburner2</gfx_store> </general> <specific type="afterburner"> - <rumble>50</rumble> + <rumble>0.9</rumble> <sound>afterburner</sound> <thrust_perc>185</thrust_perc> <thrust_abs>100</thrust_abs> diff --git a/src/pilot.c b/src/pilot.c index d5c2a3a..fd8fb69 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -457,16 +457,15 @@ void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter, dam_mod = damage_armour / p->armour_max; if(p->id == PLAYER_ID) /* Shake us up a bit. */ - spfx_shake(dam_mod*100.); + spfx_shake(SHAKE_MAX*dam_mod); } } - if(shooter != 0) - /* 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, - 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.))); + /* 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, + 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.))); } /** @@ -670,12 +669,15 @@ void pilot_explode(double x, double y, double radius, /* Pilot is hit. */ if(dist < rad2) { /* Impact settings. */ - s.mass = (rad2 - dist) / 10.; + s.mass = pow2(damage) * sqrt(rad2 - dist) / 30.; s.vel.x = rx; s.vel.y = ry; /* Actual damage calculations. */ pilot_hit(p, &s, parent, dtype, damage); + + /* Shock wave from the explosion. */ + spfx_shake(pow2(damage) / pow2(100.) * SHAKE_MAX); } } } @@ -822,7 +824,8 @@ static void pilot_update(Pilot* pilot, const double dt) { pilot->speed * pilot->afterburner->outfit->u.afb.speed_perc + pilot->afterburner->outfit->u.afb.speed_abs, dt); if(pilot->id == PLAYER_ID) - spfx_shake(SHAKE_DECAY*0.75 * dt); /* Shake goes down at half speed. */ + spfx_shake(0.75*SHAKE_DECAY*dt); /* Shake goes down at half speed. */ + pilot->energy -= pilot->afterburner->outfit->u.afb.energy * dt; /* Energy loss. */ } else /* Normal limit. */ limit_speed(&pilot->solid->vel, pilot->speed, dt); diff --git a/src/spfx.c b/src/spfx.c index f275945..441d0d9 100644 --- a/src/spfx.c +++ b/src/spfx.c @@ -17,8 +17,7 @@ #define SPFX_GFX "../gfx/spfx/" /**< Graphics location. */ #define SPFX_CHUNK 32 /**< Chunk to allocate when needed. */ -#define SHAKE_VEL_MOD 0.0006 /**< Shake modifier. */ -#define SHAKE_MOD_FACTOR 0.2 /**< Shake modifier factor. */ +#define SHAKE_VEL_MOD 0.0008 /**< Shake modifier. */ /* Special hardcoded effects.. */ @@ -343,7 +342,7 @@ void spfx_start(const double dt) { -VANGLE(shake_pos) + (RNGF()-0.5) * M_PI); } /* The shake decays over time. */ - shake_rad -= SHAKE_DECAY * dt * SHAKE_MOD_FACTOR; + shake_rad -= SHAKE_DECAY * dt; if(shake_rad < 0.) shake_rad = 0.; x = shake_pos.x; @@ -369,7 +368,7 @@ void spfx_start(const double dt) { * @param mod Modifier to increase levely by. */ void spfx_shake(double mod) { - shake_rad += mod*SHAKE_MOD_FACTOR; + shake_rad += mod; if(shake_rad > SHAKE_MAX) shake_rad = SHAKE_MAX; shake_off = 0;