← 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_id
  • scenario_id
  • node_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)
kaedevn - ノベルゲームを作れるプラットフォーム