File prboom-hbar-all.diff of Package dsda-doom

From 882bcbe9f612b2bcc0daab095d73c7fb5e9723be Mon Sep 17 00:00:00 2001
From: Jan Engelhardt <jengelh@inai.de>
Date: Wed, 1 May 2013 09:53:49 +0200
Subject: [PATCH 1/2] Add option to show health bar for all destructible mobjs
Origin: https://github.com/jengelh/dsda-doom

The current health bar fails to show for Lost Souls. In addition,
showing it for other destructible objects (such as barrels - or DEH
modifications in that spirit) can be used to gauge the objects'
remaining life.
---
 prboom2/src/dsda/configuration.c |  4 ++++
 prboom2/src/dsda/configuration.h |  1 +
 prboom2/src/dsda/settings.c      |  5 +++++
 prboom2/src/dsda/settings.h      |  1 +
 prboom2/src/gl_intern.h          |  1 +
 prboom2/src/gl_main.c            | 13 ++++++++++---
 prboom2/src/m_menu.c             |  1 +
 prboom2/src/m_misc.c             |  1 +
 8 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/prboom2/src/dsda/configuration.c b/prboom2/src/dsda/configuration.c
index e0fe40ecf..b1197ee17 100644
--- a/prboom2/src/dsda/configuration.c
+++ b/prboom2/src/dsda/configuration.c
@@ -597,6 +597,10 @@ dsda_config_t dsda_config[dsda_config_count] = {
     "gl_health_bar", dsda_config_gl_health_bar,
     CONF_BOOL(0), NULL, STRICT_INT(0)
   },
