ui,game,pipeline: player nameplates always-on, level-up ring effect, vanilla tile fallback, warden null guard

- Nameplates: player names always rendered regardless of V-key toggle;
  separate cull distance 40u (players/target) vs 20u (NPCs); cyan name
  color for other players; fade alpha scales with cull distance
- Level-up: add expanding golden ring burst (3 staggered waves, 420u
  max radius) + full-screen flash to renderDingEffect(); M2 LevelUp.m2
  is still attempted as a bonus on top
- Vanilla tile loading: add AssetManager::setBaseFallbackPath() so that
  when the primary manifest is an expansion-specific DBC-only subset
  (e.g. Data/expansions/vanilla/), world terrain files fall back to
  the base Data/ extraction; wired in Application::initialize()
- Warden: map a null guard page at address 0x0 in the Unicorn emulator
  so NULL-pointer reads in the module don't crash with UC_ERR_MAP;
  execution continues past the NULL read for better diagnostics
This commit is contained in:
Kelsi 2026-03-10 07:25:04 -07:00
parent 3cdaf78369
commit 0ea8e55ad4
5 changed files with 100 additions and 11 deletions

View file

@ -59,6 +59,15 @@ public:
*/
void setExpansionDataPath(const std::string& path);
/**
* Set a base data path to fall back to when the primary manifest
* does not contain a requested file. Call this when the primary
* dataPath is an expansion-specific subset (e.g. Data/expansions/vanilla/)
* that only holds DBC overrides, not the full world asset set.
* @param basePath Path to the base extraction (Data/) that has a manifest.json
*/
void setBaseFallbackPath(const std::string& basePath);
/**
* Load a DBC file
* @param name DBC file name (e.g., "Map.dbc")
@ -144,6 +153,11 @@ private:
AssetManifest manifest_;
LooseFileReader looseReader_;
// Optional base-path fallback: used when manifest_ doesn't contain a file.
// Populated by setBaseFallbackPath(); ignored if baseFallbackDataPath_ is empty.
std::string baseFallbackDataPath_;
AssetManifest baseFallbackManifest_;
/**
* Resolve filesystem path: check override dir first, then base manifest.
* Returns empty string if not found.