Skip to content

AIドパガキ ゲーム仕様書 ​

  • 対象 issue: #15(土曜デモ本命)/ #29(ノーツレーン化)
  • ステータス: v2.1(v2 ノーツレーン方式 + 2026-08 の実装追従。§0 に v2 からの差分を集約。実装詳細はエンジン設計)
  • 前企画 Donack Adventure の仕様は game-design.md(凍結・第2弾用)

0. v2 からの実装差分(2026-09-02 時点の正典) ​

§1〜§10 の本文は v2 策定時のまま残す。以下が現行実装で確定した仕様であり、本文と食い違う場合は本節が優先する。

0.1 ゲームフロー・進行 ​

タイトル ─(10秒無入力)→ プロローグ(自動) → タイトル
  ├─ START   → 入場(コーチ歩き) → 会話1 → 会話2 → チュートリアル(6ノーツ) → 会話3 → LETS DANCE → 本番(曲0)
  ├─ CONTINUE→ 本番(現在曲へ直行) / 全曲クリア後は曲選択
  └─ PROLOGUE→ プロローグ(手動、Aで送る)
本番 ─[譜面完走]→ CLEAR(RANK D〜S) ─START→ RANK A以上: 次の未クリア曲 / A未満: 同じ曲リトライ
     └[観客0]→ GAME OVER ─START→ 同じ曲リトライ
全4曲クリア → エンディング(曲4 + 12ページ) → タイトル
  • プロローグは 4 ページ × 3 行、手動時は A で送る(自動アトラクト時はスキップ不可)。エンディングは 12 ページ × 3 行、A で送り、最終ページで A/START
  • 進行(現在曲・クリア済みマスク・難易度)は RAM の進行レコードでソフトリセットをまたいで保持(電源断で消える。セーブ機能ではない)
  • 難易度: NORMAL / EASY(タイトルで ←→ または SELECT)。EASY は各小節 1・3 拍目のノーツを休符化
  • 本番中 START = ポーズ(消音・PAUSE 表示)、SELECT = 曲替え(次曲へ切り替えて演奏やり直し、エンディング曲はスキップ)。チュートリアル中の SELECT は残りをスキップして最終セリフへ
  • START+A+B でどこからでもタイトルへ
  • 隠しコマンド: タイトルで ← → ← → ↑ ↓ B B = 全曲クリア扱い(曲選択解放)/ ポーズ中 A+B+SELECT = RANK S で即クリア

0.2 楽曲・譜面 ​

