← About
Switch 対応の最小仕様(PixiJS 前提)
AI との対話から生まれた設計文書(原文)
ChatGPT との対話から生まれた設計文書(2026年2月) kaedevn の入力設計・解像度・セーブ仕様・アセット制約・命令セットの根幹を決めた一枚
1) 入力は "Action マップ" 固定
Pixi の pointerdown や keydown を直接ゲームロジックに繋げない。
アクション定義(固定)
- OK / Back / Menu
- SkipToggle / AutoToggle
- Log(任意だが推奨)
- QuickSave / QuickLoad(任意、ただ Switch で便利)
必須ルール
- すべての入力は
dispatch(Action)に集約 - UI ボタンもキーボードも同じ Action を発火
- 「クリック=次へ」みたいな直結は禁止(OK にマップするだけ)
2) 720p 基準レイアウト+セーフエリア
Switch は TV 前提。Web の px 固定は後で死ぬ。
- 論理解像度: 1280×720 を基準
- 実表示: resize でスケール(縦横比維持)
- セーフエリア: 上下左右 5%(= 64px / 36px 相当)
- UI 座標: アンカー+相対(固定 px に依存しない)
PixiJS での最小方針:
app.renderer.resize(w, h)
stage.scale.set(scale)
UIは layout(virtualW=1280, virtualH=720, safe=0.05) で再配置
3) セーブスキーマ固定(互換の核)
Switch に出すとき、ここが固定されてないと移植が破綻します。
最小セーブ JSON
save_schema_version(整数)engine_version(文字列)work_idscenario_idnode_id(実行位置:行番号/ラベル/ハッシュ)vars(フラグ・数値)read(既読管理の最小)timestamp
ルール
- セーブには画像/音声を入れない(参照 ID のみ)
- 後方互換は
save_schema_versionで吸収
4) アセット仕様(上限だけ決める)
Switch 移植時に最も問題になるのは「でかすぎる素材」と「連番 PNG の無制限」。
最小制約
- 背景: 最大辺 2048(まずこれで固定。余裕があれば後で増やす)
- 立ち絵: 最大辺 2048
- 連番 PNG: スプライトシート前提(フレーム個別 PNG 乱立禁止)、標準 fps: 12–15fps
- 音: カテゴリ分け必須 — BGM / SE / VOICE(音量スライダ用)
5) スクリプト命令セットを Core / Web に分離(凍結)
Switch 対応保証する命令を Core として固定し、Web 専用は隔離。
Core(Switch 保証)
- text, choice, jump
- set, if
- show, hide, move, fade
- playBgm, playSe, playVoice
- wait(click / timeout / voiceend)
Web 専用(隔離)
- openUrl, share, analytics, webOnlyUI
ルール:
- 本編シナリオは Core だけで完結できること
- Web 専用はメニューや導線に閉じ込める
PixiJS で「今すぐ切るべき抽象化」最小 3 点
Switch 対応を楽にするための、実装上の最小インターフェースです。
- IInput: Action を発火するだけ
- IAudio: BGM / SE / VOICE を同じ API で再生停止
- IStorage: Save / Load(Web は IndexedDB、Switch は別実装)
描画(Pixi)自体は当面ベタでもいい。 ただし 入力・音・保存は今抽象化しないと後で全面改修になります。
最小チェックリスト(これ満たせば OK)
- クリック/キー/ボタンが全部 Action 経由
- 1280×720 仮想座標+セーフエリア+スケール UI
- セーブ JSON に version / node_id / vars がある
- 画像上限 2048、連番はスプライトシート前提
- スクリプト命令が Core / Web に分離されている
- 入力・音・保存の抽象化が済んでいる
Ad: inContent (336x280)
Ad: stickyBottom (728x90)