Jump to content
The Dark Mod Forums

Recommended Posts

Posted

Preface

HUD-elements are often a technical necessity, to convey important information to the player that would otherwise not be available to them. A problem with such HUD-elements is that they don't belong to the virtual world. They make it painfully clear to the player that they are just playing a game, thereby reducing immersion.

There are many genres, where you need to have such information available at all times, think fast-paced first person shooters, Mobas, or strategy games. However, especially for genres featuring free exploration, that information is simply not needed at all times. Some games (e.g. Dead Space or Metro series) have gone to extreme lengths to completely eliminate HUD elements by integrating all relevant information in the virtual world. While this is of course the most immersive approach, it is also the hardest to implement. A much easier solution is to rely on a dynamic HUD, where certain HUD elements are displayed depending on context.

In recent years, I have become hyper focused on immersion. I can't stand a cluttered HUD ("sensory overload") or a map full of quest pointers ("feels like work"). I want to immerse myself in the world, not tick of pointers on a map. About a year ago, having played a ton of WoW in my youth, I played the alliance fraction on WoW Classic for the first time. Via interface addons, I had my UI completely disappear during exploration, but when I entered combat or clicked on an enemy, the UI would become visible. The minimap would generally only become visible during mouse-over. The same goes for non-combat-relevant action-bars. I paired that with a text-to-voice addon for the quest texts and some nice dynamic camera addons that would zoom in on characters when talking to them. Of course I also did not use any quest-GPS addons, so that I actually had to pay attention and search the world for the quests. It was super immersive and a glorious experience reminiscent of the 2004 release. 🙂 So naturally, having played a lot of TDM recently, I am thinking about how we could improve our dynamic HUD in TDM for immersion-seekers.

Current State of Dynamic HUD in TDM

The HUD of TDM already has quite some dynamic elements

  • Healthbar only shows if we are not at 100% health
  • Breathbar only shows if we are not at 100% breath
  • Weapon only shows if a weapon is selected and ammo text only shows if ammo is relevant to that weapon
  • Inventory-Icon and -text only shows if an item is selected
  • Pickup- and object-update texts are only displayed momentarily

Ideas for More Dynamic HUD Elements in TDM

So basically, with every HUD element, we should ask ourselves the following questions: 

  • Added information: Does this HUD element actually convey any information?
  • Relevant when: In what situation is that information relevant?

Let's start! (Please note that all proposals below shall be made optional under some "tdm_dynamic_hud"-cvar or something like that, so I am not planning to take anything away from anyone)

I will update this list of ideas as we go.

  • Weapon HUD
    • Blackjack and Sword
      • Added information: None.
        • The player can see the 3d model of both weapons, so the HUD does not add any information.
      • Relevant when: Never
      • Proposal: Remove completely --> Very easy (already tested)
    • Bow and arrows
      • Added information: Arrow type and amount.
        • Sadly, the 3d model does not show the type of arrow unless the bow is drawn. So, the icon and weapon text add information. Also, there is the ammo display.
      • Relevant when: Player is equipping the bow
      • Proposal: Investigate if we can alter the non-drawn bow model such that it already shows the arrow type. If that works nicely, remove arrowtype and arrow icon from HUD and potentially move the ammo display around and make it bigger. I would need support from a 3d modeler here!
      • Proposal: Consider showing the arrow amount only briefly when the weapon is selected (and/or when the player presses "R"?) (and/or ammo amount changes) and then fade it out again.
  • Healthbar
    • Added information: Health
    • Relevant when: Player is losing health. Player is likely going to loose health, e.g., when in combat or when breath bar is close to zero. Player is preparing to enter combat. Player has very low health
    • Proposal: Briefly show after losing health; Show when equipping a weapon (possibly limit to sword?); show when breath is close to running out; show when health is below some threshold (like 20%)
  • Breathbar: Already very dynamic. No action needed!
  • Inventory HUD (Not the inventory grid)
    • Compass
      • Added information: direction
      • Relevant when: When player equips it. Must not fade-out unless a different item is selected.
    • Other items:
      • Added information: Selected item
      • Relevant when: Only during selection (or when player forgot which item is selected) or when the item can be used with the world
      • Note: I had added the tdm_frob_item_selects_item to prevent items being selected when picking them up, thereby eliminating the respective HUD annoyance. However, I found that frequently, I wanted to use the picked up item right away (a readable, a key, etc.), so this approach is not working well.
      • Proposal: Briefly show after selecting an item, then fade-out. Show item when it can be used on a world entity. For picking up items, consider selecting, but not showing them, so player can use them right away without HUD pop-in. When HUD is not shown, pressing next or prev item should not go to next / prev item, but just show the HUD element.
    • Are there maybe other types of inventory items that need special treatment?
  • Shouldering HUD
    • Added information: Shouldering state
    • Relevant when: Always when shouldering a body
    • Proposal: It would be awesome if we could actually have the 3d model shouldered in view. Then we could get rid of the HUD, but of course, this would be very hard to achieve.
  • Lightgem
    • Added information: To some degree, visibility of player
    • Relevant when: sneaking about or running to hide (so basically always)
    • Discussion: It is actually debatable, how much information is really added, because the player can already tell how well illuminated they are just by looking at the environment. I would say minimalists simply disable the lightgem and all others keep it on all the time.
  • Crouch-intent indicator
    • Added information: Crouch-intent, i.e., while it is impossible to change crouched-state, the crouch-state that will be assumed once crouched-state is unlocked again.
      • Current crouch state can be seen by looking at the 3d world. No indicator needed for that. 
    • Relevant when: Only while crouched-state is locked / cannot be changed.
    • Proposal: Only show when crouched-state and crouch-intent differ?
  • Any other UI elements I forgot?

Another aspect of dynamic HUDs is HOW visibility is controlled. HUD elements might pop-in instantly or gradually fade in and out, like our FrobHelper. I would say, having HUD elements fade in and out looks generally more appealing, but I would need some advice on how to best control transparency. Should transparency be handled by the GUI scripting or dictated by the engine like in the case of the FrobHelper? What makes most sense here?

  • Like 3
Posted

It has become a habit for me to always press the "hide inventory item" key (in Thief and TDM) after interacting with the inventory. So you're proposal regarding that sounds good to me.

But I also have keys setup to select certain items (flashbombs for example). In this case I would want them on screen. 

That means: Auto hide items when scrolling, or on pickup. Don't hide when explicitly selected by a key. Is it possible to implement it that way?

  • Like 1
Posted
58 minutes ago, STiFU said:

Briefly show after selecting an item, then fade-out.

It should show when it can interact with something.

So when you pick up a key, it fades away , but when you come close to a door or lock it apears again.

1 hour ago, STiFU said:

Breathbar: Already very dynamic. No action needed!

Well it could be interesting if you could figure out yourself how long breath lasts.

1 hour ago, STiFU said:

Briefly show after losing health; Show when equipping a weapon (possibly limit to sword?); show when breath is close to running out.

I think it should generally also show up when there's less than 20% left. you can also take falling damage and then die because you didn't know your health. Although this could be considered immersive.

Loot details should only be shown shortly on pickup.

Idea: Lightgem not showing when not in a hostile enviroment. When you steel something in a non-hostile enviroment it's usually possible to see that you can be seen stealing or not. When you steal and they notice something got stolen (so they become hostile) your lightgem apears.

  • Like 1
Posted

For the bow, you'd need to slightly adjust the angle it is being held at (when not drawn) in order for the arrow tip to be seen. I agree, that would be much nicer than seeing the hud element.

  • Like 1
Posted
54 minutes ago, Baal said:

That means: Auto hide items when scrolling, or on pickup. Don't hide when explicitly selected by a key. Is it possible to implement it that way?

Might be possible, I'd have to check, but on the other hand: if you press your key for flashbomb, it should briefly show in the inventory. If it then fades out, it would still be usable and you still know that it is selected, so I think the fade out would be fine. 

 

34 minutes ago, datiswous said:

should show when it can interact with something.

Might be doable by checking the canBeUsedByEntity. I'll add it to the list for consideration.

 

38 minutes ago, datiswous said:

it should generally also show up when there's less than 20% left

Good idea! 

38 minutes ago, datiswous said:

Idea: Lightgem not showing when not in a hostile enviroment. When you steel something in a non-hostile enviroment

I have added a section on lightgem above. I am not sure it will be worth the effort.

  • Like 1
Posted

Please fix this existing usability issue first:

When you drop or use an item and this item is the last one in the stack whatever random item that is in the queue gets auto selected.

  • Drop a key = here is the compass for you
  • Drink a potion = perhaps you need a mine?
  • Launch a flashbomb = time to read this note
  • ...
  • Like 2
  • Haha 2

TDM_Modpack_Thumb_51.png.748522d7ee2ef4ae4c47f52887da2c66.png

Posted

In general any changes to HUD behavior should be optional, because I really don't have problem with the current configuration, thus it's totally subjective how HUD should work.

Posted (edited)

Are there really people who want to hide the lightgem? It is definitely not always obvious if you are fully hidden or not.

Fading out the selected inventory items sounds good to me. Like @Baal, I often press the key to hide the inventory item. Would be great if it worked like in the original Thief games (fades out after some time).

Healthbar is good how it is right now (not present when at full health, present when not).

Anything else is good how it is right now as well, in my opinion.

Edited by chakkman
  • Like 1
Posted

I am not sure if this is in the scope of your proposal, but it would be really handy to have some script events that allow mappers to hide the lightgem (for purposes of fade-ins, cinematics, stuff like that) or unshoulder bodies, hide weapons, etc, that way they dont have to resort to messing with cvars or using very complex and finicky scripting based on hiding gui layers.

  • Like 1
Posted
2 hours ago, I.C.H.I. said:

In general any changes to HUD behavior should be optional, because I really don't have problem with the current configuration, thus it's totally subjective how HUD should work.

I will answer by quoting myself. 😉 

6 hours ago, STiFU said:

(Please note that all proposals below shall be made optional under some "tdm_dynamic_hud"-cvar or something like that, so I am not planning to take anything away from anyone)

 

2 hours ago, chakkman said:

Are there really people who want to hide the lightgem? It is definitely not always obvious if you are fully hidden or not.

I play without lightgem almost exclusively and I know I am not alone in that. My estimate of how hidden I am is maybe not 100% accurate, but sufficiently good and not having the lightgem show actually adds to the tension. But as I said, either you need the lightgem all the time or never at all, so there is no need to make anything dynamic about it.

 

3 hours ago, snatcher said:

Please fix this existing usability issue first:

When you drop or use an item and this item is the last one in the stack whatever random item that is in the queue gets auto selected.

  • Drop a key = here is the compass for you
  • Drink a potion = perhaps you need a mine?
  • Launch a flashbomb = time to read this note
  • ...

Sure, we can fix that as well. Should be really simple.

  • Like 1
Posted
7 hours ago, STiFU said:

I have added a section on lightgem above. I am not sure it will be worth the effort.

I should add that my idea is only relevant for missions having this feature (fm Displacement is an example). I guess you could already script to remove the lightgem in non-hostile environments in such missions. I wonder if only the lightgem gets removed, because I think it also removes the healthbar and breathbar, but I could be wrong.

Posted
2 hours ago, datiswous said:

I should add that my idea is only relevant for missions having this feature (fm Displacement is an example). I guess you could already script to remove the lightgem in non-hostile environments in such missions. I wonder if only the lightgem gets removed, because I think it also removes the healthbar and breathbar, but I could be wrong.

Healthbar and breath bar are definitely not removed, but the crouch-intent indicator is.

Posted

I was curious to try all this out, so I had a go at it at least on code- and GUI-side. I am quite happy with the result.

I have implemented dynamic HUD rules for the WeaponInventory, ItemInventory and HealthBar. Here are the current dynamic HUD rules, which are highly configurable (see cvars below):

Spoiler
  • WeaponInventory
    • DynHUD_WeaponRule1: Never show for weapons without ammo (cvar)
    • DynHUD_WeaponRule2: Briefly show when selecting a weapon not qualifying for rule 1
    • DynHUD_WeaponRule3: Briefly show when hidden and next/prev weapon is pressed and a weapon is selected that does not qualify for rule 1. Skip actually switching weapons. (cvar)
    • DynHUD_WeaponRule4: Briefly show when ammo changes and respective weapon is selected (cvar)
    • DynHUD_WeaponRule5: Show while a temporal weapon effect is active (e.g. holy water) -> Ensured on assets side
  • ItemInventory
    • DynHUD_ItemRule1: Briefly show when selecting an item (compass will not fade out because Inventory_HUD_Opacity was simply not defined there)
    • DynHUD_ItemRule2: Briefly show when hidden and next/prev inv item or next/prev inv group is pressed. Skip actually switching items. (cvar)
    • DynHUD_ItemRule3: Briefly show when picking up a new item (cvar)
    • DynHUD_ItemRule4: Show when item can be used with world entity
    • DynHUD_ItemRule5: Briefly show when using an item
  • HealthBar
    • DynHUD_HealthRule1: Briefly show after taking damage
    • DynHUD_HealthRule2: Show when equipping a weapon intended for combat (special cases: water arrows with holy water flask, rope arrow)
    • DynHUD_HealthRule3: Show when breath is running out (cvar)
    • DynHUD_HealthRule4: Show when health is below a certain threshold (cvar)
    • DynHUD_HealthRule5: Show while healing

I found that any dynamic modulations of visibility did not work well for the crouch-intent indicator due to the attached scripts, so I decided to ditch that idea. My reasoning here was that people playing with lightgem probably don't mind the crouch-intent indicator, and people playing without lightgem would not want the crouch-intent indicator displayed on its own anyway.

Here are the cvars:

Spoiler

tdm_dynamicHUD                   If enabled, the HUD-elements will hide                                                        
                                 depending on context.                                                                         
tdm_dynamicHUD_fadein_duration   The fade-in duration for the dynamic hud in                                                   
                                 ms.                                                                                           
tdm_dynamicHUD_fadeout_delay     The fade-out delay for the dynamic hud in                                                     
                                 ms.                                                                                           
tdm_dynamicHUD_fadeout_duration  The fade-out duration for the dynamic hud in                                                  
                                 ms.                                                                                           
tdm_dynamicHUD_healthBar         Displaying the healthbar.                                                                     
                                  0 -- regular static                                                                          
                                  1 -- dynamic                                                                                 
                                  2 -- Hide always                                                                             
tdm_dynamicHUD_healthBar_airThreshold If air is below this threshold, the health                                               
                                 bar will not fade out anymore. Air is in                                                      
                                 tics, see pm_airTics.                                                                         
tdm_dynamicHUD_healthBar_healthThreshold If health is below this threshold, the                                                
                                 health bar will not fade out anymore.                                                         
tdm_dynamicHUD_itemInventory     Displaying the item inventory gui                                                             
                                  0 -- regular static                                                                          
                                  1 -- dynamic                                                                                 
                                  2 -- Hide always                                                                             
tdm_dynamicHUD_itemInventory_nextPrevOverride If enabled and inventory HUD is currently                                        
                                 not shown, the inventory hud will show on                                                     
                                 next/prev item/inventory group press instead                                                  
                                 of switching item.                                                                            
tdm_dynamicHUD_itemInventory_showName If disabled, the item name will not be                                                   
                                 displayed.                                                                                    
tdm_dynamicHUD_itemInventory_showOnPickup If enabled, the inventory hud will briefly                                           
                                 show after picking up an item.                                                                
tdm_dynamicHUD_weaponInventory   Displaying the weapon inventory gui.                                                          
                                  0 -- regular static                                                                          
                                  1 -- dynamic                                                                                 
                                  2 -- Hide always                                                                             
tdm_dynamicHUD_weaponInventory_nextPrevOverride If enabled and weapon HUD is currently not                                     
                                 shown, the weapon hud will show on next/prev                                                  
                                 weapon press instead of switching weapon.                                                     
