unmask? | boolean | If true, the engine parents this symbol’s view to viewport.unmaskedContainer instead of the reel’s masked container. the symbol renders above the reel mask, useful for oversized win animations (expanding wilds, splash frames) that should not be clipped at the cell boundary. Coordinate space: when unmasked, the engine sets the view’s X to reel.container.x and adds reel.container.y to the view’s Y so the at-rest position matches the reel’s grid cell. Motion limitation: ReelMotion writes view.y in reel-local coordinates. While the reel is spinning, an unmasked symbol on the strip will appear shifted vertically by the reel’s offset (the reel.container.y translation is only applied on activate, not on every motion frame). Treat unmask: true as a landed-state flag. it is correct at rest and during static frames, but not designed to stay visually accurate while the reel is spinning. If you need a mid-spin “stays visible above mask” overlay, use a cell pin instead. Pyramid layouts not supported: when any reel has a non-zero offsetY (pyramid / trapezoid offsets), motion.snapToGrid() and motion.displace() will write reel-local Y to the unmasked view. shifting the rendered position by reel.container.y. The builder throws at config time if both conditions are present. Use cell pins for above-mask overlays on pyramid slots. Mask-strategy auto-pick: when any registered symbol sets unmask: true and symbolGap.x > 0, the builder switches the default RectMaskStrategy to SharedRectMaskStrategy so that neighboring (masked) symbols don’t get clipped at the column gap next to the unmasked overlay. Passing .maskStrategy(...) explicitly always wins. For symbols that need to overlap across reel boundaries while unmasked, prefer SharedRectMaskStrategy. | config/types.ts:155 |