6.7 KiB
Executable File
M1 implementation and evidence — The Last Hearth
Updated: 2026-11-02. Scope: M1 implementation and available automated/native checks. Not a human-playtest report or milestone acceptance. M2 implementation is proceeding under explicit user direction while M1 human acceptance stays open. M0 evidence remains in m0-verification.md; current sequence is summarized in the roadmap.
M1 implementation present
| Area | Implemented | Boundary |
|---|---|---|
| Movement | mods/hearth/movement.lua applies bounded frame-time steps, smooth speed transitions, sprint intent/recovery lockout, stamina, wet slowdown, water pace, and spear brace. Runtime samples support/water/vertical velocity and changes only the engine speed multiplier. |
Engine still owns character physics, camera, collision, prediction and networking. This is not a custom movement controller or full anticheat. |
| Tool interaction | Original B3D player rig with six animated clips and a right-hand bone; fixed-whitelist attached knife, axe, pick and spear visuals; contextual target/dig/placement preview; material step/dig/landing sounds. | First-person/third-person visibility depends on the native Luanti renderer. Camera motion is opt-in static FOV only; no imposed camera bob. |
| Combat | Weapon-specific reach, cooldown, stamina, wear, aim cone, line of sight and short recent-displacement plausibility check; three-phase opponent wind-up, strike and recovery; opt-in evasion/brace; non-lethal two-health floor, arena leash and disengagement. Production refuses developer spawn commands. | The moving opponent is a deterministic one-step sparring opponent, not wildlife AI or a network-robust competitive combat system. No true latency compensation. PvP stays disabled. |
| Course | Fixed-volume movement/interaction route with halves, doorway, pool, falls, material/tool and build stations, arena and ordered checkpoints. Generator exists only in a fresh nonce-marked local/staging course world. The engine-load preflight rejects non-live users and observed all 41,041 course-volume nodes unchanged. Mock tests exercise consenting generation/checkpoints; a live player must opt in with /course. |
The native preflight intentionally did not generate or traverse the course. Its timing report is server-step intervals and Lua callback wall duration, not client FPS or CPU profiling. |
| Assets/audio | Deterministic generated B3D animation, four held-tool meshes, skin/material PNG and hash-pinned original mono Vorbis sounds. | Optional FFmpeg decode/regeneration test was not run; the package's Ogg framing/CRC/hash checks did run. No third-party sound/mesh was downloaded. |
| Feedback | Readable action/status HUD, contextual placement/tool hints, hit/counter/brace notices and material-specific sound feedback. | Individual comfort/accessibility and readability still need external playtesting. |
Verification performed on the current M1 source
- Node: 31 tooling/asset tests pass, 0 fail. This includes reproducible assets, packaged Ogg validation, animation/model geometry, safe staging/course launcher behavior, production fixture denial, and packaging/backup path tests.
- Lua in real Luanti 5.18.0: 36 Lua files compile; 13 isolated suites pass, 228 total checks covering clock, combat, construction, content, course security/geometry, encounters, movement, persistence, player lifecycle, presentation cleanup, runtime safety, schema and the pure model.
- Engine smoke: pass. Real game bootstrap, M1 API/entity registration, recipes,
terrain/resources and enclosure test pass. Package identity marker matches the
exact staged package. No persistent survival world is opened by
test. - Native
test:course: pass. Fresh local/staging nonce checks, native module registration and no-consent refusal verified; 41,041 ordinary map nodes remain byte/param-identical before and after the probe. It does not create terrain, grant a kit, emulate a player or claim movement/combat/client rendering was exercised. - Interactive GUI: one disposable summer course session has been launched on the current Windows host for hands-on testing. A normal screenshot/engine startup is not evidence that the route was traversed or that movement/combat is fun.
- Environment: current host uses Luanti 5.18.0 and integrated graphics driver NVIDIA 596.47. No clean-machine, other-OS, multiplayer-client, FPS, frame-time, memory, network-latency, server-load, controller, audio-listener or user-study measurement is claimed.
Manual M1 acceptance still required
- In the disposable course, wait for the guide/arrival to finish and run
/course. This explicitly generates the bounded layout and gives a temporary kit; until that command, terrain is deliberately untouched. - Traverse the ten ordered route checkpoints at walking and sprint pace. Repeat troublesome stations and note terrain, slope, doorway, water, falling and collision-snags with exact reproduction steps.
- Try each held tool and attack a target. Run
/sparfor the moving opponent; strike to consent to a round, step aside/back to evade, and face + hold RMB with the spear to brace. Compare this with stationary/practice. - Use
/course report; interpret the displayed values only as server globalstep interval and course-callback duration. Capture client FPS/frame time separately with actual client instrumentation; do not infer them from the report. - Invite several real testers. Ask whether they voluntarily repeat any movement, interaction, or encounter. Record controls, host/device, frame-rate settings, sample period, achieved latency/jitter/loss, player count, defects and observations.
- Make a written, evidence-based decision: stock Luanti is adequate for this slice, or a narrowly scoped engine API/client spike addresses a reproduced blocker.
The course uses a synthetic 45°N, 0°E summer/clear fixture only; this is not the
community-world location. Production remains separate. Current /spar is allowed
only in local play or server-privileged staging; never in production.
M1 disposition
Implementation, packaging/asset tests and automated/native preflight gates are complete for this M1 scope. The roadmap exit gate is not accepted yet: several testers have not been evidenced as voluntarily repeating play, there is no measured performance/network matrix, and the stock-versus-custom decision lacks human measurement. Subsequent M2 implementation does not change this status. No player telemetry is automatically uploaded; share only voluntarily and omit private location/account data from reports.