hanabi: a pentagon play surface, since TTS has no pentagon table #8

Merged
joeyr merged 1 commit from hanabi/pentagon-mat into main 2026-08-16 22:52:00 -05:00
Owner

Five edges for five players, one each. The octagon read as a table three players short; a circle avoided the problem rather than solving it.

TTS ships no pentagon, so this is an object rather than the table — a Custom_Token, and that choice is the whole trick: TTS builds a token collision mesh from the opaque region of its image, so a pentagon drawn on transparency becomes a genuinely pentagon-shaped solid that cards rest on. A Custom_Board would have been a pentagon painted on a rectangle. Table_None underneath, so you see the pentagon and nothing behind it.

Two bugs worth recording

Vertices at 54°, not 90°. Edge midpoints fall 36° on from the vertices, so a pentagon whose vertex points at a seat gives every player a corner to peer over instead of an edge to sit at.

Markers measured against the inradius, not the circumradius. A regular pentagon inradius is cos(36) of its circumradius, so a fraction of the circumradius near an edge midpoint lands outside the shape — which is what happened: five markers floating off the edge of the mat.

Markers are TTS seat colours in seat order, not suit colours. Marking the near edge red while White sits there would be worse than not marking it.

Mat is locked, non-selectable, non-raising. Anything draggable is something draggable on top of a hand.

Also fixes the generator summary, which indexed ObjectStates positionally and began reporting each seat neighbour once the mat took index 0. The save was right; the report was not.

Five edges for five players, one each. The octagon read as a table three players short; a circle avoided the problem rather than solving it. TTS ships no pentagon, so this is an object rather than the table — a **Custom_Token**, and that choice is the whole trick: TTS builds a token collision mesh from the opaque region of its image, so a pentagon drawn on transparency becomes a genuinely pentagon-shaped solid that cards rest on. A `Custom_Board` would have been a pentagon painted on a rectangle. `Table_None` underneath, so you see the pentagon and nothing behind it. ### Two bugs worth recording **Vertices at 54°, not 90°.** Edge midpoints fall 36° on from the vertices, so a pentagon whose vertex points at a seat gives every player a corner to peer over instead of an edge to sit at. **Markers measured against the inradius, not the circumradius.** A regular pentagon inradius is cos(36) of its circumradius, so a fraction of the circumradius near an edge midpoint lands *outside the shape* — which is what happened: five markers floating off the edge of the mat. Markers are TTS seat colours in seat order, not suit colours. Marking the near edge red while White sits there would be worse than not marking it. Mat is locked, non-selectable, non-raising. Anything draggable is something draggable on top of a hand. Also fixes the generator summary, which indexed `ObjectStates` positionally and began reporting each seat neighbour once the mat took index 0. The save was right; the report was not.
hanabi: a pentagon play surface, since TTS has no pentagon table
All checks were successful
lint / lua (pull_request) Successful in 18s
93c93c98ad
Five edges for five players, one each, instead of a stock shape with the wrong
number of facings. The octagon read as a table three players short; a circle
avoided the problem rather than solving it.

TTS ships no pentagon -- the set is Circular, Custom, Custom_Square, Glass,
Hexagon, None, Octagon, Plastic, Poker, RPG and Square -- so the pentagon is an
object rather than the table. It is a Custom_Token, and that choice is the whole
trick: TTS builds a token's collision mesh from the opaque region of its image,
so a pentagon drawn on transparency becomes a genuinely pentagon-shaped solid
that cards rest on. A Custom_Board would have been a pentagon painted on a
rectangle. The table itself is Table_None, so what you see is the pentagon and
nothing behind it.

The mat is generated like the cards are, and two things about it were wrong
first time and are worth recording so they are not reintroduced.

The vertices sit at 54 degrees, not 90. Edge midpoints fall 36 degrees on from
the vertices, so a pentagon whose vertex points at a seat gives every player a
corner to peer over instead of an edge to sit at. Off by half a step is exactly
as wrong as it sounds.

The seat markers are measured against the inradius, not the circumradius. A
regular pentagon's inradius is cos(36) of its circumradius, so anything placed
at a fraction of the circumradius near an edge midpoint lands outside the shape
entirely -- which is what happened: five markers floating in the transparent
region off the edge of the mat.

The markers are TTS seat colours in seat order, not the suit colours used
elsewhere. They label who sits where, so marking the near edge red while the
White player sits at it would be worse than not marking it.

The mat is locked, non-selectable and non-raising. Anything a player can drag is
something they can drag on top of a hand.

Also fixes the generator's summary output, which indexed ObjectStates
positionally and started reporting each seat's neighbour once the mat took index
0. The save was right; the report about it was not.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
joeyr merged commit 2b34a9f567 into main 2026-08-16 22:52:00 -05:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
joeyr/tts-games!8
No description provided.