Crimson Desert Combat Overlay

BloodHUD — User Guide

Version 1.05
Named HP bars · scrolling damage numbers · killing-blow pop · live DPS meter · persistent boss log · trash-mob tracking · fully customizable

Contents

  1. What BloodHUD does
  2. Getting started
  3. Preview mode & positioning
  4. Hotkeys
  5. General tab
  6. HP Bars tab
  7. Combat Text tab
  8. Killing Blow
  9. DPS Meter tab
  10. How DPS is calculated
  11. DPS Fine Tuning
  12. Boss Log
  13. Names tab
  14. Troubleshooting & debug logging

1. What BloodHUD does

BloodHUD is an overlay for Crimson Desert. It draws on top of the game window without touching any game files. Three features, each of which you can turn on or off independently:

BloodHUD only reads memory. It does not modify the game. It works for both boss fights and trash mobs.

BloodHUD must run as Administrator. The included launcher and the packaged .exe handle this automatically. If you're running from source, use run_as_admin.bat.

2. Getting started

  1. Launch BloodHUD (EXE or run_as_admin.bat) before or after the game, doesn't matter.
  2. Once the game is running, BloodHUD will detect it and start drawing.
  3. Press Insert to open the settings window. This is where every option in this guide lives.
  4. Adjust whatever you want. All changes apply live — no Save & Close cycle needed. The Save & Close button is only there to close the window cleanly and save your choices to disk so they stick next launch.

A faint "BloodHUD Active / INS for Settings" label sits just above the HP bar stack by default, so you always know the overlay is alive and how to open settings. You can hide it or adjust its opacity on the General tab.

3. Preview mode & positioning

BloodHUD has three movable windows: the HP bar stack, the scrolling-text window, and the DPS meter. To move or resize them you need Preview mode.

Turning Preview on

Preview mode fills each window with fake data so you can see exactly how your settings look, even with the game closed.

While Preview is on

If you move a window somewhere you can't find or off-screen, press Ctrl+Alt+0 to snap all three windows back to their default screen positions.

4. Hotkeys

Every hotkey is rebindable on the General tab. Defaults:

KeyWhat it does
InsertOpen the settings window
HomeQuit BloodHUD entirely
Ctrl+Alt+PToggle Preview mode
Ctrl+Alt+LOpen the Boss Log window
Ctrl+Alt+VCycle DPS meter visibility (Live only → Live + Current → All)
Ctrl+Alt+RReset the current DPS fight
Ctrl+Alt+UResume the most recent timed-out boss fight
Ctrl+Alt+0Snap all overlay windows back to default positions

Rebinding

General tab → Hotkeys section → click Set on the row you want to change, then press the key combo. Clear unbinds it completely — the feature is still reachable through settings buttons.

Ctrl+Alt combos are strongly recommended for anything beyond the settings key. Crimson Desert might claim raw letter keys for its own bindings.
↑ Back to top

5. General tab

Display

SettingWhat it does
Idle timeout (s)If you stop hitting an enemy, their HP bar hides after this many seconds. They're still tracked — land a hit and the bar comes right back.
Show overlay indicatorThe faint "BloodHUD Active / INS for Settings" label above the HP stack. Handy reminder after a fresh install; hide it once you're comfortable.
Indicator opacityHow visible that label is. 0 = invisible, 255 = fully solid. Default is intentionally faint.

Hotkeys

One row per hotkey. See the Hotkeys section above for what each action does.

Preview

Checkbox to toggle Preview mode — same as Ctrl+Alt+P. See Preview mode.

Debug Logging

Off by default. Captures what the scanner sees — every scan, every engagement, every eviction. Leave it off unless you're reporting a bug.

↑ Back to top

6. HP Bars tab

Controls the stack of enemy health bars. The scanner keeps running even when bars are disabled, so the rest of BloodHUD still works.

Basic

SettingWhat it does
EnabledMaster switch for the HP bar stack.
Max barsCap on how many enemy bars appear at once. Most-recently-hit enemies take priority; the rest drop off the bottom.
Dead persist (s)How long a dead enemy's bar sticks around before disappearing. Gives you a beat to read the final state.
Border pxPixel thickness of the black outline around each bar. 0 removes it entirely.

