3d-printing/hako-dice/README.md
2026-06-10 10:23:33 +02:00

89 lines
3.9 KiB
Markdown

# Hako Dice
![Preview](preview.png)
A printable set of dice for **Hako**, the two-player dice game documented at
[wiki.xxiivv.com/site/hako.html](https://wiki.xxiivv.com/site/hako.html).
Each Hako die is a cube whose six faces are each split by their two diagonals
into four triangles, painted in two contrasting colors. A complete die carries
all six distinct triangle patterns, named after the time of day by how many of
the four triangles are painted:
| Face | Painted triangles |
|------|-------------------|
| **day** | 0 — the bright face |
| **dusk** | 1 |
| **half (split)** | 2, adjacent pair |
| **half (cross)** | 2, opposite pair |
| **dawn** | 3 |
| **night** | 4 — the dark face |
A player owns four identical dice. Since they're all the same, this model
renders a single die by default — raise `dice_count` to batch-print a whole
set, and print two sets in different accent colors for a full game.
## Fair rolling (balance)
A die only rolls fairly if its center of mass sits at its geometric center.
Marking the faces unevenly biases the roll, so two measures keep these dice
fair:
1. **Opposite faces are balanced by painted-triangle count.** The two
2-triangle faces sit opposite each other (0 difference), `day` (0) opposes
`dusk` (1), and `dawn` (3) opposes `night` (4) — no axis differs by more
than a single triangle of shallow material.
2. **The triangles are a separate part seated in the face pockets.** In plain
mode they sit flush, so a second material of similar density restores the
removed mass and the die stays balanced. In recess mode they sit below the
surface; prefer a shallow `recess_depth` (or plain mode) for the fairest
single-material dice.
When the Sonozai cord hole is enabled, `day` and `night` move opposite each
other so the cord can pass straight through. The centered hole is symmetric and
does not itself unbalance the die.
## Printing in two colors
The body and the triangle markings are emitted as separate parts so you can
assign each its own filament:
```sh
# Primary (die body)
openscad -o hako-bodies.stl -D 'render_part="bodies"' hako-dice.scad
# Accent (triangle fill, flush)
openscad -o hako-markings.stl -D 'render_part="markings"' hako-dice.scad
```
Load both STLs into your slicer and assign a filament to each, or print
`bodies` alone and paint the triangles by hand. The default
`render_part = "preview"` shows both parts together for the customizer.
In **recess mode** (`recessed_triangles = true`, the default) the triangles are
sunk `recess_depth` below the face — a visible, tactile recess (also handy for
low-light or accessible play). In **plain mode** (`recessed_triangles = false`)
the faces stay flat and the colored polygons sit flush, distinguished by color
only.
## Parameters
| Parameter | Default | Description |
|-----------|---------|-------------|
| `die_size` | 16 mm | Edge length of each die |
| `corner_radius` | 1.6 mm | Edge/corner rounding |
| `dice_count` | 1 | Dice to lay out (all identical; 4 = one player's set) |
| `columns` | 4 | Dice per row when laying out more than one |
| `recessed_triangles` | true | Sink the triangles below the face; `false` = flat faces with flush color polygons |
| `recess_depth` | 1.2 mm | How far below the surface the colored triangle sits (recess mode) |
| `marking_thickness` | 0.5 mm | Thickness of the colored triangle layer |
| `triangle_margin` | 1.0 mm | Inset of the pattern from the face edge |
| `triangle_gap` | 0.7 mm | Gap between triangles and around the pattern |
| `sonozai_hole` | false | Bore a centered cord hole through the day & night faces |
| `sonozai_diameter` | 3 mm | Cord hole diameter |
| `render_part` | `"preview"` | `preview` \| `bodies` \| `markings` |
## Triangle index convention
Per face, the four triangles are numbered `0 = N` (top), `1 = E` (right),
`2 = S` (bottom), `3 = W` (left) — each the triangle between one face edge and
the face center.