77 lines
6.7 KiB
Markdown
Executable File
77 lines
6.7 KiB
Markdown
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](m0-verification.md); current sequence
|
|
is summarized in the [roadmap](roadmap.md).
|
|
|
|
## 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
|
|
|
|
1. 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.
|
|
2. 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.
|
|
3. Try each held tool and attack a target. Run `/spar` for 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`.
|
|
4. 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.
|
|
5. 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.
|
|
6. 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.
|