feat(maze): shrink map and rebalance compact gameplay

This commit is contained in:
2026-09-08 22:14:13 +03:00
parent 5346f9296f
commit f043b63732
18 changed files with 297 additions and 61 deletions
+23 -22
View File
@@ -1,20 +1,20 @@
# MVP gameplay balance
This document locks the gameplay configuration evaluated for Milestone 011.
It is not a claim that the required human playtests have completed; their
results belong in `docs/PLAYTEST_REPORT.md`.
This document locks the compact gameplay configuration evaluated for Milestone
014. Human confirmation of the revised map belongs in
`docs/PLAYTEST_REPORT.md`.
## Locked configuration
| Parameter | Locked value | Purpose |
| --- | ---: | --- |
| Maze dimensions | 128 x 64 cells | MVP map size |
| Maze dimensions | 32 x 32 cells | Square map with one eighth of the former area |
| Initial vision radius | 3 cells | Current-view-only exploration |
| Cross-half connection pairs | 3 | Multiple routes between conceptual halves |
| Extra cycle pairs | 64 | Alternative routes without removing dead ends |
| Minimum start-to-exit separation | 64 cells | Keeps exits distant from starts |
| Landmark pairs | 8 | Spatial-memory cues in symmetric positions |
| Vision-artifact pairs | 4 | Eight one-use artifacts; exceeds the MVP minimum of two |
| Cross-half connection pairs | 2 | Four seam crossings between conceptual halves |
| Extra cycle pairs | 8 | Proportional route density without removing dead ends |
| Minimum start-to-exit separation | 22 cells | Linear scaling by approximately the square root of eight |
| Landmark pairs | 2 | Four spatial-memory cues in symmetric positions |
| Vision-artifact pairs | 1 | Two one-use artifacts; preserves the MVP minimum |
| Compass pairs | 1 | One compass for each player's own exit |
| Movement cooldown | 150 ms | Server-enforced minimum accepted-move interval |
| Enhanced-vision duration | 10 successful moves | MVP artifact duration |
@@ -47,15 +47,15 @@ The most recent recorded sweep (2026-09-08) reported:
| Metric | Observed range across 1,024 seeds |
| --- | ---: |
| Cycles | 133..133 |
| Dead ends | 704..854 |
| Start to key | 416..1,442 cells |
| Key to exit | 346..1,244 cells |
| Start to exit | 102..992 cells |
| Generation attempts | 1 |
| Cycles | 19..19 |
| Dead ends | 74..128 |
| Start to key | 93..422 cells |
| Key to exit | 84..352 cells |
| Start to exit | 26..242 cells |
| Generation attempts | 1..2 |
At the 150 ms cooldown, an uninterrupted shortest 416-cell key route takes at
least 62.4 seconds of accepted-move time. Actual match duration also includes
At the 150 ms cooldown, an uninterrupted shortest 93-cell key route takes at
least 13.95 seconds of accepted-move time. Actual match duration also includes
route discovery, current-view-only navigation, the exit search, detours,
interactions, and player decisions. The approximately five-minute target must
be confirmed by the representative human-playtest procedure; no hard timer is
@@ -63,9 +63,10 @@ introduced to force that outcome.
## Tuning decision
No parameter change is justified before representative timing evidence exists.
Changing maze density or cooldown solely from shortest-path metrics would risk
making the target duration less representative of real fog-of-war play. If the
playtest median materially misses the five-minute target, change only the
smallest relevant locked value, rerun the 1,024-seed suite, record the new
The topology and object counts were reduced with the map area while retaining
the three-cell base view, ten-move artifact effect, 150 ms cooldown, and 200 ms
draw window. These interaction values remain unchanged until representative
playtesting of the compact map supplies evidence for a further adjustment. If
playtesting identifies a material duration or navigation problem, change only
the smallest relevant locked value, rerun the 1,024-seed suite, record the new
range here, and repeat the affected playtests.
+2 -2
View File
@@ -14,7 +14,7 @@ image. Start from a freshly booted device with no occupied lobby sessions.
```
Monitor the USB serial log at 115200 baud. Confirm application version
`0.10.0`, the 4 MB partition table, successful LittleFS mount, station or
`0.14.0`, the 4 MB partition table, successful LittleFS mount, station or
fallback network startup, registration of all HTTP/WebSocket routes, and
health state `serving`.
@@ -33,7 +33,7 @@ The scenario intentionally takes more than two minutes because both repeated
matches use the real 60-second reconnect deadline. It performs these checks:
1. Connect two players and four observers and assemble all four complete
8,192-cell observer projections.
1,024-cell observer projections.
2. Verify heartbeat round-trip latency for all six sessions.
3. Stop consuming one observer stream while Player 1 performs accepted moves;
intermediate observer updates may be dropped, but player acknowledgements
+6 -6
View File
@@ -7,13 +7,13 @@ later milestones.
## Representation and limits
- Dimensions are runtime configuration values. Supported maps are even-width,
even-height rectangles from `8 x 8` through `128 x 64` and contain at most
8,192 cells.
even-height rectangles from `8 x 8` through `32 x 32` and contain at most
1,024 cells.
- Each cell uses one byte of four-direction passage flags. A fixed bit set,
traversal queue, and distance array form the reusable generation workspace.
- Starts, keys, boundary exits, compass cells, landmarks, and vision artifacts
use bounded fixed arrays. No generation or validation path calls a heap API.
- The maze plus workspace budget is 64 KiB. The default `128 x 64`
- The maze plus workspace budget is 64 KiB. The default `32 x 32`
configuration targets generation within 250 ms on the ESP32-C6.
- Candidate regeneration is capped by `maximum_attempts`; failure returns a
diagnostic result instead of retrying indefinitely.
@@ -35,10 +35,10 @@ topology, placements, metrics, and hash.
Player 2's start and every required object are the exact rotational counterpart
of Player 1's placement. Starts and exits are boundary cells, and the default
requires at least 64 cells of Manhattan separation between each start and its
requires at least 22 cells of Manhattan separation between each start and its
exit. Keys are selected outside the owners' initial Chebyshev-radius-three
views. The default places eight landmark pairs and four vision-artifact pairs,
with no placement collisions.
views. The default places two landmark pairs and one vision-artifact pair, with
no placement collisions.
Validation independently checks reciprocal passages, rotational symmetry,
full reachability, edge and cycle counts, dead ends, half crossings, placement
+17 -2
View File
@@ -10,14 +10,14 @@ unrecorded assumptions.
| 2. Persistent station and fallback provisioning | Milestone 010 owner confirmation: persisted station connection and bounded retry; fallback provisioning page worked. | Passing. |
| 3. Two-player lobby, countdown, and refresh | Host lobby/protocol and browser tests; Milestone 010 owner confirmation that both player tokens restored their slots. | Passing. |
| 4. Four read-only observers | Milestone 010 six-client target run assembled four complete observer maps; Milestone 009 authorization tests. | Passing. |
| 5. Fair repeated 128 x 64 maps | 1,024-seed host sweep and maze validation; locked metrics in `docs/BALANCE_REPORT.md`. | Passing. |
| 5. Fair repeated 32 x 32 maps | Milestone 014 1,024-seed host sweep and maze validation; locked metrics in `docs/BALANCE_REPORT.md`. | Passing at host level; target playtest pending. |
| 6. Projection security | Host game visibility and payload-security tests; player and observer browser-contract tests. | Passing. |
| 7. Controls and cooldown | Host game-core and browser keyboard/swipe tests; 150 ms locked cooldown. | Passing. |
| 8. Key and inventory mechanics | Host game-mechanics tests covering pickup, drop, sabotage, meeting return, and exits. | Passing. |
| 9. Artifact and compass rules | Host game-mechanics tests covering ten successful moves and role-specific compass projections. | Passing. |
| 10. Victory and draw window | Host game-mechanics test covering outward exit and 200 ms draw boundary. | Passing. |
| 11. Disconnect recovery | Host disconnect-recovery tests and Milestone 009 physical acceptance evidence. | Passing. |
| 12. Approximately five-minute normal match | Project-owner-confirmed representative physical playtests; the owner explicitly approved omitting match counts and timing statistics, recorded in `docs/PLAYTEST_REPORT.md`. | Passing by approved deviation. |
| 12. Approximately five-minute normal match | The Milestone 011 evidence applies to the superseded `128 x 64` configuration. Repeat representative testing for the compact map or approve a new deviation. | Pending Milestone 014 confirmation. |
| 13. Russian offline UI and browser coverage | Milestone 008 owner checks in Chrome 152, Firefox 155, Safari 26.6, and Edge 152.0.4191.53; asset verification enforces the offline and 1.5 MiB budget. | Passing; repeat asset check for release candidate. |
## Release-candidate record
@@ -37,3 +37,18 @@ digest from the final candidate below. This record must match the tested image.
No pending criterion is treated as passing evidence. The only approved
deviation is recorded above.
## Milestone 014 compact-map candidate
The following host-verified candidate supersedes the map configuration in the
Milestone 011 release record. It is not the final accepted release until the
representative compact-map playtest is confirmed.
| Field | Compact-map candidate value |
| --- | --- |
| Date | 2026-09-08 |
| Application version | 0.14.0 |
| Firmware build command and size | `pio run -e esp32-c6-devkitm-1`; 1,027,934 / 2,097,152 application bytes; `firmware.bin` 1,028,560 bytes, SHA-256 `428e7690bed50d30caf61aca174d838f00d7de1a603f14ea669e996e3d167123` |
| LittleFS build command and size | `pio run -e esp32-c6-devkitm-1 --target buildfs`; 2,031,616 / 2,031,616 bytes; SHA-256 `467f0a07413c83bff5ea246b5063289eb61f8bf40b95d16d639b3241ceda8a9d` |
| Web asset digest and compressed size | `3461d20742e1999c1489465d7f3a68317d56b3acfc5ac5003341e1cf2d478eed`; 20,314 / 1,572,864 bytes |
| Pending evidence | Representative two-player confirmation for the `32 x 32` configuration. |
+2 -2
View File
@@ -14,7 +14,7 @@ simulate movements or infer updates. Each player status also reflects the
server-owned WebSocket connection state. A complete projection establishes the
server-approved static geometry on join, restoration, and match start.
Subsequent bounded projections replace all dynamic player and object state
while reusing only that authoritative geometry, avoiding an 8,192-cell
while reusing only that authoritative geometry, avoiding a 1,024-cell
retransmission after every move.
The observer screen contains no movement, start, or drop-key control. This is
@@ -25,7 +25,7 @@ pauses the game.
## Viewport and navigation
At `1024 x 768` CSS pixels and above, the complete `128 x 64` default map is
At `1024 x 768` CSS pixels and above, the complete `32 x 32` default map is
initially scaled to fit the available stage. The observer can zoom with the
labelled buttons or mouse wheel and pan with pointer dragging. Zoom is bounded
between 0.25 and 6 times the eight-pixel base cell size; the **Вся карта**
+10
View File
@@ -36,3 +36,13 @@ representative playtests above and approved the absence of a quantified timing
sample. This is an approved evidence deviation, not a claim of statistical
measurement. The locked configuration remains unchanged because no issue was
reported.
## Milestone 014 compact-map revalidation
The earlier results apply to the superseded `128 x 64` configuration. Test the
new `32 x 32` configuration with two players after the Milestone 014 firmware
and web assets are installed. Confirm that navigation remains understandable,
both players consider the symmetric race fair, no gameplay-blocking defect is
observed, and the match duration remains acceptable without a hard timer.
Representative compact-map results have not yet been recorded.
+1 -1
View File
@@ -120,7 +120,7 @@ are not MVP requirements.
pixels. Smaller viewports show a Russian message explaining that a larger
screen is required.
- Place player and match status blocks above the full maze.
- Initially fit the complete `128 x 64` map into the available map area.
- Initially fit the complete `32 x 32` map into the available map area.
- Provide zoom and pan without granting any gameplay control or changing
server authority.