diablo2-web/tests/client
troytt 26e4265e5b feat(client): formula-derived viewport profiles + 1068x600 / 1280x720
Derive every ViewportProfile's HUD anchors from its size instead of
hard-coded literals (1024x768 still yields 112 / 168 / 84):
  barOffsetX   = (W - 800) / 2
  barOffsetY   = H - 600
  panelOffsetY = (H - 600) / 2
and register two widescreen profiles next to 800x600 / 1024x768:
  1068x600 -> bar (134, 0),   panels y = 0,  center corridor 268px
  1280x720 -> bar (240, 120), panels y = 60, center corridor 480px

- viewport-profile: createViewportProfile() fails fast on an id/size
  mismatch, non-integer or sub-800x600 sizes and odd margins; add the
  strict getViewportProfileBySize(), isExtendedViewport() and
  formatViewportLabel(); id/object lookups resolve every profile.
- client-settings: whitelist the new ids (and bare-width shorthands).
- toolbar: the selector lists every profile; toggleViewport() cycles
  800 -> 1024 -> 1068 -> 1280 -> 800.
- hud-manager: every profile larger than 800x600 docks the panels at
  x = 0 / W - 400 with a W - 800 corridor (render + hit-testing);
  resize() resolves the exact registered profile or throws.
- command-mapper: ViewportCamera(width, height) resolves the exact
  registered profile or throws.
- play.html: keep the 800x600 Battle.net front-end canvas 4:3
  (pillarboxed) when the stage is sized for a 16:9 profile.

Tests: tests/client/viewport-formula-profiles.test.ts

TAG=agy
CONV=47cdfa86-71f2-47e6-b71e-1271cc315e1d
2026-10-02 06:22:40 +00:00
..
client-world.test.ts feat(client,netproto): complete D2GS v1.13c online gameplay loops (R1-R5: item tooltips, container ops, NPC dialogue/travel, mercenaries, warps/portals/SkillCast/death, party/trade/quest panels) 2026-10-02 06:08:32 +00:00
derived-stats.test.ts fix(client): table-driven missile ids and derived character stats (P3) 2026-10-01 01:41:13 +00:00
drlg-map-motion.test.ts refactor: split into isolated common/netproto/server/client/baker modules 2026-10-01 00:10:18 +00:00
escape-menu-113c.test.ts fix(client): exit Escape menu Save and Exit Game to Battle.net Lobby instead of login 2026-10-02 02:57:47 +00:00
gamble-replay-ui.test.ts test(client): capture-backed gamble flow (fixture 09, Gheed) 2026-10-01 11:09:54 +00:00
hud-server-authority.test.ts feat(client,netproto): complete D2GS v1.13c online gameplay loops (R1-R5: item tooltips, container ops, NPC dialogue/travel, mercenaries, warps/portals/SkillCast/death, party/trade/quest panels) 2026-10-02 06:08:32 +00:00
hud-session-play.test.ts feat(client,netproto): complete D2GS v1.13c online gameplay loops (R1-R5: item tooltips, container ops, NPC dialogue/travel, mercenaries, warps/portals/SkillCast/death, party/trade/quest panels) 2026-10-02 06:08:32 +00:00
missile-id-map.test.ts fix(client): table-driven missile ids and derived character stats (P3) 2026-10-01 01:41:13 +00:00
session-lost-login.test.ts fix(client): return to the login screen with a 1.13c reason on session loss 2026-10-01 12:02:30 +00:00
settings-toolbar-view.test.ts feat(client): integrate on-demand EntityArtCache, object/NPC/flippy/animated-tile rendering, and remove drawSolid fallbacks (#540) 2026-10-01 18:21:03 +00:00
spawn-position-539.test.ts test(#539): take the town waypoint from its server UnitAssign anywhere in the capture 2026-10-01 11:36:30 +00:00
transaction-cost-input.test.ts feat(client): price server items with the 1.13c #10107/#10071 port 2026-10-01 10:29:07 +00:00
vendor-stash-replay.test.ts feat(client): server-driven NPC/stash interaction state in ClientWorld 2026-10-01 10:08:43 +00:00
vendor-stash-ui.test.ts feat(client,netproto): complete D2GS v1.13c online gameplay loops (R1-R5: item tooltips, container ops, NPC dialogue/travel, mercenaries, warps/portals/SkillCast/death, party/trade/quest panels) 2026-10-02 06:08:32 +00:00
viewport-formula-profiles.test.ts feat(client): formula-derived viewport profiles + 1068x600 / 1280x720 2026-10-02 06:22:40 +00:00