Layout

SettingWhat it does
Bar widthHow wide each bar is. Wider bars leave more room for HP numbers.
Bar heightHow tall each bar is.
Bar spacingGap between bars in the stack.

Appearance

SettingWhat it does
Bar opacityHow solid the colored health fill is. 255 is opaque, 0 is invisible.
BG opacityHow solid the dark backdrop behind each bar is. Lower values let the game show through more.
Name opacityHow solid the nameplate strip is.
HP fontFont size for the HP numbers on the bar.
Name fontFont size for the enemy name.
Nameplate posWhere the name sits relative to the bar: above, below, center (overlaid on the bar), or compact (a small integrated label).
Show HP numbersToggle numeric HP on/off.
Show as %Show HP as a percentage instead of raw numbers. Cleaner if you don't care about exact values.

Colors

Four color pickers. HP-high / HP-mid / HP-low control the bar fill color as health drops through the thresholds below. Text controls the color of both HP numbers and the enemy name on the bar.

Thresholds

SettingWhat it does
High → mid (%)HP percentage where the bar color flips from high to mid. Default 50%.
Mid → low (%)HP percentage where it flips from mid to low. Default 25%.
↑ Back to top

7. Combat Text tab

Scrolling damage numbers that float up from each enemy as you hit them. Three visual tiers — normal, large, crit — based on how the hit compares to your rolling average against that specific enemy.

The crit/large detection is based on your rolling damage average against this specific enemy, not on the game's own crit flag. If you crit a low-HP mob with your baseline attack, BloodHUD may not recognize it; if you land a genuinely huge hit on a tank, it will. A future version will switch to the game's actual crit flag once that's confirmed.

Basic

SettingWhat it does
EnabledMaster switch for scrolling damage numbers. HP bars are unaffected.

Window Size

The SCT window is the invisible rectangle damage numbers live in. Numbers drift up from the bottom and fade at the top edge.

SettingWhat it does
Width (px)Width of the window. Set to 0 to auto-fit based on slot width and max bars.
Height (px)Height of the window. Set to 0 to auto-fit based on drift speed and fade time. Set both to 0 to return to full auto-sizing.
In Preview mode, Shift + right-drag the SCT window to resize it visually instead of fiddling with numbers.

Animation

SettingWhat it does
Drift (px/s)How fast numbers float upward. Higher feels urgent; lower gives you time to read.
Fade (s)How long before each number fully disappears.
Font baseFont size for normal (white) hits.
Font maxMaximum font size, used for crit-tier hits. Bigger feels more impactful.
Combo maxMax font size for stacked combo hits. Kept smaller than crit so you can tell them apart.
Stack (ms)Hits on the same enemy within this many milliseconds merge into one combined number. Set to 0 to show every hit separately.
Slot widthHorizontal offset between different enemies' damage columns, so hits on adjacent mobs don't overlap.
Crit scaleHow big a crit number pops out at. 2.4 means it starts 2.4× normal size and shrinks down.
Settle (s)How fast the crit pop shrinks back to normal size. Lower is snappier.
Font familyFive options: Consolas (monospace, tech feel), Verdana (clean humanist sans), Arial Black (heavy and readable), Georgia (classic serif), Trebuchet MS (friendly modern sans).

Hit Detection

Four settings that control when a hit is flagged as "large" (yellow) or "crit" (orange + pop). Detection uses your rolling damage average against each specific enemy — so a hit that's big on a goblin might not register against a boss, and vice versa.

SettingWhat it does
EMA alphaHow fast the rolling average adapts. Higher means recent hits matter more; old hits get forgotten faster. 0.35 is a solid middle ground.
Baseline dmgStarting damage estimate before you've hit the enemy yet. Too high and early hits look normal; too low and the first hit always crits.
Large ×A hit has to be this many times bigger than the rolling average to turn yellow. 1.8 = 80% above average.
Crit ×A hit has to be this many times bigger than the rolling average to turn orange and pop. 3.0 = triple your average — only the big ones qualify.

