You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Show a bottom-left desktop control guide for hovered and held table pieces and private-hand
cards, listing the gestures and keyboard actions available in the current context.
Let custom 3D objects declare an N×N grid footprint so large-base pieces align across multiple
square cells during live dragging, release, and settle/pin while remaining centered on hexes.
Add a GM-only, device-local physics diagnostic that draws the current collider around every
synchronized piece, including live deck and dispenser sizes.
Add npm run assets:colliders to measure registered bundled GLBs, report suggested collider
half-extents/scales, and optionally validate authored registry values with --check.
Let room owners and GMs preview and apply synchronized table lighting with a draggable shaded
globe, presets, directional and ambient colors/intensities, and shadow softness. Owners can save
or factory-reset the durable room default, while library scenes may optionally include lighting.
Let admins attach finite or infinite dispensers to uploaded custom objects, choosing an automatic
visible stack, a generic container, or a second uploaded model. Custom pieces retain a
server-authored asset snapshot so matching color/finish variants can be gathered and absorbed
without allowing ad-hoc dispenser definitions.
Let uploaded object and custom-dispenser models target one named GLB material for recoloring and
finishes, preserving all other baked textures; the editor discovers material names from the GLB.
Cover room entry with a Loading Table screen until synchronized pieces, visual assets, and the
first complete rendered frame are ready, preventing large tables from visibly popping into place.
Let uploaded custom 3D objects choose a default shared material during creation and change it
later from the Inspect panel, while preserving compatible authored GLB texture maps and supplying
procedural UVs when needed.
Let built-in pipped GLB dice and modeled dispensers use standard material finishes during Inspect,
while retaining independently colored pips and named tint slots.
Changed
Replaced various built-in assets with new/custom built 3D models. Updated credits as needed.
Preserve authored GLB color and normal maps when tinting built-in pieces and modeled dispensers,
including chips, coins, chess pieces, and Go bowls.
Preserve authored color textures, normal maps, and roughness when tinting the built-in pouch's
bag and drawstring materials on spawned decks.
Let WASD and the arrow keys pan the desktop camera relative to its current view whenever their
contextual held-piece or selection action does not apply.
Recalibrate the bundled chess/checkers and Go boards to their retuned model scales, measured
collider bounds, and printed playing-grid spacing.
Increase generated die and board texture resolution and widen the table camera field of view.
Move the default player-seat camera closer to the table, and let the High graphics tier use
sharper procedural card art plus larger cached derivatives for uploaded card images.
Enlarge private-hand cards on touch layouts and reduce the Inspect control's share of each card,
providing a much larger surface for dragging cards onto the table.
Removed
Remove the bundled train piece and train dispenser from the built-in object catalog; their
historical changelog and roadmap entries remain as the record of the earlier feature.
Fixed
Prevent OrbitControls from throwing when a pointer lifts while an untracked mouse pointer
remains on the canvas, and prevent a first touch tap from counting as a double-tap soon after
page load.
Align the poker-stack collider test with the resized built-in poker-chip model.
Make small tabletop pieces easier to grab on touch screens with invisible screen-space hit
padding, keep held pieces visible above the fingertip for precise placement, and keep
deck/dispenser movement tracking after choosing Move from a long-press menu.
Align the Go-board calibration regression test with its authored 0.41 × 0.41 cell spacing.
Load saved card-library preview images from standard-size WebP derivatives instead of the full
uploaded source files.
Honor the configured collider primitive for built-in modeled dispensers in both server physics
and the local collider diagnostic overlay.
Keep the custom-object library renderable when legacy assets omit optional model metadata.
Keep both buttons visible on custom-dispenser scale steppers and give library quantity fields
enough width to display multi-digit values.
Delete custom dispenser configurations from their library view without deleting the associated
custom object or its primary 3D model.
Export the custom-object lookup through the production database facade so saved models and their
authored dispensers load correctly, omit undefined Three.js material options from previews, and
decode mixed-back deck entries before using their first card as a thumbnail URL.
Preserve the remaining inventory of finite dispensers across manual table-state saves and room
shutdown/re-entry, including gathered stacks above the normal single-spawn limit.
Keep the WebGL canvas hidden until the synchronized table and player-seat camera are both ready,
preventing the bootstrap camera angle from flashing during room entry.
Use center-based escape detection on rectangular tables while retaining footprint-aware checks
for shaped surfaces, preventing valid edge placements from repeatedly triggering recovery.
Security
Run the Docker container as a non-root user (appuser) instead of root, limiting the impact if an attacker gains access to the container.