Appearance
アセット・パレット規約
スプライト・BG タイル制作の確定ルール。アート修正を AI エージェント(Codex 等)に委譲するときは、本ページの制約をプロンプトに毎回明記すること。
制作方式(確定)
自動画像変換は禁止
画像 → CHR の自動変換は減色ノイズで一度失敗済み。**「帯パレット先行設計 → ピクセルマップ手打ち → Python ジェネレータで CHR 化」**が正のワークフロー。
tools/gen_ai_sprite.py # ピクセルマップ(手打ち)→ ai_sprite_data.inc + .chr
tools/gen_ai_stage_bg.py # ステージ背景タイル生成(issue #23)- 生成物は
src/*.incとして engine.s に取り込み、リセット時に CHR-RAM へ転送 - CHR ラウンドトリップ検証(エンコードのピクセル一致確認)をテストで担保
CHR-RAM レイアウト(8KB)
| CHR アドレス | 内容 | サイズ |
|---|---|---|
| $0000〜 | フォント: tile 0 = 空白, 1〜26 = A〜Z, 27〜36 = 0〜9, 37 = :, 38 = - | 39 タイル |
| $0270〜 | ステージ BG タイル(tile 39〜、issue #23 で追加中) | 実装中 |
| $1000〜 | アイのダンススプライト v4(26 フレーム分) | 208 タイル = 3,328 バイト |
アイのスプライト(v4・承認済み)
| 項目 | 内容 |
|---|---|
| サイズ | 16×32 メタスプライト(8×8 × 8 枚) |
| フレーム数 | 26(idle + 各振り 4 コマ + ホールド等) |
| アニメ | 4 コマ × 5 フレーム = 20 フレーム固定・接地固定(ジャンプのみ pose_dy) |
| アセット | assets/sprites/ai-dance-sprite-nes-v4.chr |
帯パレット(スプライト・確定値)
キャラの縦 32px を 3 帯に分け、行ごとに使用色を固定する。
| 帯(行) | 色(NES パレット値) | 用途 |
|---|---|---|
| 行 0〜15 | $00, $36, $2C | 頭部・上半身 |
| 行 16〜23 | $00, $30, $36 | 腰まわり |
| 行 24〜31 | $36, $30, $2C | 脚部 |
- スプライトパレットは
gen_ai_sprite.pyv4 が生成($3F10〜) - お手本ガールはパレット差し替え(制服色違い)+ 水平フリップでアイの CHR を共用
スプライトパレット 4 本目は予約済み
$3F1C〜 は観客・判定文字用に予約。キャラ用に使わないこと。
BG パレット
| パレット | 用途 |
|---|---|
| 0 | UI テキスト(フォント) |
| 1 | 電脳ステージ背景 |
| 2 | ステージ床 |
| 3 | 観客 |
(issue #23 の実装で確定。属性テーブルは 16×16px = 2 タイル単位でしか塗り分けられない点に注意)
スプライト同時使用数の設計制約
アイ 8 枚 + お手本 8 枚 + 判定文字最大 7 枚 + アイコン ≒ 28 枚。
- NES は 1 スキャンラインに 8 スプライトまで — 横並びに注意
- 判定文字はアイの頭上のみに表示、振りアイコンは BG 化を検討(仕様書 §9)
必要アセット一覧(仕様書 §8 より)
| アセット | サイズ | 状況 |
|---|---|---|
| アイ(主人公)26 フレーム | 16×32 | ✅ v4 承認済み |
| お手本ガール | アイと共用 | ✅(パレット差し替え) |
| ステージ背景(床・スポットライト・電脳グリッド) | BG タイル | 🚧 issue #23 |
| 観客(シルエット 2 種 + Donack カメオ) | 8×16 BG × 2 | 🚧 issue #23 |
| 振りアイコン 6 種・♥ | 8×8 | 📋 未着手 |
| 判定文字 PERFECT / GOOD / MISS | スプライト | 📋 未着手(現状はフォント表示) |