From 11a96c9b0060b11d0c7b42332ff942cfd365e12d Mon Sep 17 00:00:00 2001 From: Allanis Date: Sat, 21 Dec 2013 00:45:14 +0000 Subject: [PATCH] [Add] Implemented volatility damage. --- dat/planet.xml | 2 +- src/outfit.c | 31 ++++++++++++++++++------------- src/pilot.c | 11 ++++++----- src/player.c | 7 ++++++- src/space.c | 42 +++++++++++++++++++++++------------------- 5 files changed, 54 insertions(+), 39 deletions(-) diff --git a/dat/planet.xml b/dat/planet.xml index 3d9af68..015a34c 100644 --- a/dat/planet.xml +++ b/dat/planet.xml @@ -215,7 +215,7 @@ The Raglan bar is a pretty small bar for Draktharr standards, and quite empty too. Raglan Outpost was established after the Draktharr-Frontier war broke out before the Incident. To this day the Frontier still is demanding for it's dismantling in the halls of the Emperor, although he has yet to make a statement. Meanwhile the Draktharrs use this base intensively in their fight against the DLF. - Dvaered + Draktharr
7
0 diff --git a/src/outfit.c b/src/outfit.c index ceb53e9..e040ef8 100644 --- a/src/outfit.c +++ b/src/outfit.c @@ -116,31 +116,36 @@ Outfit** outfit_getTech(int* n, const int* tech, const int techmax) { void outfit_calcDamage(double* dshield, double* darmour, double* knockback, DamageType dtype, double dmg) { + double ds, da, kn; switch(dtype) { case DAMAGE_TYPE_ENERGY: - (*dshield) = dmg*1.1; - (*darmour) = dmg*0.7; - (*knockback) = 0.1; + ds = dmg*1.1; + da = dmg*0.7; + kn = 0.1; break; case DAMAGE_TYPE_KINETIC: - (*dshield) = dmg*0.8; - (*darmour) = dmg*1.2; - (*knockback) = 1.; + ds = dmg*0.8; + da = dmg*1.2; + kn = 1.; break; case DAMAGE_TYPE_ION: - (*dshield) = 0.; - (*darmour) = dmg; - (*knockback) = 0.4; + ds = dmg; + da = dmg; + kn = 0.4; break; case DAMAGE_TYPE_RADIATION: - (*dshield) = 0.15; /* Still take damage, just very little. */ - (*darmour) = dmg; - (*knockback) = 0.8; + ds = dmg*0.15; /* Still take damage, just very little. */ + da = dmg; + kn = 0.8; default: WARN("Unknown damage type: %d!", dtype); - (*dshield) = (*darmour) = (*knockback) = 0.; + ds = da = kn = 0.; break; } + + if(dshield) *dshield = ds; + if(darmour) *darmour = da; + if(knockback) *knockback = kn; } /** diff --git a/src/pilot.c b/src/pilot.c index c393659..c89a6e3 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -410,11 +410,12 @@ 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, - 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.))); + 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.))); } /** diff --git a/src/player.c b/src/player.c index 27bbef9..dac38e7 100644 --- a/src/player.c +++ b/src/player.c @@ -867,9 +867,14 @@ void player_renderGUI(void) { /* Lockon warning. */ if(player->lockons > 0) - gl_printMid(NULL, SCREEN_W, 0., SCREEN_H-gl_defFont.h-25., + gl_printMid(NULL, SCREEN_W - gui_xoff, 0., SCREEN_H-gl_defFont.h-25., &cRed, "LOCKON DETECTED"); + /* Volatile Environment. */ + if(cur_system->nebu_volatility > 0.) + gl_printMid(NULL, SCREEN_W - gui_xoff, 0., SCREEN_H-gl_defFont.h*2.-35., + &cRed, "VOLATILE ENVIRONMENT DETECTED"); + /* GUI! */ /* -- Frame. */ gl_blitStatic(gui.gfx_frame, gui.frame.x, gui.frame.y, NULL); diff --git a/src/space.c b/src/space.c index 66538e4..a5dbb72 100644 --- a/src/space.c +++ b/src/space.c @@ -382,29 +382,33 @@ void space_update(const double dt) { if(cur_system == NULL) return; /* Can't update a null system. */ - if(!space_spawn) return; /* Spawning is disabled. */ + if(space_spawn) { + spawn_timer -= dt; - spawn_timer -= dt; + if(cur_system->nfleets == 0) /* Stop checking if there are no fleets. */ + spawn_timer = 300.; - if(cur_system->nfleets == 0) - /* Please stop checking that there are no fleets. */ - spawn_timer = 300.; - - if(spawn_timer < 0.) { - /* Time to possibly spawn. */ - - /* Spawn chance is based on overall percentage. */ - f = RNG(0, 100*cur_system->nfleets); - j = 0; - for(i = 0; i < cur_system->nfleets; i++) { - j += cur_system->fleets[i].chance; - if(f < j) { - /* Add one fleet. */ - space_addFleet(cur_system->fleets[i].fleet, 0); - break; + if(spawn_timer < 0.) { /* time to possibly spawn. */ + /* Spawn chance is based on overall %. */ + f = RNG(0, 100*cur_system->nfleets); + j = 0; + for(i = 0; i < cur_system->nfleets; i++) { + j += cur_system->fleets[i].chance; + if(f < j) { /* Add one fleet. */ + space_addFleet(cur_system->fleets[i].fleet, 0); + break; + } } + spawn_timer = 60./(float)cur_system->nfleets; } - spawn_timer = 60./(float)cur_system->nfleets; + } + + /* Volatile system. */ + if(cur_system->nebu_volatility > 0.) { + /* Player takes damage. */ + if(player) + pilot_hit(player, NULL, 0, DAMAGE_TYPE_RADIATION, + pow2(cur_system->nebu_volatility) / 500. * dt); } }