docs: open character animation repair

This commit is contained in:
2026-08-12 21:42:11 +08:00
parent db75a17ce8
commit 9f26320d51
5 changed files with 190 additions and 12 deletions
+9 -8
View File
@@ -8,12 +8,12 @@ Phase 8 design is Owner-accepted. Phase 9 Godot vertical-slice development is
authorized only through the active Goal named by `CURRENT_CHECKPOINT.md`.
Runtime source belongs under `runtime/`; accepted HTML design authority remains
under `prototype/` and may not be silently rewritten to fit implementation.
The current P9.0 increment owns cold boot and the no-run Title page only. The
preserved P9.1 opening/Market candidate is downstream code, not Owner-accepted
entry UX. Contract, Recruit and Market behavior may be entered from the new
Title but may not otherwise change. Battle, result/recovery, authoritative
persistence, bulk final media, device packaging, stores and release remain
frozen until their later Goals.
The current P9.0R2 successor owns only true character frame animation and its
event timing inside the preserved Title -> Guild Yard -> tutorial battle ->
victory flow. Whole-image translation, bobbing, rotation, scale or opacity does
not satisfy character animation. Contract, difficulty, Market, equipment,
Party order, authoritative combat, persistence, chapters, device packaging,
stores and release remain frozen.
## Originality Boundary
@@ -48,5 +48,6 @@ consistent, independently reviewed, and owner-approved:
8. Interactive design prototype and owner review.
Human visual, comprehension, fun, listening, device, packaging, store, and
release acceptance remain separate gates. P9.0 acceptance does not accept P9.1
or authorize P9.2 battle implementation.
release acceptance remain separate gates. P9.0R2 acceptance proves only the
bounded tutorial presentation; it does not authorize the later authoritative
battle system.
+18 -4
View File
@@ -1,10 +1,24 @@
# Current Checkpoint
Active Goal: `docs/goals/PHASE9_0R1_GAME_OPENING_REDESIGN_GOAL.md`
Active contract: `docs/runtime/PHASE9_0R1_GAME_OPENING_CONTRACT.md`
Active Goal: `docs/goals/PHASE9_0R2_CHARACTER_ANIMATION_GOAL.md`
Active contract: `docs/runtime/PHASE9_0R2_CHARACTER_ANIMATION_CONTRACT.md`
Active ledger: `docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md`
Redesign baseline: `00b019543e571c89c20adaa97b4e805ecbd3e6f4`
Stage: `P9_0R1_GAME_OPENING_CANDIDATE_READY`
Animation repair baseline: `db75a17ce8b0a3bc702ad535fa16491debf582e4`
Stage: `P9_0R2_CHARACTER_ANIMATION_ACTIVE`
Owner review rejected the P9.0R1 battle motion because whole static images
were translated and bobbed instead of characters changing body and limb poses.
The current task preserves the accepted Title, Yard, front/rear choice, battle
layout, victory, Home and confirmed Restart. It owns only true character frame
animation, gameplay-event timing and a replacement H5. Economy, equipment,
chapters, persistence, authoritative combat, packaging and release are frozen.
The prior P9.0R1 source and evidence below remain append-only history. Its
`agent_visual_reviewed` animation conclusion is superseded by Owner feedback.
Human visual/fun/understanding remains open. Shortest next action: implement
and verify the fixed character-animation event chain.
## Historical P9.0R1 Candidate
Current P9.0R1 replaces the Owner-rejected form-like Web opening with one
scene-based flow: Title -> Guild Yard front/rear choice -> deterministic first
@@ -0,0 +1,87 @@
# Phase 9.0R2 Character Animation Goal
## Owner Failure
The Owner rejected the P9.0R1 battle motion on 2026-08-12. Moving, bobbing,
rotating, scaling or fading one static full-body image is not character
animation. The earliest failed player boundary is visible body and limb motion
that explains what each profession and the enemy are doing.
## Role And Baseline
- Role: development task.
- Repository: `aetherbound_guild` only.
- Baseline: clean/upstream P9.0R1 closure
`db75a17ce8b0a3bc702ad535fa16491debf582e4`.
- Active contract: `docs/runtime/PHASE9_0R2_CHARACTER_ANIMATION_CONTRACT.md`.
- Active ledger: `docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md`.
## Owned Slice
Preserve the accepted Title, Guild Yard choice, battle composition, victory,
Home and confirmed Restart flow. Replace the static battle actors with real
frame animation bound to the existing deterministic tutorial events:
1. Hearthguard advances, braces, attacks and celebrates with authored pose
changes.
2. Riftblade advances, telegraphs, attacks, recoils and dies with authored pose
changes.
3. Wayrunner visibly evades and counterattacks.
4. Farstring visibly draws and releases an arrow.
5. Kindhand visibly raises the lantern and performs a heal.
6. Damage and healing commit exactly once at their declared impact frames.
The fixed slice must support both front choices and both rear choices. The
runtime may reuse accepted multi-frame Phase 6 cycles. New action strips must
retain the Phase 7 identity anchors and use the repository media pipeline with
source, prompt, provider task, processing and curation provenance.
## Frozen
- Contract, difficulty and Market systems.
- Recruitment economy, equipment and Party order.
- Chapters, content counts and authoritative battle formulas.
- Persistence, save migration and offline behavior.
- Final audio, physical-device work, native packaging, TestFlight, stores and
release.
- Broad UI or background redesign unrelated to animation readability.
## Acceptance
- Every claimed state has at least two visually distinct body/limb frames.
- Runtime changes actor textures over time in a normal-rendered battle.
- Advance motion combines frame animation with translation and stops at
contact; translation alone never satisfies the animation gate.
- Attack, guard, evade/counter, draw/release, lantern/heal, hit and death have
readable anticipation, action/impact and recovery or terminal holds.
- HP changes happen once at the event's impact frame, never at phase entry and
never twice after a long or interrupted frame.
- Riftblade death is non-looping and holds its final frame.
- Reduced motion keeps authored action poses and impact timing while removing
nonessential translation or looping idle motion.
- Home and confirmed Restart clear animation, impact and transient battle
state.
- Both front x both rear routes reach one victory without a duplicate result.
- Fresh focused tests, full affected suite, normal-render captures and one
fixed 15-30 second MovieWriter recording pass with strict diagnostics clean.
- The recording visibly proves changing limb/body poses at play size.
- Source is committed, pushed and clean before candidate handoff. A new Web
preview is published as a new artifact; the rejected P9.0R1 artifact remains
historical.
## Paid Generation Boundary
The root workspace standing authorization applies. This task may make at most
four API Mart image-generation calls and spend at most USD 5 equivalent total.
The intended calls are Wayrunner evade/counter, Farstring draw/release and
Kindhand lantern/heal, with one call reserved for a failed or rejected row.
Dry-run, credential preflight, task IDs, returned cost and exact references are
retained. No video, music, SFX or unrelated image generation is authorized.
## Legal Terminal
`Aetherbound Guild P9.0R2 character animation candidate ready`
or
`Aetherbound Guild P9.0R2 redesign required: <earliest failed player boundary>`
@@ -14,3 +14,4 @@ separate.
| 2026-08-12 | Owner remote H5 playtest of `f0aa847` | `P9_0_OWNER_REJECTED_REDESIGN_REQUIRED` | Earliest product failure is the first post-Title action: the runtime reads as a configuration form rather than a game. There is no visible in-game restart/home path; Contract, First Market, provisional two-of-four selection, two later forced hires, equipment/order revision and the stopping point are not understandable without coaching. Engineering labels and receipt language are exposed as if they were chapter content. The current H5 is retained only as a problem reference. P9.0/P9.1 are not Owner-accepted; P9.2, content expansion, packaging and release remain frozen. A successor must compare structural onboarding options and reach a short encounter before advanced preparation systems. |
| 2026-08-12 | Owner authorization for opening redesign | `P9_0R1_GAME_OPENING_ACTIVE` | Owner authorized a full first-play and UI redesign. The active slice is Title -> scene-based two-position Company choice -> deterministic short battle -> explicit first-expedition victory, with always-visible Home/Restart. Contract, difficulty, paid Market hire, equipment/order configuration, persistence, chapters, later combat, packaging and release remain frozen. Existing accepted Japanese hand-painted environment, character, Riftblade and VFX assets are reused before any new generation. |
| 2026-08-12 | fixed source `a534af9`; `p9-0r1-a534af9-attempt02`; Gallery `xOSqgKWpzqQt` | `P9_0R1_GAME_OPENING_CANDIDATE_READY` | Fresh isolated archive passes domain routes=2, parsed ScreenTouch `touch=15 fallback=0 direct=0`, 13 layout fixtures, 18 normal-render frames across 1280x720 zh_CN, 844x390 zh_CN 130% and 390x844 English, and a 584-frame/19.47-second normal-render dynamic battle with advance, front response, rear action, enemy defeat and one victory. Complete design, five-seed anti-dominance, one-slot/individual-level, 96-asset provenance and four identity-anchor regressions pass; strict markers are zero. The 50-row evidence inventory SHA-256 is `8dd3b7ece692dfcb7c37b5a51996dcfffc937014c59c97fda4a0f3e6b131d453` and verifies 50/50. Attempt 01 remains `INVALID_CONTROLLING_SESSION`; Web export attempt 01 remains `INVALID_EXPORT_ENVIRONMENT`; neither was reused. Local Web export manifest SHA-256 is `d9f688a4e8a927b15f794026c1c7fb13930f9b98e1e742ba433f6d2c30899636`; remote HTML/JS/WASM/PCK MIME/auth delivery is verified. Automated remote browser control is `INVALID_PLUGIN_TIMEOUT`, so no remote canvas interaction claim is made. Agent visual review passes; Owner phone understanding, visual acceptance, fun, listening, physical device, packaging, store and release remain open. |
| 2026-08-12 | Owner play review of Gallery `xOSqgKWpzqQt`; baseline `db75a17` | `P9_0R1_OWNER_REJECTED_P9_0R2_ACTIVE` | Owner rejected the battle motion because actors were static images moved or bobbed as whole planes. This supersedes the prior supporting agent animation review. P9.0R2 owns authored body/limb frame sequences for both front choices, both rear choices and Riftblade, plus impact-frame event binding and a new H5. Accepted opening UI and flow are preserved; systems, content expansion, persistence, packaging and release remain frozen. |
@@ -0,0 +1,75 @@
# Phase 9.0R2 Character Animation Runtime Contract
## Definition
Character animation means the visible character image progresses through
authored frames whose body or limb poses differ. Position translation, bobbing,
rotation, scaling, opacity, particles and camera motion may support a frame
sequence but cannot replace it.
## Runtime States
| Tutorial phase | Hearthguard | Wayrunner | Farstring | Kindhand | Riftblade | Commit |
|---|---|---|---|---|---|---|
| Advance | `advance`, loop | `advance`, loop | `advance`, loop | `advance`, loop | `advance`, loop | none |
| Threat | `idle`, loop | `idle`, loop | `idle`, loop | `idle`, loop | `telegraph`, once/hold | none |
| Enemy attack | `guard`, once/hold | `evade_counter`, once/hold | `idle`, loop | `idle`, loop | `attack`, once/hold | front HP at Riftblade impact frame |
| Rear action | `idle`, loop | `idle`, loop | `draw_release`, once/hold | `lantern_heal`, once/hold | `hit` for Farstring, otherwise `idle` | enemy HP or front heal at rear impact frame |
| Final action | `basic_attack`, once/hold | `evade_counter`, once/hold | `draw_release`, once/hold | `lantern_heal`, once/hold | `hit`, once/hold | enemy HP at final impact frame |
| Defeat | `idle`, loop | `idle`, loop | `idle`, loop | `idle`, loop | `death`, once/hold | enemy HP reaches zero once |
| Victory | `victory`, once/hold | `idle`, loop | `idle`, loop | `idle`, loop | final death frame | one victory transition |
For non-Hearthguard Recruits, the first accepted generated action row may also
supply a restrained two-or-more-frame ready/idle sequence when no separate
idle row exists. Reusing different action poses as an erratic loop is not
allowed.
## Timing
- Each animation state declares frames, FPS, loop/non-loop and impact frame.
- Looping states wrap. Non-looping states clamp to the final frame.
- The runtime records a per-phase impact-committed flag. Crossing the impact
frame commits the value once even when one rendered delta skips multiple
frames.
- Phase duration must allow the primary non-looping action to reach its final
frame and remain readable before the next phase.
- Pausing for Restart confirmation freezes frame time and event commits.
## Reduced Motion
Reduced motion removes the advance translation and nonessential looping idle
cycles. It does not replace action states with the old static anchors. Required
actions step through their authored anticipation, impact and terminal frames at
a lower bounded FPS so their meaning remains visible.
## Art And Provenance
- Hearthguard and Riftblade runtime frames are byte-identical copies of the
accepted Phase 6 frame authority named in the asset manifest.
- Wayrunner, Farstring and Kindhand generation uses their Phase 7 canonical
anchors as image references and the `sprite-gen` component-row contract.
- The generated strips use a flat chroma background, are deterministically
extracted to transparent PNG frames, and retain request, prompt, provider
report, source image, curation and hashes.
- Runtime actor frames keep identity, handedness, equipment, facing, baseline
and play-size silhouette stable. VFX remain separate layers.
## Runtime Evidence
The fixed recording must include:
1. authored advance cycles and collision stop;
2. Riftblade telegraph and attack;
3. one visible front guard or evade/counter response;
4. one visible Farstring draw/release or Kindhand lantern/heal action;
5. final attack, enemy recoil and non-looping death;
6. victory without a reset seam.
Static captures support layout only. The animation claim requires a continuous
normal-render recording and sampled-frame proof that actor textures changed.
## Evidence Markers
- `ABG_P9_0R2_ANIMATION_ASSETS_OK`
- `ABG_P9_0R2_CHARACTER_ANIMATION_OK`
- `ABG_P9_0R2_DYNAMIC_SLICE_OK`