+  [dsda_config_gl_health_bar_shootables] = {
+    "gl_health_bar_shootables", dsda_config_gl_health_bar_shootables,
+    CONF_BOOL(0), NULL, NOT_STRICT
+  },
   [dsda_config_gl_usevbo] = {
     "gl_usevbo", dsda_config_gl_usevbo,
     CONF_BOOL(1), NULL, NOT_STRICT
diff --git a/prboom2/src/dsda/configuration.h b/prboom2/src/dsda/configuration.h
index 4bf8531b4..f32f4c6b2 100644
--- a/prboom2/src/dsda/configuration.h
+++ b/prboom2/src/dsda/configuration.h
@@ -119,6 +119,7 @@ typedef enum {
   dsda_config_gl_render_multisampling,
   dsda_config_gl_render_fov,
   dsda_config_gl_health_bar,
+  dsda_config_gl_health_bar_shootables,
   dsda_config_gl_usevbo,
   dsda_config_gl_fade_mode,
   dsda_config_use_mouse,
diff --git a/prboom2/src/dsda/settings.c b/prboom2/src/dsda/settings.c
index c417705bd..6019ed07d 100644
--- a/prboom2/src/dsda/settings.c
+++ b/prboom2/src/dsda/settings.c
@@ -248,6 +248,11 @@ dboolean dsda_ShowHealthBars(void) {
   return dsda_IntConfig(dsda_config_gl_health_bar);
 }
 
+dboolean dsda_ShowHealthBarsForShootables(void)
+{
+	return dsda_IntConfig(dsda_config_gl_health_bar_shootables);
+}
+
 dboolean dsda_WipeAtFullSpeed(void) {
   return dsda_IntConfig(dsda_config_wipe_at_full_speed);
 }
diff --git a/prboom2/src/dsda/settings.h b/prboom2/src/dsda/settings.h
index a2fc9bf95..1988c5140 100644
--- a/prboom2/src/dsda/settings.h
+++ b/prboom2/src/dsda/settings.h
@@ -50,6 +50,7 @@ dboolean dsda_ShowMinimap(void);
 dboolean dsda_ShowLevelSplits(void);
 dboolean dsda_ShowDemoAttempts(void);
 dboolean dsda_ShowHealthBars(void);
+dboolean dsda_ShowHealthBarsForShootables(void);
 dboolean dsda_MapCoordinates(void);
 dboolean dsda_MapTotals(void);
 dboolean dsda_MapTime(void);
diff --git a/prboom2/src/gl_intern.h b/prboom2/src/gl_intern.h
index 0040edd1d..f55c66049 100644
--- a/prboom2/src/gl_intern.h
+++ b/prboom2/src/gl_intern.h
@@ -218,6 +218,7 @@ typedef enum
   health_bar_null,
   health_bar_red,
   health_bar_yellow,
+  health_bar_green,
 } health_bar_color_t;
 
 typedef struct
diff --git a/prboom2/src/gl_main.c b/prboom2/src/gl_main.c
index e2458fd9f..92e5a7b38 100644
--- a/prboom2/src/gl_main.c
+++ b/prboom2/src/gl_main.c
@@ -2033,12 +2033,18 @@ static void gld_DrawSprite(GLSprite *sprite)
 
 static void gld_AddHealthBar(mobj_t* thing, GLSprite *sprite)
 {
-  if (((thing->flags & (MF_COUNTKILL | MF_CORPSE)) == MF_COUNTKILL) && (thing->health > 0))
+  bool all_shoot = dsda_ShowHealthBarsForShootables();
+  int init_color = all_shoot ? health_bar_green : health_bar_null;
+  bool show_bar  = all_shoot ?
+                   thing->flags & MF_SHOOTABLE :
+                   (thing->flags & (MF_COUNTKILL | MF_CORPSE)) == MF_COUNTKILL;
+
+  if (thing->health > 0 && show_bar)
   {
     GLHealthBar hbar;
     int health_percent = thing->health * 100 / P_MobjSpawnHealth(thing);
 
-    hbar.color = health_bar_null;
+    hbar.color = init_color;
     if (health_percent <= 50)
       hbar.color = health_bar_red;
     else if (health_percent <= 99)
@@ -2065,10 +2071,11 @@ static void gld_AddHealthBar(mobj_t* thing, GLSprite *sprite)
   }
 }
 
-static GLfloat health_bar_rgb[3][3] = {
+static GLfloat health_bar_rgb[][3] = {
   [health_bar_null]   = { 0.0f, 0.0f, 0.0f },
   [health_bar_red]    = { 1.0f, 0.0f, 0.0f },
   [health_bar_yellow] = { 1.0f, 1.0f, 0.0f },
+  [health_bar_green]  = { 0.0f, 1.0f, 0.0f },
 };
 
 static void gld_DrawHealthBars(void)
diff --git a/prboom2/src/m_menu.c b/prboom2/src/m_menu.c
index fc3d22c82..7bc30508b 100644
--- a/prboom2/src/m_menu.c
+++ b/prboom2/src/m_menu.c
@@ -3052,6 +3052,7 @@ setup_menu_t demo_settings[] = {
   { "Casual Play Settings", S_SKIP | S_TITLE, m_null, G_X},
   { "Allow Jumping", S_YESNO, m_conf, G_X, dsda_config_allow_jumping },
   { "OpenGL Show Health Bars", S_YESNO, m_conf, G_X, dsda_config_gl_health_bar },
+  { "All Shootables have Health Bar", S_YESNO, m_conf, G_X, dsda_config_gl_health_bar_shootables },
 
   PREV_PAGE(mapping_settings),
   NEXT_PAGE(tas_settings),
diff --git a/prboom2/src/m_misc.c b/prboom2/src/m_misc.c
index 62b7160a1..b7cc44a72 100644
--- a/prboom2/src/m_misc.c
+++ b/prboom2/src/m_misc.c
@@ -169,6 +169,7 @@ cfg_def_t cfg_defs[] =
   MIGRATED_SETTING(dsda_config_gl_render_fov),
   MIGRATED_SETTING(dsda_config_gl_skymode),
   MIGRATED_SETTING(dsda_config_gl_health_bar),
+  MIGRATED_SETTING(dsda_config_gl_health_bar_shootables),
   MIGRATED_SETTING(dsda_config_gl_usevbo),
   MIGRATED_SETTING(dsda_config_gl_fade_mode),
 
-- 
2.42.1

openSUSE Build Service is sponsored by