Colors

Three pickers — Normal, Large, Crit. One color per tier.

Killing Blow

A special effect when the hit you just landed finishes an enemy off. Separate from the normal damage text — it always spawns its own standalone number, never merges into a combo.

SettingWhat it does
EnabledMaster switch for the killing-blow effect.
Dmg font sizeFont size for the final damage number.
Dmg colorColor of the final damage number. Default red.
Hang time (s)How long the killing-blow text lingers before fading out. Longer than regular hits.
Drift speedHow fast the killing-blow text drifts upward. Default 60 px/s — slower than regular hits for emphasis.
Show labelToggle the "KILLING BLOW" text that appears above the damage number.
Label font sizeFont size for the "KILLING BLOW" label.
Label colorColor of the "KILLING BLOW" label. Default blue.
↑ Back to top

8. DPS Meter tab

A floating, always-available damage-per-second meter. It tracks both boss fights and trash-mob encounters automatically. You don't configure which is which — BloodHUD decides based on the enemy's max HP.

The meter has three regions, stacked top to bottom:

KILL rows (green) are fights you finished. T/O rows (red) are fights that timed out because you stopped hitting the enemy. Player deaths are not logged.

Controls row (top of tab)

ButtonWhat it does
ResetEnds the current fight immediately without logging it. Use when the meter gets stuck on the wrong target. Same as Ctrl+Alt+R.
Resume BossReattaches to the most recent boss fight if it timed out but combat picks back up. Same as Ctrl+Alt+U.
Boss LogOpens the persistent Boss Log window — saved boss kills and timeouts across all sessions. See Boss Log.
Clear SessionWipes the in-meter Session Log. Does not touch the persisted Boss Log file. Clears automatically on every relaunch anyway.

Basic

SettingWhat it does
EnabledMaster switch for the meter. Fights still track internally when disabled — the window just hides.
Session rowsHow many completed fights the Session Log keeps visible in the meter. Older entries drop off. The persisted Boss Log keeps up to 30.

Window

The meter auto-sizes every frame based on which regions are visible and your chosen font sizes. There are no width/height controls — it fits itself. Shift + drag to reposition.

SettingWhat it does
Font familyFour choices: Cambria (matches the in-game serif closely), Palatino Linotype (warmer and wider), Constantia (formal ClearType serif), Consolas (monospace — best for tight numeric column alignment).
BG opacityHow solid the meter background is. Lower values let the game show through more.
BG colorBackground fill color. Default black.

Components

Every piece of text in the meter has its own font size and color. Arranged as rows: the spinbox sets the size, the button opens a color picker.

ComponentWhat it is
Region headerThe "LIVE DPS" / "CURRENT FIGHT" / "SESSION LOG" headings. All three share the same size and color.
aDPS outputThe big live aDPS number — the most prominent reading. The small "aDPS" caption under it inherits this color.
Fight DPSThe smaller Fight DPS number under the aDPS. Its "Fight DPS" caption inherits this color.
CaptionsFont size for the small "aDPS" and "Fight DPS" labels under the big numbers. Color follows the corresponding number.
Current FightFont size and color for the Current Fight rows (Boss / Duration / Total / Peak).
Column headerThe "TYPE DUR aDPS FIGHT TOTAL PEAK" column labels above the session log.
KILL rowFont size and color for completed kills in the Session Log. Default green. T/O rows share this font size for column alignment.
T/O rowColor only for timed-out fights. Default red. Size is shared with KILL rows.
Boss labelFont size for the boss-name (or "Trash Mob(s)") label above each session entry. Color stays auto-generated per boss (each named boss gets a unique, stable color).

Visibility

Controls what the meter shows. The visibility mode and the fade-when-idle toggle are independent — they combine.

Display modes (pick one)

Cycle through these with Ctrl+Alt+V without opening settings.

Fade when idle (separate toggle)

Applies on top of whichever display mode you picked. When enabled, the meter smoothly fades to a small location marker after a period of inactivity. Any hit snaps it back to full opacity instantly.

SettingWhat it does
Fade when idleEnable the idle fade. Off by default.
Fade after (s)Seconds of no hits before fading starts. Default 60.
Fade length (s)How long the fade animation itself takes. Default 1 second.
↑ Back to top

9. How DPS is calculated

BloodHUD shows two damage-per-second numbers at once: a big aDPS number and a smaller Fight DPS number below it. They measure different things on purpose.

Fight DPS — the honest average

Total damage you've dealt in this fight, divided by how long the fight has been going. Simple wall-clock math.

Fight DPS = total_damage ÷ (now − fight_start)

This is what goes in the history log. It never lies and never moves fast — it's the steady career number for the fight.

aDPS — the live "how hard am I hitting right now" number

This is where things get interesting. aDPS has two different display models you can pick between in Fine Tuning: bedrock and pulse. They answer different questions.

Bedrock (default)

Question answered: "Where's my sustained floor, and how much am I currently lifting above it?"

Builds a permanent career baseline as the fight progresses. Every hit contributes to that floor and raises it a little. Bursts of big damage lift the display above the floor, then decay slowly back down.

Good for long fights where total output matters. Your floor only goes up; it never drops.

Pulse

Question answered: "What's my rate right now, in this moment?"

A pure rolling window. Only damage from the last few seconds counts toward the number. Old hits drop off once they age past the window.

Good for feeling each phase of a fight distinctly — a lull really does pull the number down, and a burst really does spike it up.

The math, plain-language

Common to both modes

Two intermediate values get computed every frame:

# The rolling short-term rate
instant = damage_in_last_window ÷ time_in_last_window

# Lifetime floor (used by bedrock, logged by both)
career = lifetime_active_damage ÷ lifetime_active_time

"Active" time only counts the gaps between hits that were short enough to still feel like combat (see aDPS idle in Fine Tuning). A five-second pause doesn't get counted as active combat time — which is why running away for a bit doesn't tank your aDPS.

The envelope follower

Both modes pipe their target value through the same smoother so the number doesn't jitter. It climbs fast when you hit harder and falls slowly when you ease off:

# Asymmetric smoothing — fast up, slow down
displayed moves toward target
    rising:  uses attack τ (fast, 2.5 s by default)
    falling: uses decay τ (slow, 45 s by default)

Bedrock specifically

target = max(0, instant − career) # the burst premium
aDPS = career + (smoothed target)

Reads as: your career floor, plus however much your current burst is lifting you above it, smoothed so it doesn't twitch. After a fight settles, the premium fades and the display collapses back down to your career floor.

Pulse specifically

target = instant
aDPS = smoothed target

No career floor. The display just follows the rolling-window rate through the same envelope. Peaks persist because the decay τ is long; lulls eventually drag the number down all the way to zero if you stop hitting things.

Both modes freeze the aDPS display after a gap larger than the aDPS idle threshold (2 s default). This keeps the number from slowly creeping down during brief pauses — it just holds where it was until you resume combat.
↑ Back to top

10. DPS Fine Tuning (Advanced)

Collapsed by default. Click Show advanced tuning on the DPS tab. All defaults work well; touch these if you want to shape the behavior.

Wrong values here can make the meter display nonsense (huge spikes, numbers that never move, or frozen readings). Hit Reset after any change so the active fight picks up the new settings cleanly.

aDPS idle (s) — default 2.0

The gap between hits that still counts as "active combat." If you pause for longer than this, the aDPS number freezes on screen and won't move until you land your next hit. Raising this makes the meter more forgiving of longer pauses (dodging, repositioning, drinking potions). Lowering it makes the meter more reactive but more twitchy.

Idle T/O (s) — default 30.0

Boss fights only. If you go this long without hitting the boss, the fight ends automatically and logs as T/O. Use Resume Boss or Ctrl+Alt+U to reattach if you were just repositioning. Shorter values log faster; longer values wait around in case you return.

aDPS model — bedrock or pulse

See How DPS is calculated above. This is the switch between the two display philosophies.

aDPS window (s) — default 6.0

The rolling window used by the instant calculation. In pulse this is the whole measurement window: only damage in the last 6 seconds contributes. In bedrock this is the burst-detection window: only spikes within the last 6 seconds can lift the display above the career floor. Wider = slower and smoother; narrower = faster and spikier.

Attack τ (s) — default 2.5

How fast the displayed number climbs when you start hitting harder. Smaller = snappier response to bursts. Larger = the display "waits to be sure" before climbing. If you feel like the meter lags behind reality during hot streaks, lower this.

Decay τ (s) — default 45.0

How slowly the number falls off during lulls. This is intentionally long so a brief pause doesn't nuke your reading. If you want the meter to "forget" bursts faster and drop back down closer to current output, lower this. If you want impressive peaks to linger, raise it.

Trash T/O (s) — default 10.0

Trash-mob encounters only. How many seconds of no hits before the trash encounter wraps up and logs to the session. Short values give you clean, separate entries per camp clear; longer values let natural combat breaks stay inside one encounter.

Trash HP floor — default 30,000

The raw max-HP cutoff for what counts as a trash enemy. Divide by 1,000 for displayed HP (so 30,000 = 30 HP as shown in-game). Enemies below this threshold still get HP bars but are excluded from the DPS meter, so tiny critters and non-combat NPCs don't pollute your log.

↑ Back to top

11. Boss Log

A persistent record of every boss fight across all sessions. Survives relaunches. Opened from the Boss Log button on the DPS tab or with Ctrl+Alt+L.

Each entry shows the same columns as the session log on the meter: TYPE DUR aDPS FIGHT TOTAL PEAK BOSS. KILL rows are green; T/O rows are red.

Managing entries

Trash-mob encounters are not saved to the Boss Log. They appear in the session log on the meter during the session and disappear when you close BloodHUD. The Boss Log is bosses only, up to 30 entries.

12. Names tab

How enemies are labeled on their HP bars. Pick one of four pools.

Name Pool

ModeWhat it looks like
Serious~50 fantasy names. Makes the overlay feel like it belongs in the world. Safe for streaming.
SillyBureaucratic and casting-call names. Enemies feel like they showed up, filed the paperwork, and are now professionally obligated to fight you.
ExplicitStrong profanity. Cathartic in combat. Prompts for confirmation the first time you pick it because the names are genuinely offensive, not just edgy.
Custom prefixYou pick the prefix. Enemies are numbered sequentially ("Enemy 1", "Enemy 2", etc.). Good for clean labeling or speedruns.

The Custom prefix text field only activates when Custom prefix mode is selected.

Duplicate Labels

What happens when two enemies on screen would share the same name:

↑ Back to top

13. Troubleshooting & debug logging

Nothing shows up when I launch the game

HP bars appear but a specific boss doesn't get a bar

BloodHUD identifies bosses by matching their max HP against a known list. If the game ships a balance change and a boss's HP shifts, that boss may temporarily fall off the list until BloodHUD is updated. This is the most common cause when a boss bar is missing.

The DPS meter seems stuck on the wrong enemy

Click Reset on the DPS tab, or press Ctrl+Alt+R.

A boss fight ended as T/O but I want to keep going

Hit it again, then press Resume Boss or Ctrl+Alt+U to reattach the meter to that fight.

Windows are offscreen or I can't find them

Ctrl+Alt+0 snaps everything back to default positions.

Collecting a debug log for a bug report

  1. General tab → check Enable debug logging (this session only).
  2. Reproduce whatever's broken.
  3. Click Open log folder. Grab the most recent file in _ref/.
  4. Attach it to your bug report. The log captures exactly what the scanner saw, which makes fixing the problem far faster.
Debug logging is never persisted. Every launch starts with it off. This is deliberate — logs are for active troubleshooting, not background noise. Old log files are overwritten once the session-keep count is reached, so back up anything you want to hang onto.

BloodHUD v1.05  ·  Crimson Desert Combat Overlay  ·  Read-only memory overlay, no game files modified