← ドキュメント䞀芧

マルチプラットフォヌム — SDL2 で広がる䞖界

kaedevn で䜜った䜜品は、Web ブラりザだけでなく、Android、PC、そしお将来的には Nintendo Switch でもプレむできるようになりたす。これを支えるのが、プラットフォヌムごずに差し替え可胜な「抜象レむダヌ」の蚭蚈ず、C++ で曞かれたネむティブ゚ンゞンです。

1぀の䜜品が、どこでも動く理由

kaedevn の゚ンゞンは4぀の抜象むンタヌフェヌスを定矩しおいたす。

  • IInput — すべおの入力を統䞀的に受け取る。Web: PixiJS ポむンタ / キヌボヌド / ネむティブ: SDL_EventJoy-Con / タッチ / キヌボヌド
  • IAudio — BGM / SE / VOICE の再生制埡。Web: Web Audio API / ネむティブ: SDL_mixer
  • IStorage — セヌブ / ロヌドの抜象化。Web: IndexedDB / ネむティブ: ファむルシステムJSON
  • IOpHandler — Op 呜什の実行210行のむンタヌフェヌス定矩。Web: WebOpHandler (PixiJS) / ネむティブ: SDL2Engine (OpenGL)

スクリプト゚ンゞンVMはこれらのむンタヌフェヌスだけを䜿っお動䜜したす。「画面にキャラクタヌを衚瀺する」「BGM を再生する」ずいった凊理は、プラットフォヌムごずの実装に委譲されたす。

Web: PixiJS ゚ンゞン完党察応

珟圚のメむン環境です。PixiJSWebGLによる高速な 2D 描画で、4局のレむダヌ構造を持ちたす。

Layer 3: UIテキストりィンドり、遞択肢、メニュヌ
Layer 2: Overlay゚フェクト画像
Layer 1: Character立ち絵 L/C/R
Layer 0: Background背景画像

搭茉機胜:

  • GPU アクセラレヌションWebGLによる滑らかな描画
  • テキストの1文字ず぀衚瀺タむプラむタヌ効果
  • フェヌド、画面揺れ、ズヌム、パンなどのカメラ制埡
  • 46 皮の画面フィルタヌ時間垯・倩候・パヌティクル・季節感・雰囲気・色調・特殊効果・レトロ
  • レスポンシブ察応PC / スマヌトフォン䞡察応

ゲヌムシステム:

  • セヌブ / ロヌドIndexedDB、耇数スロット
  • バックログテキスト履歎の閲芧
  • 蚭定画面テキスト速床、音量、フルスクリヌン
  • ギャラリヌCG / シヌン回想
  • むンベントリアむテム管理
  • デバッグ画面倉数りォッチ、ブレヌクポむント

ネむティブ゚ンゞン: SDL2 + C++実機動䜜確認枈み

SDL2Simple DirectMedia Layerを䜿った C++ ネむティブ゚ンゞンが実装されおいたす。玄 1,100 行のむンタプリタコヌドず玄 800 行の゚ンゞンモゞュヌルで構成されたす。

゚ンゞンの構成

Event Loop → SDL2Engine (157行)
    ├── TextureManager (55行) ── 画像ロヌド + LRU キャッシュ
    ├── FontManager (52行) ──── SDL_ttf テキストレンダリング
    ├── AudioManager (61行) ─── SDL_mixer BGM/SE/Voice
    ├── Shader (55行) ────── GLSL フィルタヌ
    ├── FileStorage (40行) ──── JSON セヌブ/ロヌド
    ├── HistoryManager (60行) ─ 遞択履歎
    ├── AssetProvider (41行) ── アセットID→ファむルパス倉換
    └── Interpreter ──────── KS スクリプト VM
        ├── Tokenizer (91行) ── 字句解析
        ├── Parser (136行) ──── AST 生成
        ├── Evaluator (85行) ── 匏評䟡
        └── GameState (73行) ── 倉数・フラグ管理

Web ↔ ネむティブの機胜察応衚

  • 描画 — Web: PixiJS (WebGL) / ネむティブ: SDL2 + OpenGL
  • テクスチャ — Web: PIXI.Texture / ネむティブ: SDL_Texture + LRU キャッシュ
  • 音声 — Web: Web Audio API / ネむティブ: SDL_mixer
  • フォント — Web: PIXI.Text / ネむティブ: SDL_ttf
  • ストレヌゞ — Web: IndexedDB / ネむティブ: ファむルシステム (JSON)
  • 入力 — Web: Pointer / Keyboard events / ネむティブ: SDL_Event
  • スクリプト — Web: KscRunner + VM (TypeScript) / ネむティブ: C++ Interpreter
  • シェヌダヌ — Web: PixiJS Filter / ネむティブ: GLSL 盎接コンパむル

察応プラットフォヌム

  • Webブラりザ — 完党察応。技術: PixiJS / WebGL
  • Android — ビルド成功・実機動䜜確認枈み。技術: SDL2 + NDK + JNI
  • PCMac / Linux — ビルド成功・動䜜確認枈み。技術: SDL2 + CMake
  • iOS — 怜蚌䞭。技術: SDL2
  • Windows — 怜蚌䞭。技術: SDL2
  • Nintendo Switch — 2026幎䞋半期予定。技術: SDL2 + DevkitPro

Android 版は JNI ブリッゞJava ↔ C++を介しお SDL2 ゚ンゞンを呌び出したす。Gradle ビルド蚭定枈みです。

入力の統䞀: Action マップ

すべおのプラットフォヌムで、入力は「Action」ずいう共通の単䜍に倉換されたす。Web では優先床ベヌスの入力システムGAME / UI / MODAL の3レベルで、モヌダルが開いおいるずきにゲヌム入力が誀発火しない蚭蚈です。

  • OK — テキスト送り、決定。Web: クリック / Enter / Switch: A ボタン
  • Back — キャンセル、戻る。Web: Escape / Switch: B ボタン
  • Menu — メニュヌ衚瀺。Web: M キヌ / Switch: + ボタン
  • SkipToggle — スキップ切替。Web: S キヌ / Switch: ZR
  • AutoToggle — オヌト切替。Web: A キヌ / Switch: ZL
  • Log — バックログ。Web: L キヌ / Switch: - ボタン
  • QuickSave — クむックセヌブ。Web: F5 / Switch: L
  • QuickLoad — クむックロヌド。Web: F9 / Switch: R
  • Screenshot — スクリヌンショット。Web: P キヌ / Switch: 撮圱ボタン
  • HideWindow — UI非衚瀺。Web: H キヌ / Switch: X ボタン

䜜者はプラットフォヌムごずのボタン配眮を意識する必芁はありたせん。「OK が抌されたらテキストを進める」ずいうロゞックだけを曞けば、Web でも Switch でも正しく動䜜したす。

解像床ずセヌプリア

kaedevn は論理解像床 1280x720 を基準に蚭蚈されおいたす。

  • TV出力Switch: セヌプリア5%64px æ°Žå¹³ / 36px 垂盎を確保し、画面端が切れおも重芁な UI が隠れない
  • スマヌトフォン: アスペクト比を維持し぀぀スケヌリング
  • PC ブラりザ: りィンドりサむズに远埓

UI の配眮はアンカヌベヌスの盞察座暙で定矩されるため、ハヌドコヌドされたピクセル倀に䟝存したせん。

䜜者にずっおのメリット

  1. 䞀床䜜れば党プラットフォヌム: スクリプトもアセットも共通
  2. 移怍䜜業は䞍芁: ゚ンゞン偎が各プラットフォヌムに察応
  3. 品質が保蚌される: 281 行の C++ ナニットテスト + 107 の TypeScript テストで動䜜を怜蚌
  4. 将来性: 新しいプラットフォヌムが远加されおも、䜜品はそのたた動く

関連ドキュメント

Ad: inContent (336x280)
Ad: stickyBottom (728x90)
kaedevn - ノベルゲヌムを䜜れるプラットフォヌãƒ