PURPOSE

Maps boss and boss-roster enemy typeId strings to their exact ships-v4 hull filename stems so the shared sprite atlas can bake each boss with its faction-specific artwork instead of the generic red enemy silhouette. Covers bosses #1 through #8 plus their supporting anchor units across the Backwater, Junkrats, Industria, Solaris, and Prism factions.

OWNS

  • The BOSS_TYPE_TO_HULL record — the single source of truth pairing each boss-roster typeId (snake_case) to a ships-v4 hull name (exact filename stem with spaces and case preserved per the ships-v4-loader contract).
  • Entries for four faction groupings: Backwater (Killer Croc + Caiman variants), Junkrats (Stinger, Orca, Pierre, Marco), Industria (Loader, Drillbot, Bigbot, Digbot), Solaris (Hauler, Valet, Oracle), and Prism (Citrine, Ruby, Jade, Pearl).

READS FROM

Nothing. This module is a static data table — pure constants, no imports.

PUSHES TO

  • engine/bridge.ts — imports BOSS_TYPE_TO_HULL for two purposes: iterating all entries inside _bakeAllBossSprites to populate the atlas region for each boss typeId, and checking individual enemy shapeKey values during the visible-enemy loop to decide when to re-bake sprites that haven’t been patched yet.

DOES NOT

  • Resolve hull names to actual image data — that is the ships-v4-loader / getShipV4 responsibility.
  • Apply per-rarity outline color treatment — bosses use one atlas region per typeId for every rarity bucket, unlike base archetypes.
  • Enumerate non-boss enemies — only boss-roster types appear here.
  • Register types with the enemy data system — that is data/enemies/index.ts (BOSS_ENEMY_TYPES), which must be updated alongside this map when adding new boss-roster types.

Signals

None. The module exports a frozen-shape constant only; no events, no observers, no callbacks.

Entry points

  • BOSS_TYPE_TO_HULL — exported Record<string, string> consumed by engine/bridge.ts. Lookups use the enemy typeId / shapeKey as the key and return the ships-v4 hull filename stem.

Pattern notes

  • Hull names preserve spaces and case exactly (for example 'Backwater_Killer Croc') because ships-v4-loader matches the underlying asset filenames literally.
  • Keys are conventional snake_case typeId strings that match the IDs used by the enemy/boss-roster data layer.
  • Entries are grouped by faction with block comments naming the boss(es) each cluster supports — Backwater (boss #1), Junkrats (bosses #2 and #3), Industria (bosses #4 and #5), Solaris (bosses #6 and #7), Prism (boss #8).
  • A header comment requires updating both this map and data/enemies/index.ts’s BOSS_ENEMY_TYPES together when introducing new boss-roster types — the two structures are coupled.
  • The map size is intentionally small (~17 entries) so Object.entries iteration inside the render hot path remains cheap, as noted by the caller in bridge.ts.
  • Bosses + their anchor/supporting units share this table so faction units that accompany a boss encounter render with the same ships-v4 art treatment as the boss itself.