tdm_dynamicHUD_weaponInventory_showBowOnly If enabled, the weapon hud will only show                                           
                                 when equipping the bow.                                                                       
tdm_dynamicHUD_weaponInventory_showName If disabled, the weapon name will not be                                               
                                 displayed.                                                                                    
tdm_dynamicHUD_weaponInventory_showOnAmmoChange If enabled, the weapon hud will show                                          
                                 whenever the ammo of the currently selected                                                   
                                 weapon changes.                                                                               

And here is a short demonstration video of the result. Of course, without proper explanation of what buttons I press and what I am demonstrating in any given moment, this video might be a bit hard to follow. I guess a better look at this will only be possible in the first dev build after 2.14 release. In the video, at first I demonstrate the dynamic hud of the weapon inventory, then the health bar, then the item inventory and finally, the health bar again due to drowning.

 

Help Needed: Show Arrow Model on Equipped Bow

Even though I am fairly happy with the result, I would still prefer if we could have the actual arrow models displayed somehow when equipping the bow (before drawing it). Ideally, the arrow would be attached to the idle position of the bow as if the thief was holding both bow and arrow in the left hand, as marked in red.

image.thumb.jpeg.b0b1a5ce8db65a0bdb691ebda65ed31b.jpeg

Another option would be to take one of those first frames of the bow drawing animation that already shows the arrow, but could still be considered for an idle position. Of course, we would have to slow down the remainder of the bow drawing animation then, so that the shots-per-minute of the bow still remains the same.

image.thumb.jpeg.864f6c6a87c68d918fd24e6e261ee61c.jpeg

I wonder if there are still any modelers around, who would be interested in undertaking this task. Maybe it could even be solved via scripting only?

(Just pinging some people, in case anybody knows someone, who might be able to support. @Arcturus, @kingsal, @Amadeus, @Dragofer)

  • Like 2
Posted (edited)

You're an absolute madman for playing this game with the lightgem, compass, and crouch intent indicator turned off, but I like the hud fadeouts for item/arrow counts. The second screenshot, with the bow's chosen arrow visible on screen by physically being "in the world" and the bow being held at an angle while idle, also looks good to me!

As part of this change, I would appreciate the draw/sheathe first person animations sped up much more than they currently are. The advantage of ui elements is that they're textures that can snap on or off in one frame, so cycling through them has a gamefeel component. Waiting for the drawing/sheathing is rather sluggish by comparison, and this will be exaggerated by the textures in the corners becoming less important for communicating the state of the game. I imagine that was deliberate on the part of the original designers/animators, but could be adjusted if y'all go all the way with this idea.

Edited by chumbucket91
Posted
On 2/11/2026 at 11:04 PM, chumbucket91 said:

You're an absolute madman for playing this game with the lightgem, compass, and crouch intent indicator turned off, but I like the hud fadeouts for item/arrow counts.

Hehe, you should give it a shot. It creates some extra tension and it actually works very well without seeing it. As for the compass, I do use it and it also does not fade out, if you select it in the inventory.

Posted
On 2/10/2026 at 11:27 PM, STiFU said:

I would still prefer if we could have the actual arrow models displayed somehow when equipping the bow (before drawing it).

You can run around with bow out, so it seems logical to me to draw arrow right before shooting.

To me this is a bigger issue: https://bugs.thedarkmod.com/view.php?id=6566

It's only a model...

Posted
4 hours ago, Arcturus said:

You can run around with bow out, so it seems logical to me to draw arrow right before shooting.

To me this is a bigger issue: https://bugs.thedarkmod.com/view.php?id=6566

That is indeed something that has been bothering for some time, too. 

However, I don't think there's anything illogical about readying your arrow at the same time as you ready your bow. For one thing, it is extremely common in other video games, too. Two, historically, archers would actually hold multiple arrows in their non-drawing hand together with the bow, so they can draw the next arrow faster. That is in line with the arrow position marked in red above. Three, having arrows on your back is a movie trope. Getting an arrow this way is extremely cumbersome and would take awfully long, so readying the arrow beforehand totally makes sense.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...