Repository navigation
Kill feed: outline the names and put boxes behind lines or names (part of #562) - #1000
Merged
Merged
Conversation
New ds_hud_deathmsg subcommands, all off by default: - outline <0..4> [r g b] [alpha]: each name drawn again at every offset within N px before the coloured pass (8 neighbours at 1 px, a disc beyond), through font's surface calls or the engine's own call. - background <alpha> [r g b] [padding]: one translucent box per line. - background team <alpha> [padding]: a box per name in a quarter of its team colour; background allies|axis <r g b> sets a team's own. - outline default / background default turn them off. The boxes are GL quads from opengl32.dll's exports (pfnFillRGBA adds its colour, so it cannot darken). Settings are atomics read on the engine thread; the right margin grows by the outline or the padding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`background default` turned the boxes off but kept `background allies|axis` colours, so a later `background team` came back with an old cfg's colours. It now goes back to the shades too, as its usage line says. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-562' into feat/killfeed-outline-background-562
Owner
Author
|
Review pass (unattended): merged Fixed
Checked, no bug found
Tests: In game: POST only, 2560x1440,
Screenshots are in |
This was referenced Oct 25, 2026
…background-562 # Conflicts: # docs/dodstudio_commands.md # goldsrc-hooks/src/deathmsg.rs # goldsrc-hooks/src/deathmsg/scale.rs # goldsrc-hooks/ui/Commands.txt
…(part of #562) One parser (deathmsg/colour.rs) for every colour argument of ds_hud_deathmsg: outline, background and background allies|axis. Six hex digits work without the #; three need it, since 255 alone is a channel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
Author
Final pass (agent)
Screenshots: 🤖 Generated with Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release note: New: the kill feed's names can have an outline (
ds_hud_deathmsg outline 2) and a see-through box behind each line or each name (ds_hud_deathmsg background 150,background team 200), so they stay readable over busy walls; colours can be typed asr g bor as hex, like#0a286e.Part of #562
The user looked at the screenshots and approved the looks (
outline 2andbackground 150), the options as built, and the Allies team-box default (a quarter of the team colour).What
New
ds_hud_deathmsgsubcommands, all off by default:outline <0..4> [colour] [alpha]: draws each name again at every offset within N px, before the coloured pass. At 1 px that's the 8 neighbours; wider is a filled disc (68 extra draws a name at 4 px). It works with the game's font and withfont. With the game's font the outline is always opaque, becausepfnDrawConsoleStringtakes no alpha.background <alpha> [colour] [padding]: one translucent box per line, from the killer's name to the victim's. Default colour black, padding 4.background team <alpha> [padding]: one box behind each name, in a quarter of that name's team colour. The icon gets no box.background allies <colour>/background axis <colour>: that team's own box colour (... defaultgoes back to the shade).outline default/background default: off.r g b(each 0..255) or one hex word:#0a286e, the short#0af(each digit doubled), or six digits without the#(0a286e).All of it works with both kill-feed layouts, the game's (
layout default) and #1023'slayout even.How
font's redirected text calls andscale's redirectedSPR_DrawHoles, which see each line inDraw's order.Drawsteps by: the icon rect the line-start stub reads, which is the even layout's 26-row box (timesscale) when that layout is on. So the boxes follow the even layout's slots with no extra code.opengl32.dll's exports (as inhud_sprite_edges.rs), so there are no engine offsets and both builds are the same. Every GL state the quad touches is put back.pfnFillRGBAwas no use: it adds its colour (GL_ONE), so a dark box comes out as nothing.goldsrc-hooks/src/deathmsg/backdrop.rs(drawing, settings) anddeathmsg/colour.rs(the one colour parser, with unit tests).Decisions
GetClientColor(client+0x2ad90, the same on both builds). Allies (team 1) is(0.3, 0.4, 0.3), Axis (team 2) is(1.0, 0.25, 0.25). The British are team 1 on a British map, sobackground alliescovers them. Any other colour (spectator, HLTV) always gets its own quarter shade.Drawsteps lines by exactly their height.#rrggbb,#rgbandrrggbbare accepted. A barergbis not:255alone is a channel. Six characters are never a 0..255 number, sorrggbbwithout#is unambiguous. Inbackground <alpha> [colour] [padding], one plain number is the padding and one hex word is the colour. Replies and the status line still print colours asr g b.#in the console and in cfgs: the engine's tokenizer splits only at whitespace, quotes,:and{ } ( ) ' ,, and cfg comments start with//, so#0a286earrives whole. Tested in game both ways (below). Studio'scfg_scanand the Commands tab's suggestions only read the command name, so they don't look at arguments.scale/font, these are console subcommands set from a cfg (e.g. the WSOD25 movie cfg). There is no Studio-side setting.console_commands_data.jswas regenerated (console_names.py --pre --post --hlae) and came out unchanged.Commands.txt's usage line fords_hud_deathmsglists the new subcommands and the hex form.Merged with dev
devbrought #1023 (layout even|default), #1026 (replace) and #998's right margin into the same code. Kept all of them: the status line shows layout, outline/background and replace; "is the layout ours" counts the even layout and the boxes; the line box goes down before the even layout's atlas icon draw. Other open PRs touching the same files: #1044, #1040, #906, #885, #882 and #758 editdocs/dodstudio_commands.mdandCommands.txt(other commands' lines). None touch the kill-feed code.Test done
Test DLL:
local\test-killfeed-outline\(built from4340a652). game_probe, Brain account,-addons, 2560x1440, demoktps8w11sf-dyelife_gskill_m2_armory_h1(dod_armory_b6), the WSOD25 kill-feed settings (scale 2.5,font Bahnschrift SemiBold 32 shadow),max 8, six faked kills plus the demo's own. For the even layout I copied #1023's atlas (sprites\dodstudio_killfeed.spr/.txtand its two HD frames) into each install'sdod_addonand removed it afterwards.layout defaultandlayout even: plain,outline 2,background 150,background team 200+background allies #0a286e. All draw as intended. Withlayout evenevery line box sits on its 65 px slot with the 2 px gap, names centred in it; the victim's name and box stay clear of the right edge. Nothing overlaps.pfnClientCmd, the same buffer and tokenizer as a typed line):background allies #0a286ereplied10 40 110;background 150 #141428 6repliedcolour 20 20 40, alpha 150, padding 6;#0a28and#zzzwere refused with the right message.execof a scratch cfg indod_addon, deleted after):background allies #0a286e,background axis 5a0000andoutline 1 #fffgaveallies 10 40 110, axis 90 0 0andoutline = 1 px 255 255 255, and drew that way.layout defaultatscale 2.5the weapon icons are the stock low-res sheets with bits of neighbouring icons, as Kill feed: an even layout where every weapon icon has the same height and nothing is cut off (#1022) #1023's review saw ([R&D] HD HUD sprites, and drawing the HUD bigger (kill feed first) #728's path). The boxes and outline don't touch the icons.cargo test --workspace --locked: 2228 passed.cargo test -p goldsrc-hooks --target i686-pc-windows-msvc: 884 passed. Clippy 1.98.1-D warningsis clean on the workspace and i686,cargo fmt --checkpasses, andnpm run test:unitpassed 904.Screenshots: main checkout
local\review-images\killfeed-outline\final\. Start with00-contact-post.pngand00-contact-pre.png(top-right crops of every grab); the full grabs are inpost-2560x1440\andpre-2560x1440\.🤖 Generated with Claude Code