50 ポイント 投稿者 namyunwoo 2026-05-17 | 24件のコメント | WhatsAppで共有

フォーゴトゥン サーガ(1997年の韓国製 DOS RPG)をソースポーティングする

動機

  • 30年前、小学生のときに初めて買ったパッケージゲームがフォーゴトゥン サーガだった
  • 人生初のRPGで、自然とのめり込んだ
  • 20年以上忘れて過ごしていたが、今でも多くの人が遊んでいることを知った
  • 「これをマルチプラットフォームのゲームにできないだろうか?」
  • 残っていたのは1997年のPE32実行ファイルとデータファイルのみ(当然ソースコードはない)

アプローチ

  • 原作ゲームを再現する方法は大きく2つある
    • 仕様ベースの再解釈 — ゲームプレイを見て似たものを作り直す
    • 原作の関数単位で忠実に復元 — 逆コンパイルしたコードをそのまま移植する
  • 後者を選んだ。推測ではなく、検証済みの原作の挙動に従うため
  • 原作は1997年のWindows MSVC製

分析した内容

原作バイナリの逆コンパイル

  • Ghidra 12でPE32を処理。937関数を100%逆コンパイル成功
  • 51,799行のpseudocode C

データフォーマットの解析(48種類、すべて検証済み)

  • LZSS — 標準 + FAM派生形(ring init 0x00ref_offset のビット配置が異なる)
  • SPB — 256色 + RLE、1,155画像
  • MOB — キャラクター/NPCアニメーション 2,699フレーム。0xA4 header + RLE pixel + frame stride 20B
  • SCP — バイトコードVM、128以上のopcode、6,026 entry、43,036件の会話文
  • FAM — 292マップ、5 layer(base / overlay / collision / ...)
  • DAT — CHAR / ITEM 290種 / MAGIC / ABILITY / MONSTER
  • SAV — actor struct 0x2A4(676B)、party + inventory + global vars

ユーザー入力による直接検証

  • セーブファイルを直接パースしてactor structのoffsetを検証
  • 以前の誤ったマッピング(0x3C ATK→STR、0x40 INT→TLT など)を修正

作り上げたもの

  • Lua 263ファイル、157,277行
  • アセット 3,760個
  • LÖVE 2D 11.5 デスクトップビルド + love.js(emscripten)Webビルド
  • モバイル向け仮想ジョイスティック + 韓国語IMEを独自実装
  • SharedArrayBufferを有効化(COOP/COEP via coi-serviceworker)
  • IndexedDBによるsav永続化(ブラウザ環境)
  • 配布チャネル5種類 — Web / iOS / Android / Windows / macOS

再現範囲

  • タイトル / キャラクター作成 / フィールド / 会話 / ショップ / インベントリ / 装備 / 罠 / DETECT・UNLOCK / セーブ — 完了
  • 戦闘システム — 進行中

AIツール活用

  • GPT 5.5 の /goal 機能中心、Claude Codeは補助 + リアルタイムデバッグ

GPT 5.5 /goal の役割 — 逆コンパイル解析 / 修正の蓄積

  • 原作の関数cluster / call graph / opcode referenceの自動分析
  • データフォーマットのdeep dive(sav format、actor offset、FAM構造など)
  • 初期の自動デコード版でのmislabel修正を蓄積(51,799行の修正版)

Claude Codeの役割 — Lua移植 + 即時検証サイクル

  • 原作関数をread → Luaへ移植 → verify.sh test実行(100以上のtest mode、1,000以上のassertion)
  • ブラウザ環境のデバッグ(IDBFS / IME / SharedArrayBuffer など)
  • ユーザー報告を受けたら debug → fix → devデプロイ → 検証 → liveデプロイのサイクル

作業期間

  • 約1〜3か月

どんな成果物か

  • Play(ブラウザ): https://forgottensaga-classic.blogspot.com/2026/05/…
  • PC / モバイルの両方で動作。モバイルは仮想ジョイスティック + 韓国語IMEを独自実装
  • 原作ゲームプレイを忠実に再現 — Zソート、パレットサイクル、NPCステートマシン、SCP VMなど原作の挙動を1:1で再現

24件のコメント

 
chinnotching 26 일 전

私が中学生の頃、当時は珍しかった「予約購入」をした友達がいたのですが、ポガトゥンサガが発売日をなかなか守れず、私にずっと愚痴をこぼしていたあいつのことを思い出しますね。笑

 
namyunwoo 25 일 전

2年くらい?遅れてたんですよね(笑)

 
benjamin 27 일 전

ロマンがあふれていますね。素敵なプロジェクトを応援します!

 
namyunwoo 25 일 전

ありがとうございます。ロマンを見つけるのはなかなか難しいですね

 
chcv0313 29 일 전

名前を入れないとヒロ・エイミーに自動設定されていましたが、それはできないんですね。
バグだらけのゲームでしたが、移植しながらバグまで忠実に移植されたのか気になります

 
namyunwoo 28 일 전

むしろさらにバグが多いかもしれません……。少しずつ改善していきます。

 
shakespeares 29 일 전

すごいですね.. わあ

 
namyunwoo 25 일 전

ありがとうございます💪🏻

 
zz5414 2026-05-18

私も最近、小学生の頃に楽しく遊んだクラシックゲームをWebにポーティングしたいと思っていたのですが、こんな記事が上がってきましたね。動機や分析内容に関する文章をどこから持ってきてGeekNewsに載るのか気になります。

 
namyunwoo 25 일 전

(笑)、私が投稿したので

 
xguru 2026-05-18

https://github.com/NAMYUNWOO/forgottensaga_classic

リポジトリはこちらですね

 
namyunwoo 25 일 전

❤️ありがとうございます

 
gafani 2026-05-18

名前を間違えて入力してしまったのですが、どうやって消せますか? Esc の仮想ボタンが効かず、キーボードのバックスペースも効きません。ドキドキしますね

 
namyunwoo 28 일 전

ありがとうございます(泣)
Backspaceが効かないバグは修正しましたが、全画面でescを押すと全画面が終了してしまう問題はまだ対応中です..

 
sam1287 2026-05-18

素晴らしいです!

 
namyunwoo 25 일 전

ふふ、小さなファン心です..

 
teipub 2026-05-18

素晴らしいです!

 
namyunwoo 25 일 전

お褒めすぎです(笑) 😂

 
ifmkl 2026-05-18

わあ、本当にすごいです。

 
namyunwoo 25 일 전

ありがとうございます~~👍🏻👍🏻

 
kaydash 2026-05-18

うわ、本当にめちゃくちゃすごい

 
namyunwoo 25 일 전

ありがとうございます。少しずつ完成度を高めていきます。

 
mssmss 2026-05-17

ありがとうございます。ありがとうございます。応援しています。

 
namyunwoo 25 일 전

応援してくださってありがとうございます!