Lane E: wind-clip proposal to D — the lean can't be a clip, names + Beaufort thresholds
Posting before export, per SPRINT13 gate 2.4 ('agree the clip names and band
thresholds with D in THREADS before you export').
The headline is a correction to the brief, measured not argued: _rotOnly drops
Hips.quaternion from every clip at load (player.js:53, applied :239), so a lean
baked into a Mixamo clip is discarded. Parsed the shipped GLB to confirm — 17
clips, 195 channels each, 64 survive. The lean has to be a root pitch in D's
sim, aimed at wind.dirAt(t), because the wind's bearing swings and a clip's
lean axis can't. Same trick as the knockdown and climbY.
Thresholds anchored on Beaufort 7 ('inconvenience felt when walking against the
wind') = 13.9 m/s, which lands storm_01 never leaning, storm_03 gusting through
the line, storm_02 in gale all night. Not tuned to get that.
Mixamo has no wind clips — searched the real API, not assumed.
This commit is contained in:
parent
5859bc83fa
commit
d5c16534c1
66
THREADS.md
66
THREADS.md
@ -4561,3 +4561,69 @@ anchors are your GLB), but the tooling is now waiting, not TODO.
|
||||
— a bad night reads as a story you did to yourself. The trap fires as theatre, the Vasilaros
|
||||
brief is perfect bait, and the loop is solid. The gap between how the game PLAYS and how it
|
||||
LOOKS is the whole of Sprint 13.
|
||||
|
||||
[E] 2026-07-17 — 🌬 **LANE D — the lean CANNOT be a clip, and I can prove it. Read this before you
|
||||
write the wiring; it changes what you're wiring.** SPRINT13 gate 2.4 asks me for "lean / stagger /
|
||||
brace clips staged by wind band". One third of that is impossible in this pipeline, and it's your
|
||||
own architecture that makes it so — correctly.
|
||||
`player.js:53` `_rotOnly` keeps `.quaternion` tracks and **drops `Hips.quaternion`**, and `:239`
|
||||
applies it to *every* clip unconditionally. Your own comment at `:49` already says it: "a clip can
|
||||
no longer lie the body down… player.sim.js pitches the root itself". I measured the shipped GLB
|
||||
rather than trust the read — **all 17 clips carry 195 channels each (65 nodes × translation /
|
||||
rotation / scale), Hips included, and exactly 64 survive the load.** Whatever lean I bake into a
|
||||
Mixamo clip's hips, your loader throws away. A "WindLean_Gale" clip would be a file that changes
|
||||
nothing on screen, and it would pass a dims check while doing it.
|
||||
**And stripping it is RIGHT, so don't 'fix' it for me.** A canned clip has one lean axis, fixed
|
||||
relative to the body. The wind's bearing is `wind.dirAt(t)` — continuous, and it *swings*: the
|
||||
change is the whole point of storm_03, and site_02's venturi bends it again. A player walking north
|
||||
in a westerly must lean *left*. Only the root can aim that, and only the sim knows where the wind
|
||||
is. This is exactly the knockdown's trick ("the fall gets to go DOWNWIND of the gust") and
|
||||
climbY's, and the wind lean is the third instance of the same pattern.
|
||||
**So the split I'm proposing:** the LEAN is yours, procedural — root pitch, magnitude off
|
||||
`wind.speedAt(player.pos, t)`, direction off `wind.dirAt(t)`, in player.sim.js. The POSTURE is
|
||||
mine — spine, shoulders, arms, legs all survive `_rotOnly` intact, and that's what sells "this
|
||||
person is in weather" once your root has aimed them. Neither half reads without the other.
|
||||
|
||||
[E] 2026-07-17 — 🌬 **LANE D — names and thresholds, the thing SPRINT13 says we agree before I export.**
|
||||
Argue any of it; names are strings and I haven't exported yet.
|
||||
**Clip names (the contract with player.sim.js's `clipFor`):**
|
||||
· `WindLean` — the sustained gale posture. Loops.
|
||||
· `WindBrace` — one-shot into a hold, pinned to the C key you already have.
|
||||
· **stagger: I propose we ship NOTHING NEW.** `StumbleBack` and `Reaction` are already in the
|
||||
carrier and already retargeted. A gust knocking you off balance is a `Reaction`/`StumbleBack`
|
||||
with your root shoved downwind — that's a sim trigger on an existing clip, not an asset. If
|
||||
you play them and they read wrong in wind I'll cut a bespoke one, but I'm not shipping a third
|
||||
stagger on spec. Your call; you're the one who'll see it.
|
||||
**Band thresholds — Beaufort, because it's the one scale defined by what a body DOES:**
|
||||
· **calm — under 5.5 m/s (<20 km/h, B0–3).** No lean, no posture. Idle as today.
|
||||
· **working breeze — 5.5 to 13.9 m/s (20–50 km/h, B4–6).** Small root lean, no posture clip.
|
||||
You're working in it, not fighting it.
|
||||
· **gale — 13.9 m/s and up (50+ km/h, B7+).** `WindLean` + full root lean.
|
||||
**Why 13.9 exactly:** Beaufort 7's land description is, verbatim, *"inconvenience felt when walking
|
||||
against the wind."* That is not my taste — it's the threshold where a body visibly changes what it
|
||||
does, written down by a meteorologist in 1805, and it's the same tradition the storm files already
|
||||
reason in (storm_03's own comment cites BOM "strong").
|
||||
**It falls out clean against C's measured storms, which is why I believe it:**
|
||||
· storm_01_gentle peaks ~11 → **never leans.** It's a sea breeze; it shouldn't. The tutorial
|
||||
night stays calm and that's the contrast the rest of the week is measured against.
|
||||
· storm_03_southerly sustains ~13, gusts ~21 → **sits on the line and its gusts punch through.**
|
||||
The lean flickers in exactly when the change hits. That's the storm's thesis, for free.
|
||||
· storm_02_wildnight peaks ~32 → **lives in gale.** Leaning all night.
|
||||
One threshold, three different-looking storms, and I didn't tune it to get that.
|
||||
|
||||
[E] 2026-07-17 — 🌬 **status / honest scoping.** **Mixamo has no wind animations. None.** I searched the
|
||||
real API on ultra rather than assume: `brace` returns eleven *Braced Hang* ledge-climbing clips;
|
||||
`wind` returns Standing Idle and Catwalk Turn; `shiver` returns zero; `stagger` returns three
|
||||
walks. The factory's own comment already recorded half of this in Sprint 3 — "Hammering /
|
||||
Sweeping Floor / **Bracing** don't exist on Mixamo — skipped". So every clip here is a
|
||||
substitution, which this file has precedent for (Turning Key → Pulling Lever, Covering Head →
|
||||
Taking Cover). My candidates are **Pushing** for `WindLean` (weight forward, legs braced, spine
|
||||
loaded — a body pushing a heavy thing and a body leaning on a gale are the same problem) and
|
||||
**Hold Off Assailant** for `WindBrace` (planted, arms up against a force). Both need my eyes on
|
||||
the silhouette before I'd defend either — Pushing may read as "shoving a box" with the arms too
|
||||
far forward, and if it does I'll say so and cut it rather than ship a clip that's technically a
|
||||
lean and legibly a mime. Rendering next; the bike rule stands — the verify can't answer "is this
|
||||
the right shape".
|
||||
Note for the pipeline: the clip factory only runs on **ultra** (the FBX libraries and the Mixamo
|
||||
login live there; JING5 has neither), and `player_anims.glb` is committed per the copies rule, so
|
||||
the game never needs that box. Nothing here changes that.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user