His screenshot shows two plates: a rounded grey one with pfUI's square box
laid across the middle of it.
pfUI's bubble module blanks every Texture it finds in the bubble's regions
and lays its own backdrop over the result (modules/bubbles.lua:30-48). Our
bubble held its two art paths only in the Backdrop struct, so the loop found
the tail and nothing else. The note in this file reasoned that pfUI's own box
covers the plate anyway — it does not: pfUI anchors that box 10 px wider and
10 px *shorter* than the bubble and fills it at 75% alpha, so the stock plate
goes on showing above and below, through a translucent square. That is
exactly the photograph.
The background and the border are now also Texture regions, listed first as
the reference lists a frame's engine regions first. They are anchorless and
draw nothing themselves; the backdrop still paints. drive() reads them back
each frame, and a region that has been blanked or hidden clears that half of
the backdrop — never restored, since a skin blanks a pool slot once and keeps
managing that frame for the session.
This is the reference's own shape rather than a deviation from it: a 1.12
backdrop's pieces are CSimpleTexture objects the frame owns, which
GetRegions (0x773f60) walks. Keeping the geometry in one struct is our
shortcut; these put the handles back.
The transcribed-pfUI test now expects three textures instead of one, and goes
on to assert the thing that actually matters — after the blank, the extract
carries none of the bubble's own art.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn