mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 10:59:16 -04:00
72196d3dc9
The thirds anchor is chosen per union-find run, and runs only joined when the group key matched within JOIN_GAP. That key folds CLUT, texpage, a 24px Y band and the poly-vs-rect family together, so a digit and the box it is drawn on could never land in the same run. They got independent anchors and were squashed about different points, which pulls one piece of a readout toward a screen edge and leaves the rest behind -- worse the wider the frame. On WipEout 3's race HUD at 32:9 the lap readout draws its digits at y=[219,227] x=[137,202] and the box they label at y=[228,244] x=[138,202]. The digits anchored left, the box anchored centre, and the box landed about 500 screen pixels from the digits it belongs to. Join on being one visual element as well as on the key: share screen columns and touch vertically within STACK_GAP. Both halves are needed. Column overlap alone merged the top-left lap counter with the bottom-left lap timer 200 scanlines below, and since union is transitive that chained all 71 HUD primitives into one run spanning the full width, which anchors centre and drags the corners inward. A strict row intersection missed the stacked case above, whose seam is one pixel. WsUiGroupItem carries y/height for this; the anchor stays horizontal. After: 9 runs, bottom-left readout whole and anchored left, timer and energy bar right, speed centre -- matching the 4:3 layout. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>