Skip to content

feat/nametag-privacy - #16

Open
absol89 wants to merge 3 commits into
devfrom
feat/nametag-privacy
Open

absol89 wants to merge 3 commits into
devfrom
feat/nametag-privacy

Conversation

@absol89

@absol89 absol89 commented Oct 20, 2026

Copy link
Copy Markdown
Owner

First PR against upstream dev clone. Just to show what the PR is about.
Doing a retake on Jacobwasbeast nametags I tried in 1.8.1 + ui settings.

The goal is to offer enough settings so tags and ugly names dont disturb.
And also to allow muting certain behaviors or separate party significance.

Playable 1.7.104 build for windows. The playable 1.6.1170 is master@v1.8.7
https://github.com/absol89/TiltedEvolutionScriptFixes/actions/runs/39490335206/artifacts/12297460187

image

The original spec design:
Can you dig out the 1.8.1 or 1.9-playtest unique code for player name tags? I would like to make some settings for it that are a bit more eu compliant. Such as

Player UI filters

global stranger names (players not in your party only reveal their name during party or invites, OFF default, or ON)
Party invitations (ON default, or OFF)
Trade invitations (ON default, or PARTY, or OFF)
Preview mini chat (ON default, or PARTY, or OFF) This shows the latest white text when F2 ui is not active
Name tags (ON default, PARTY, or OFF)
Distance for
Name fade start (units) this is the min length, closer and you will see the tag 100% opacity
Name is invisible (units) this is the max length, longer and you will not see tag, 0% opacity
Party fade start (units) same but for party
Party is invisible (units) same but for party
Show player level (ON default, Party, or OFF)
Show UI backplate (ON default, Party, or OFF) This is to better differentiate or lessen gameyness
Name tag size (Smallest, Small, Medium, Large, Largest) or similar wording to UI size for text.

Player/Party icon toggle button

Eye icon on player list , to specifically reveal or hide a name, superseding the global stranger names. Put this between the level column and the name column

Please reuse any existing visibility toggle icons such as for password hiding, and suggest to me with image mockups before implementing each feature, so we catch any feedback early. Also use the Skyrim together UI font for the UI if possible, and try not to introduce breaking xmake or ST library changes if not neccessary and there is an already existing path to reuse. I realize this could be a IMGUI nametag, but please explain to me if theres limitations, or if it is safe to implement it using native STR UI without hiding it when F2 is no longer active.

miredirex and others added 3 commits October 22, 2026 16:15
PartyService::OnPartyKick called BroadcastPlayerList(pKick). That argument is
meant for a player who is leaving the server, so every client dropped the
kicked (still connected) player from NotifyPlayerList and the kicked player
got no list at all. The kick now broadcasts the full list.

The client's PartyService also keeps the last name seen per player id for the
session (GetKnownName), so a player who drops out of the list is still shown
by name. It is cleared on disconnect.

Verified:
- Source: the server kick path and BroadcastPlayerList's ignore argument
  (also used by OnPlayerLeave, which is unchanged).
- SkyrimTogetherServer and SkyrimTogetherClient build (releasedbg, MSVC).
- Played on the fork's 1.8-playtest builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Name tags (ImGui, NameTagService):
- Plain name text above other players, no level or id. The party leader gets
  the party widget's crown (crown.svg, drawn as convex pieces). An optional
  thin "Name backdrop" (On/Party/Off, default Party).
- Anchored on the neck bone ("NPC Neck [Neck]") plus the head height, so tags
  stay centred in profile, crouching and lying down, and stay on the body if a
  dismemberment mod removes the head. Helmet clearance of 16 world units,
  clamped to 14-56 px; text scale clamp(800 / distance, 0.65, 1.2).
- Fade start / invisible distances for names and for party (3000 / 5000).
- A tag hides while the crosshair targets that player, so the HUD's activate
  prompt stays readable.
- Hidden while full-screen menus are open; dead players only up close.
- Font: the overlay's Futura Condensed (Latin, Cyrillic).

Player UI settings (Angular, stored per client):
- Known names: All / Party / None. Unknown names show as an italic "Stranger"
  in tags, the player list, the party HUD, the party menu and party invites.
  An eye in the player list overrides it per username.
- Party invitations (on/off), Preview mini chat (On/Party/Off), Name tags
  (On/Party/Off, default Party), name tag size.
- Locales: English and Swedish; other languages fall back to English.

Verified:
- Ghidra (SkyrimSE 1.6.1170):
  - NiAVObject world translate at +0xA0 (decapitation code 0x140685200 walks
    parent +0x30, local transform +0x48, world +0x7C, reads +0xA0/A4/A8).
  - NiAVObject::GetByName is vtable slot 0x2A (+0x150), called with
    FixedStrings entries (0x1406b5c10); "NPC Neck [Neck]" is FixedStrings
    +0x238.
  - CrosshairPickData (ID 401585 -> 0x143138ed0): the activate code
    0x14073e980 reads the target handle at +0x4.
  - World-to-screen (ID 70640, 0x140d2c780) only rejects |w| <= tolerance,
    so the z <= epsilon check is what drops points behind the camera.
- SkyrimTogetherClient, SkyrimTogetherServer and the Angular production build
  succeed. Played on the fork's 1.8-playtest builds.

Assumed:
- Neck-to-head-top (24 units) and helmet clearance (16 units) are tuned by
  eye in game, not measured.
- Actor nodes and camera globals are read from the ImGui draw (Present path),
  as the original v1.8.1 name tags did; the thread was not verified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@absol89
absol89 force-pushed the feat/nametag-privacy branch from 6423a74 to f618aef Compare October 22, 2026 21:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants