summaryrefslogtreecommitdiff
path: root/src/game/unit_soldier.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2018-04-21 14:43:40 +0200
committerPaweł Redman <pawel.redman@gmail.com>2018-04-21 14:43:40 +0200
commit8d740f470fb5ed5f63a3d59d3867189626e285b9 (patch)
tree30123091126a86c82f081de10f3ec7e0f92a0a6c /src/game/unit_soldier.cpp
parent7c56f59aedddb6bb18d85e778a3acbef16b4c54f (diff)
Corpses can take damage now.
Diffstat (limited to 'src/game/unit_soldier.cpp')
-rw-r--r--src/game/unit_soldier.cpp37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/game/unit_soldier.cpp b/src/game/unit_soldier.cpp
index 0ffe19f..e41278e 100644
--- a/src/game/unit_soldier.cpp
+++ b/src/game/unit_soldier.cpp
@@ -211,19 +211,36 @@ void unit_soldier_t::on_think(void)
void unit_soldier_t::on_damage(unit_t *attacker)
{
- assets::soldier.pain.play_3d(x);
-}
+ if (health < -30) {
+ assets::fx.gibbing.play_3d(x);
+ game->deletion_list.insert(this);
+ return;
+ } else if (health < -10) {
+ render_size[0] = v2f_t(-0.5f, -1.2f);
+ render_size[1] = v2f_t(+0.5f, +0.3f);
-void unit_soldier_t::on_death(void)
-{
- if (health >= -10) {
+ if (!gibbed)
+ assets::fx.gibbing.play_3d(x);
+ else
+ assets::fx.corpse_hit.play_3d(x);
+
+ place(world, x);
+ gibbed = true;
+ } else if (health <= 0) {
render_size[0] = v2f_t(-0.75f, -0.5f);
render_size[1] = v2f_t(+0.75f, +0.5f);
- assets::soldier.death.play_3d(x);
- } else {
- assets::soldier.gib_sound.play_3d(x);
- }
+ if (!dead)
+ assets::soldier.death.play_3d(x);
+ else
+ assets::fx.corpse_hit.play_3d(x);
+
+ place(world, x);
+ } else
+ assets::soldier.pain.play_3d(x);
+}
+void unit_soldier_t::on_death(void)
+{
render_layer = render::LAYER_FLAT;
cmodel.cflags = CF_BACKGROUND;
place(world, x);
@@ -278,7 +295,7 @@ void unit_soldier_t::render_to(render::state_t *render)
} else {
float phase = clamp<float>((game->now - death_time) * 5, 0, 0.9);
- if (health < -10)
+ if (gibbed)
render->render(phase, &assets::soldier.gibbing, render_bounds);
else
render->render(phase, &assets::soldier.dead, render_bounds);