Skip to content

feat(game): 6-frame 2.5D re-art batches G, 2, 3 - #6

Closed
hyochan wants to merge 9 commits into
mainfrom
feat/guardian-presentation
Closed

hyochan wants to merge 9 commits into
mainfrom
feat/guardian-presentation

Conversation

@hyochan

@hyochan hyochan commented Sep 26, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Guardian combat presentation: spawn slam ring + camera kick on landing, speed-line streaks on forest charges, full-shake kill with a wider death burst. Boss accent palette only; capture-frozen flows skip shakes.
  • 2.5D re-art bible (notes/plans/art-25d-pass.md): style definition (2.5D pixel art, layout locked), 85-sheet inventory, batch order G→H→S→W→U, course impact.
  • Batch G: all 22 guardian sheets re-cut to 6 frames (384x64 strips from ChatGPT 2x3 grid drops), guardian_state_frames 4→6.
  • Batch 2: all 7 spirit sheets swapped to 6-frame ChatGPT art (288x48, facing-less). Combat timing unchanged.
  • Batch 3: relic picker reskinned — 4 hand-drawn card states (168x112) + one 48x48 emblem per relic (16). Galmuri font restored on cards.
  • Art tooling: tools/slice_gpt_grid.py (bleed validation, cell-scaled fill), tools/slice_gpt_cells.py (aligned full-cell + bbox-fit).

Checked

  • pnpm verify exit code 0
  • CI green (docs, game check, repo rules, APK/AAB build)
  • Render-verified: guardians, spirit grid 7x6, relic cards + longest routes (en/ko/ja)
  • Contracts: 16 icons + 4 cards on disk; 22 guardian sheets 384x64; 7 spirit sheets 288x48
  • No .godot/, no secrets

Store screenshots are stale by design (art changed). No recapture without explicit instruction.

Do not merge yet — awaiting review.

Spawn slam ring plus camera kick on landing, speed-line streaks on
forest charges, full-shake kill with a wider death burst. All reuse
the boss accent palette; capture-frozen flows skip the shakes.
hyochan and others added 6 commits September 26, 2026 20:06
4-frame combat states read choppy, so every guardian sheet is now a
6-frame 384x64 strip from ChatGPT 2x3 grid drops. The runtime stretches
each sheet over its state duration, so this only smooths motion.

- 22 guardian PNGs replaced (idle + all mid-states, 6 bosses)
- guardian_state_frames 4 -> 6 in all 7 SpiritKind resources + default
- Boss asset contracts follow the painterly graded precedent (ui.bust)
- tools/slice_gpt_grid.py: grid-drop slicer with bleed validation
- Ignore Playwright MCP tool output

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
All six guardians (base + thorn/storm/siege variants) with 6-frame
idle and state sheets at 384x64, plus the batch G production note.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4-frame states look choppy; minimum 6 connected frames everywhere.
Same strip size for idle and states.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Each kind is 6 frames in a 2x3 grid, sliced to 288x48.
Facingless drifters and ember's non-loop recover keep the
old combat timing while the motion reads smoother.
Four hand-drawn card states plus one 48x48 emblem per relic.
Cards are StyleBoxTexture skins over the same Button nodes,
so focus order and signals are unchanged.
The batch 3 rescene dropped the Galmuri11-Bold overrides, so
cards fell back to the built-in font and CJK hanzi rendered
as tofu. Also tightens the route fit width to the true 140px
label after the inset change.
@hyochan hyochan changed the title feat(game): guardian combat presentation and 2.5D re-art plan feat(game): 6-frame 2.5D re-art batches G, 2, 3 Sep 26, 2026
Guardians went 6f on states (batch G), spirits are 288x48
facing-less strips (batch 2), UI grew by 20 with the relic
cards and icons (batch 3). 85 -> 105 sheets.
@hyochan

hyochan commented Sep 28, 2026

Copy link
Copy Markdown
Member Author

Closing without merging. The re-art regressed the game rather than upgrading it,
and 3.0.0 will redo this ground-up alongside a new UI and story pass.

The branch stays — feat/guardian-presentation is not deleted, and the
relic icons and card frames here are worth pulling forward.

What a visual diff against main found

  • Facing was dropped. Every spirit went facings = 4 → 1, sheets 192x192
    (4 directions x 4 frames) → 288x48 (1 direction x 6 frames). In a top-down
    dodge game the mobs no longer turn toward the player.
  • Two sprites landed on the wrong kind. drifter.tres is 밤 박쥐 (night bat)
    but received jellyfish art; swarm.tres is 작은 불티 (little spark) but
    received the bat art.
  • Cells overflow. caster.png frame 1 is clipped at the sheet's left edge
    and several frames bleed across the 48px cell borders.
  • The 6 frames are not an animation. The guardian frames are near-identical
    renders with jittering anchors and sizes, so playback reads as shimmer rather
    than a cycle.
  • The relic panel layout broke. The 168x112 card bitmap was dropped behind an
    unchanged text layout with no 9-slice: the title sits above the frame, the
    footer below it, the description overflows left and right in en/ko/ja, and a
    white rounded selection rect competes with the card art.
  • The tone went the wrong way. Dark, low-contrast, detailed, semi-realistic.
    Moonlit Beacon is meant to stay a cute, small mini-game — richer art is
    welcome, gritty and epic is not.

Salvage list for 3.0.0

  • 16 relic emblems (48x48) and the 4 card-frame states (168x112) — but only with
    a real 9-slice layout pass behind them
  • tools/slice_gpt_grid.py and tools/slice_gpt_cells.py, once they enforce a
    shared anchor and reject cell bleed
  • The guardian combat presentation (spawn slam, speed lines, kill shake) is
    independent of the art and can be revisited on its own

2.1.0 shipped from main as the final tutorial release:
https://github.com/hyodotdev/MoonlitBeacon/releases/tag/release-2.1.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant