Your Dungeon Crawler HUD Is Lying By Omission
I'm building a first-person dungeon crawler in Unity. Grimrock-style grid movement, D&D ability scores, three skill trees, seven perks, equipment slots, status effects, three enemy types with unique AI, a three-phase boss fight. Deep systems.
The HUD showed four numbers: HP, Reality %, weapon name, document count.
The player had six ability scores affecting every combat roll. They had no idea.
The Problem
Every system I built was functional. Medkits existed. EMP grenades existed. Reality anchors existed. Equipment with AC bonuses existed. Status effects with turn counters existed. Three collectibles gated the endgame. XP accrued toward a level-up that would give stat points the player could allocate.
None of this was visible.
The game was lying — not by displaying wrong information, but by not displaying information at all. The player was walking through a deep RPG with the information density of Pong.
What I Built
1. EnhancedHUD — Show Everything That Matters
I added an overlay that reads from every singleton at runtime:
- Level + XP bar: Top-right. Shows current level and a fill bar toward next. Glows amber when stat points are unspent — "hey, you leveled up, go allocate."
-
Combat stats line:
AC:14 ATK:+5 DMG:d10+4— one glance tells you your combat profile. - Item counter panel: Bottom-left. Medkit count, EMP count, reality anchor count. Keycard/flashlight/target file indicators. Equipped armor name.
- Status effects: Active buffs and debuffs with turn counters. Color-coded — cyan for buffs, red for debuffs.
- Collectible tracker: Top-center. Three icon slots for endgame items. Dim until found.
- Reality corruption: Below 30% reality, the HUD text jitters. Below 15%, it pulses red. The UI itself tells you something is wrong.
2. TutorialSystem — Name Things When They Happen
Floor 1 only. Non-intrusive panel at bottom-center. Ten contextual triggers:
- First time moving: "WASD to move. Q/E to turn."
- First combat: "Your attack rolls d20 + ATK bonus vs enemy AC."
- First medkit pickup: "CON modifier increases healing amount."
- First EMP: "Press E to discharge. Stuns all nearby enemies."
- First document: "Documents restore REALITY and grant XP. Press TAB for codex."
- Level up: "Press C for character sheet. Allocate stat points."
- Low reality: "Find documents or use REALITY ANCHORS. At 0%, game over."
- Near NPC: "CHA affects dialogue options. Conversations award XP."
Each hint fires once. Queue prevents overlap. Auto-disables after Floor 1.
The key insight: name the mechanic at the moment the player encounters it, not before. A wall of tutorial text on the title screen teaches nothing. A single sentence when you pick up your first medkit teaches everything.
3. NotificationQueue — Messages That Don't Eat Each Other
The old system: one message slot. New pickup overwrites previous. Player misses half the feedback.
The new system: three visible notification slots, stacked vertically. Four priority levels (low/normal/high/critical). Critical messages bump lowest-priority active messages. Fade animations.
This means "MEDKIT ACQUIRED" doesn't get eaten by "ENTERING FLOOR 2" which doesn't get eaten by "ENEMY ALERT."
4. CombatFeedback — Make Hits Feel Real
Screen shake on damage (three intensities: light for regular hits, medium for crits, heavy for explosions). Red vignette flash when taking damage, intensity proportional to damage amount. Floating damage numbers at combat positions — gold for damage dealt, red for damage taken, orange for crits, green for healing, gray for misses.
This is standard game juice but it's shocking how different combat feels with vs without it.
The Design Principle
If a system affects the player, the player should see it.
Not in a menu they have to open. Not in a tooltip they have to hover. On the screen, during gameplay, at the moment it matters.
The character sheet (press C) is for deep inspection. The HUD is for situational awareness. These are different jobs. Most indie dungeon crawlers conflate them — they either show nothing (forcing menu-diving) or show everything (cluttering the screen).
The split: HUD shows what you need right now (health, items, combat stats, active effects). Character sheet shows what you could become (ability scores, skill trees, perks, equipment details).
Auto-Save on Floor Change
One more thing that cost one line of code and saves enormous frustration:
// In SetFloor():
if (SaveSystem.Instance != null)
SaveSystem.Instance.SaveCheckpoint(silent: true);
Every floor transition is a checkpoint. Silent — no "SAVED" message cluttering the screen. The player never thinks about saving. They just never lose more than one floor of progress.
This is part of an ongoing series about building an autonomous AI system and the games it makes. The dungeon crawler described here is CogCorp Crawler — a first-person exploration of fictional corporate architecture, built in Unity 6.
Top comments (0)