Repository navigation
feat(framework): an own move's travel, lunge and windowed fixed turn; 128 slots, shared pool runs - #130
Open
sp00ktober wants to merge 9 commits into
Open
feat(framework): an own move's travel, lunge and windowed fixed turn; 128 slots, shared pool runs#130sp00ktober wants to merge 9 commits into
sp00ktober wants to merge 9 commits into
Conversation
… fixed turn and lifted clip Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A field at "next" follows the one before as C places it, a struct of size "auto" ends where its last field does, and an array's [n] may name a [const]: OWN_MOVES, the key pools and a move's keys are each one number now, and every offset after them follows. The structs that held 96 or 5632 by hand (EM_MOVES, EM_OWN, FATIGUE_CFG, FATIGUE, EM_BLOCK, MOVE_STATE, STEER_SPEC, STEER_STATE) are laid out from them; sizes and offsets come out as they were, bar EM_OWN's trailing pad. A host build of the C structs' static_asserts against a raised const keeps the C mirrors honest. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The move player's steer() moves POSITION each AI frame, before ROOT_MOTION, WALL_COLLIDE and GROUND_QUERY, so a wall undoes it as it undoes root motion and the floor keeps the height: - travel: the monster's own (x, z) every STEER_KEY_STEP clip frames from the move's start, 16-bit samples of 1/STEER_TRAVEL_SCALE units; the change of the curve between the cursor's last frame and this one, turned by YAW at the first playing frame and scaled by ENTITY.SIZE_SCALE (any cursor rate, the blend's hold and a loop come out right). - lunge: window (lo, hi], near, span, base, range; the length from the hunter's XZ distance on the first playing frame, along the bearing to it, in world axes, unscaled. - a fixed turn with a window turns `total` across it by the cursor. Travel samples are a pool of their own (EM_MOVES.SAMPLES, 512 x 4 B), a move's inline in its STEER_SPEC (128 x 4 B), lunges a table (EM_LUNGES, 16 x 20 B); EM_MOVES grows from 0x4DBC to 0x5C1C bytes and MOVE_STATE from 0x7B8 to 0xE08. A move without them writes every entity byte as before (checked against the previous build over 400 random moves). Lua: steer.travel (8 hex digits a sample) and steer.lunge, beside steer.window. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nd the live steer mhfu_port.moves writes a move's `travel` (steer.travel, the samples as 8 hex digits each), its `lunge` and a fixed turn's `window` into the Lua module, and `problems` refuses what the move player cannot carry: travel past its capacity, reach or the clip, more samples or lunges than the registry holds, a lunge or fixed window outside [start, stop], a lunge distance that is not a length. mhfu.steering is the one place that quantizes and hexes the samples; mhfu.live.moves.Steer packs and unpacks travel and lunge with it, and SteerState reads the lunge's length. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
OWN_MOVES 96 -> 128, the one const: EM_MOVES grows from 0x5C1C to 0x679C bytes (23580 to 26524), FATIGUE and EM_BLOCK by 0x40 each; the C structs, Lua tables, Python limits and tests follow it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…check counts that mhfu_em_move reuses an identical run already in the pool, anywhere in it, instead of appending: turn keys and travel samples word for word, a lunge byte for byte. A slot that is rewritten with what it had adds nothing. mhfu_port.moves.Pools is the same rule in Python; `problems` counts the pools through it, in slot order, and a test runs equal, nested and distinct runs through the host registry and compares its tops and each slot's offsets with Pools'. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
EM_KEYS 5632 -> 2944, EM_SAMPLES 512 -> 1280, EM_LUNGES 16 -> 12: the need of the Zinogre's 125 own moves (2432 keys, 1052 samples, 10 lunges once equal runs are shared) and about 20 %, in multiples of 64 (lunges of 4). EM_MOVES goes from 0x679C to 0x5E4C bytes (26524 to 24140). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The Brute's longest derived walk travels over 130 samples (a 260-frame clip), which the move player's 128 refused once the check ran on it. STEER_SAMPLES is 132; EM_MOVES grows by 16 bytes, to 0x5E5C (24156). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A manifest whose own moves repeat turn keys, travel and lunges is registered slot by slot through the host registry; its tops are those of mhfu_port.moves.pools. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The move player carries an own move's travel by code, a lunge toward the hunter and a fixed turn across a clip-frame window (contract: manifest
Move.travel,Move.lunge,Steer(turn="fixed", window=...),Clip.lift, first commit). Stacked on #128.steer()moves POSITION before root motion, wall push-out and the ground query: travel samples (1/4 unit, every 2 clip frames, turned by the first frame's YAW, scaled by size), the lunge (base + range * clamp((d - near) / span, 0, 1)along the bearing at the first frame).offset = "next"/size = "auto"and const-sized arrays; C static_asserts against it.OWN_MOVES96 -> 128.mhfu_port.moves.Poolscounts the same way, held to the registry by a host test.STEER_SAMPLES132 (the Brute'sp3_2_19has 130).Tests: framework 704, mhfu 1678, mhfu-port 1098, studio/monster 1634 passed (with #129; raw-file tests with
.../data_files). PRX 661,758 B.🤖 Generated with Claude Code