**The HUD was never drawn.** `libs/game/render::hud` has existed and gamemaker has called it all along; arcade simply never did. So the interact prompt was computed every tick, published to `world.hud_slots`, and thrown away — the get-in-a-car mechanic was discoverable only by guessing the key. Same shape as the gamepad never being polled: the capability was there and the app never called it. Two things found while wiring it: - The prompt asked for `size: 1.0`, which reads like a scale but is an absolute point size to the renderer — any value above zero is taken literally. It would have drawn a one-point speck. Now 17.0, deliberately above the 12.0 default, since this is the one line a player has to notice without being told to look. - Added a standing controls hint. Nobody sits a child down with a manual, and the affordance prompt only appears once you are already next to something; this is what tells you how to get there. **Arcade could not build headless.** The gamepad poll was added without the `cfg(headless)` split gamemaker uses, and arcade had no `build.rs` to define the cfg at all, so `MAKEPAD=headless` failed to compile and the render-to-PNG path went with it. **The walking camera sat too close** — at 6.5m the character filled a fifth of the frame and hid the world behind them. Now 9.0m. That broke a test asserting `car.distance > on_foot * 1.5`, and the fix is the test, not the number. That ratio read like a decision but was really the quotient of two values that happened to be current, so correcting the walking boom on its own merits broke an assertion about driving while nothing about driving had changed. Restated as a margin: what has to hold is that getting into a car visibly widens the view, and several metres does that at any walking distance. Also logs gamepad connect/disconnect on change, so "the pad does nothing" is answerable from a release log — either the app never saw the device or it saw it and the mapping is at fault. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
13 lines
591 B
Rust
13 lines
591 B
Rust
fn main() {
|
|
// Mirror platform/build.rs: MAKEPAD=headless builds get cfg(headless), so
|
|
// the view can stub the gamepad path (the headless platform backend has no
|
|
// game-input implementation). Without this arcade cannot build headless,
|
|
// and the render-to-PNG test path goes with it.
|
|
println!("cargo:rustc-check-cfg=cfg(headless)");
|
|
println!("cargo:rerun-if-env-changed=MAKEPAD");
|
|
if let Ok(configs) = std::env::var("MAKEPAD") {
|
|
if configs.split(['+', ',']).any(|c| c == "headless") {
|
|
println!("cargo:rustc-cfg=headless");
|
|
}
|
|
}
|
|
}
|