#曲BPM役割
0サニーステップ120新規スタート曲・タイトル BGM
1ネオン・ミッドナイト128
2グルーヴ・サーキット116
3クリムゾン・オーバードライブ152
4トワイライト・スターズ96エンディング専用(譜面なし)
  • テンポは曲ごと(§4/§6 の「112.5 BPM 固定」はチュートリアルのみに残る)。拍ターゲットは tools/export_charts_inc.py がサウンドドライバと同一の丸めで事前計算し、カウントイン 96 フレーム後に BGM を開始することで同期する(行カウンタは共有しない)
  • サウンドは 5ch(pulse1 / pulse2 / triangle / noise / DPCM)。判定音・決定音は未実装。実装済み SE: メトロノーム(チュートリアル)/ セリフ声 / Lv4 歓声 / S ランク笛
  • 譜面は assets/charts/charts.json(譜面メーカー #45)が正典

0.3 判定・ランク ​

  • 判定窓(±4f PERFECT / ±8f GOOD)と 4 拍集計の観客増減(+2 / +1 / −2)、観客 8→16・0 でゲームオーバーは v2 のまま
  • 窓外の空振りはノーツを消費しない(MISS 表示のみ、集計・ランクに入らない。#62)
  • CLEAR 画面の主表示は RANK(S = 全 PERFECT / A = MISS 0 / B = 命中 60% / C = 40% / D)。A 以上で次曲へ進行
  • 判定文字は BG テキスト行 JUDGE: で表示(スプライト文字ではない)
  • 観客 13 人以上で A/B の PERFECT を出すと Lv4 演出(歓声 + 白フラッシュ)

0.4 アセット(§8 からの変更) ​

  • アイ: 26 ダンスフレーム + ゲームオーバー 2 フレーム(4 コマ × 5f = 20f 固定、B スピンも同じ)
  • お手本ガール: 専用スプライト 32 フレーム(アイの色違いではない)、CHR ストリーミングで表示
  • 観客: 3 段 84 席・4 段階テンション。Donack のカメオは未実装
  • プロローグ / エンディング用フォント追加(美咲フォント由来)

1. コンセプト ​

項目内容
タイトルAIドパガキ
ジャンルノーツレーン型リズムゲーム
画面固定1画面(スクロールなし)
ターゲットファミコン実機(mapper 2 / PRG 128KB / CHR-RAM)・Mesen2
デモ期限2026-08-01(土)— 達成。以降は磨き込みと実機化

2. ストーリー ​

女子高生の主人公 AI(アイ)がいつものように SNS を見続けてると不思議な広告を発見。 タップすると突然スマホが光り出して 8Bit の世界に吸い込まれてしまった! 元の世界に戻るにはダンスをして視聴率を上げて、現実世界の SNS でバズらなければいけない。 いつもは見るだけで満足してたドパガキのアイは、見様見真似でダンスをしてこの電子世界から脱出しなければ!

  • タイトル画面 → ストーリー画面(テキスト1〜3枚・Startでスキップ可)→ プレイ
  • 表記は「SNS」で統一(実在サービス名は使わない。2026-07-28 ユーザー決定)

3. 画面レイアウト(プレイ中) ​

┌──────────────────────────────┐
│ 視聴率: 001234    ♥観客: 08   │ ← 上部UI(BGタイル)
│                              │
│ ◎←  →    ↑      A            │ ← ノーツレーン(右から左)
│   [お手本ガール]   [アイ]      │ ← ステージ(中央)16x32スプライト×2
│  ステージ床・スポットライト     │
│ 🧍🧍🧍🧍🧍🧍🧍🧍              │ ← 観客列(BGタイル、0〜16人)
└──────────────────────────────┘
  • お手本ガールはアイのスプライトをパレット差し替え+水平フリップで共用(CHR節約)
  • ビジョン内の左端に判定マーカーを置き、振りアイコンノーツ(← → ↑ ↓ A B)が右から左へ流れる
  • 判定結果(PERFECT/GOOD/MISS)はアイの頭上にスプライト文字で表示

4. コアループ(ノーツレーン) ​

  • 拍グリッドは 112.5 BPM = 32フレーム/拍。コール/レスポンスの区別は設けない
  • ノーツは目標拍の96フレーム前から表示し、毎フレーム2pxずつ右から左へ進む(レーン幅192px)
  • ノーツX座標は 判定マーカーX + 到達までの残りフレーム数 × 2
  • お手本ガールは譜面の各目標拍で対応する振りを踊る。プレイヤーは同じ目標拍で一緒に踊る
  • レーンには未判定ノーツを最大6枚と判定マーカー1枚をスプライト表示する
  • 1スキャンライン上は最大7枚で、NESの8枚制限以内。アイとお手本ガールはレーンと異なるY範囲に配置する
  • 本番譜面は $FF で終了し、完走するとCLEARへ遷移する(ループしない)

チュートリアルも同じレーン方式を使う。4拍に1ノーツの超低密度グループを6回流し、6種の振りを1回ずつ練習する。

振り(6種) ​

入力振りモーション
← / →サイドステップ左右ポーズ
↑ハンズアップ両手上げ
↓しゃがみしゃがみポーズ
Aジャンプジャンプ
Bスピンクルッと一回転(2フレームアニメ)

5. 判定仕様 ​

  • 目標拍に対して: ±4フレーム = PERFECT(+100点) / ±8フレーム = GOOD(+50点) / それ以外・誤入力・無入力 = MISS
  • 入力を検出したら判定結果にかかわらず、まずアイの「押した振り」4コマモーションを即座に開始する。タイミング外・誤ボタンでも押した振りで踊り、判定だけMISSになる
  • 次に判定する未消化ノーツのインデックスを保持する。押下で判定したノーツ(MISSを含む)と、+8フレームを過ぎて無入力MISSになったノーツは消化し、二重判定しない
  • 判定窓を広めに取るのは現代テレビの表示遅延対策
  • 4譜面拍ごとの集計 → 観客増減:
    • 全アクション PERFECT: 観客 +2(「フィーバー」歓声)
    • MISS 0〜1(PERFECT/GOOD混在): 観客 +1
    • MISS 2 以上: 観客 −2
  • 観客: 初期 8 人・上限 16 人・0 人でゲームオーバー
  • 視聴率 = スコア累積表示(6桁)

6. 楽曲・譜面 ​

  • 自作最小シーケンサを実装(famitone2 は使わない):
    • テンポ 112.5 BPM = 32 フレーム/拍・8 フレーム/16分(整数フレームで割り切れる値を選定)
    • チャンネル: パルス2(メロディ+ベース)、三角波(キック代用/ベース)、ノイズ(ハイハット/スネア)
    • 音楽の行カウンタを判定システムと共有 → 音と譜面が構造的にズレない
  • デモ譜面は有限長とし、終端 $FF 到達でCLEARへ進む
  • 効果音: 判定音(PERFECT/GOOD/MISS)、歓声、決定音。SE はノイズ/パルス1を一時借用

7. ゲームフロー ​

会話1 → 会話2 → 6ノーツ練習 → 会話3 → LETS DANCE → 本番
                                                    ├─ [譜面完走] CLEAR
                                                    └─ [観客0] ゲームオーバー
  • CLEAR画面には視聴率(スコア)と観客数を残し、Startで会話1からリスタートする
  • ゲームオーバーも従来どおりStartでリスタートする
  • チュートリアル譜面の $FF はCLEARではなく会話3へ遷移し、セリフ3ページとLETS DANCEのフローを維持する

8. 必要アセット一覧 ​

アセットサイズ内容issue
アイ(主人公)16×32 メタスプライトidle / ←ステップ / →ステップ / ↑ハンズアップ / ↓しゃがみ / ジャンプ / スピン×2 / ミス の9パターン起票要
お手本ガール(アイと共用)パレット差し替え(制服色違い)+フリップ同上
ステージ背景BGタイルステージ床・スポットライト・電脳空間の背景(グリッド/ノイズ演出)起票要
観客8×16 BGタイル×2種シルエット2種を並べて群衆表現。Donack(#9)を1体カメオ配置同上
UI8×8数字フォント(#2と共用)・振りアイコン6種・♥同上
判定文字スプライトPERFECT / GOOD / MISS同上

9. 技術メモ ​

  • 固定画面のためスクロールレジスタは固定。ミラーリングは現状の垂直のままで問題なし
  • OAM割り当て: アイ $0200-$021F、お手本 $0220-$023F、レーン $0240-$025B
  • レーンは同じYにマーカー1枚+ノーツ最大6枚=7枚。8枚/スキャンライン制限内で、キャラクター2体は別Yのため加算されない
  • RAM: cfg/nes.cfg の BSS を $0300 起点に修正(PR #13 レビュー申し送り事項)
  • 乱数不要・セーブ不要

10. MVP 完了条件(土曜)— 達成状況 ​

  • [x] 通しフロー(会話→チュートリアル→本番→CLEAR/ゲームオーバー→リスタート)
  • [x] 6振り判定・観客増減・視聴率表示
  • [x] 楽曲1曲フル + 譜面同期(→ 4 曲固有譜面 + エンディング曲に拡張)
  • [ ] 実機動作(魔界島カート)— SST39SF040 への書き込み・ベリファイまで完了(#34)。装着・起動確認が残

達成後の追加: タイトル / プロローグ / エンディング / 曲進行 / 難易度 / ポーズ / 隠しコマンド(§0)。未着手: プロローグ画像(#55〜#58)、キャリブレーション、Donack カメオ、判定音 SE