30 साल पुराने RPG (Forgotten Saga) का source port करना
(forgottensaga-classic.blogspot.com)Forgotten Saga (1997 का कोरियाई DOS RPG) का source port करना
प्रेरणा
- 30 साल पहले, प्राथमिक स्कूल के समय मैंने जो पहला पैकेज्ड गेम खरीदा था, वह Forgotten Saga था
- ज़िंदगी का पहला RPG, और स्वाभाविक रूप से इसमें गहराई से डूब गया
- 20 साल से अधिक समय तक इसे भूलकर जीता रहा, फिर पता चला कि आज भी बहुत लोग इसे खेल रहे हैं
- "क्या इसे एक multi-platform game में नहीं बदला जा सकता?"
- जो बचा था वह सिर्फ 1997 का PE32 executable + data files थे (स्वाभाविक रूप से source code नहीं था)
दृष्टिकोण
- मूल गेम को फिर से बनाने के दो बड़े तरीके थे
- spec-आधारित reinterpretation — gameplay देखकर वैसा ही फिर से बनाना
- मूल functions के स्तर पर faithful restoration — decompiled code को जैसा है वैसा port करना
- मैंने दूसरा तरीका चुना, ताकि अनुमान नहीं बल्कि सत्यापित मूल behavior का पालन किया जा सके
- मूल संस्करण 1997 Windows MSVC पर था
क्या विश्लेषण किया
मूल binary decompile करना
- Ghidra 12 से PE32 को प्रोसेस किया। 937 functions का 100% decompile सफल
- 51,799 लाइनों का pseudocode C
data format cracking (48 प्रकार, सभी सत्यापित)
- LZSS — standard + FAM variant (ring init
0x00,ref_offsetbit layout अलग) - SPB — 256 रंग + RLE, 1,155 images
- MOB — character/NPC animation के 2,699 frames।
0xA4header + RLE pixel + frame stride 20B - SCP — bytecode VM, 128+ opcode, 6,026 entry, 43,036 dialogue lines
- FAM — 292 maps, 5 layer (base / overlay / collision / ...)
- DAT — CHAR / ITEM 290 प्रकार / MAGIC / ABILITY / MONSTER
- SAV — actor struct
0x2A4(676B), party + inventory + global vars
user input का direct verification
- save files को सीधे parse करके actor struct offset सत्यापित किया
- पहले की गलत mapping (
0x3CATK→STR,0x40INT→TLT आदि) को ठीक किया
क्या बनाया
- Lua की 263 files, 157,277 lines
- 3,760 assets
- LÖVE 2D 11.5 desktop build + love.js (emscripten) web build
- mobile virtual joystick + कोरियाई IME खुद implement किया
- SharedArrayBuffer सक्रिय किया (COOP/COEP via coi-serviceworker)
- IndexedDB save persistence (browser environment)
- 5 deployment channels — Web / iOS / Android / Windows / macOS
reproduction scope
- title / character creation / field / dialogue / shop / inventory / equipment / trap / DETECT·UNLOCK / save — पूरा
- combat system — प्रगति पर
AI tools का उपयोग
- मुख्य रूप से GPT 5.5 के
/goalfeature का उपयोग, Claude Code सहायक + real-time debug के लिए
GPT 5.5 /goal की भूमिका — decompile analysis / corrections accumulation
- मूल function cluster / call graph / opcode reference का automated analysis
- data format deep dive (sav format, actor offset, FAM structure आदि)
- शुरुआती auto-decoded version की mislabel corrections को लगातार जमा किया (51,799 lines का corrected version)
Claude Code की भूमिका — Lua porting + immediate verification cycle
- मूल function read → Lua porting →
verify.shtest run (100+test mode,1,000+assertion) - browser environment debug (IDBFS / IME / SharedArrayBuffer आदि)
- user report मिलने पर debug → fix → dev deploy → verification → live deploy cycle
काम की अवधि
- लगभग 1~3 महीने
यह किस तरह का परिणाम है
- Play (browser): https://forgottensaga-classic.blogspot.com/2026/05/…
- PC / mobile दोनों पर चलता है। mobile पर virtual joystick + कोरियाई IME खुद implement किया गया
- मूल gameplay का faithful reproduction — Z sorting, palette cycle, NPC state machine, SCP VM आदि में मूल behavior 1:1
24 टिप्पणियां
जब मैं मिडिल स्कूल में था, उस समय एक दोस्त था जिसने उस दौर में बहुत कम होने वाली "प्री-ऑर्डर" की थी।
Forgotten Sagaरिलीज़ डेट बार-बार नहीं निभा पा रहा था, इसलिए वह मेरे पास आकर लगातार अपनी भड़ास निकालता था—उसी लड़के की याद आ रही है. हाहालगभग 2 साल? पीछे खिसकता रहा, हाहा
रोमांच उमड़ पड़ता है। इस शानदार प्रोजेक्ट के लिए शुभकामनाएँ!
धन्यवाद, रोमांच ढूंढना आसान नहीं है।
अगर नाम नहीं डालते थे तो वह अपने-आप Hiro और Amy पर सेट हो जाता था, लेकिन यहाँ वह नहीं हो रहा है.
वह bugs से भरा हुआ गेम था, तो जिज्ञासा है कि port करते समय क्या आपने उन bugs को भी वैसे ही faithfully port किया है?
शायद इसमें और भी ज़्यादा बग होंगे.. इसे थोड़ा-थोड़ा करके सुधारने की कोशिश करूंगा।
शानदार.. वाह
धन्यवाद💪🏻
मैं भी इन दिनों अपने प्राथमिक स्कूल के दिनों में मज़े से खेले गए किसी क्लासिक गेम को वेब पर पोर्ट करना चाहता था, और ऐसा ही एक लेख यहाँ दिख गया। यह जानने की जिज्ञासा है कि इस तरह के लेख, जिनमें प्रेरणा या किए गए विश्लेषण की बात होती है, कहाँ से लाए जाते हैं और GeekNews पर कैसे दिखाई देते हैं।
हाहा, क्योंकि मैंने ही इसे पोस्ट किया था
https://github.com/NAMYUNWOO/forgottensaga_classic
Repo यहाँ है
❤️धन्यवाद
मैंने नाम गलत डाल दिया है, इसे कैसे मिटा सकता हूँ? Esc वाला virtual बटन काम नहीं कर रहा और keyboard का backspace भी काम नहीं कर रहा। दिल तेज़ी से धड़क रहा है।
धन्यवाद :'(
Backspace के काम न करने वाले bug को मैंने ठीक कर दिया है। लेकिन full screen में
escदबाने पर full screen बंद हो जाने वाली समस्या का समाधान अभी भी किया जा रहा है..बहुत शानदार!
हाहा, बस थोड़ी-सी फैन फीलिंग है..
कमाल है!
आप मेरी बहुत ज़्यादा तारीफ़ कर रहे हैं, हाहा 😂
वाह, यह सच में कमाल है।
धन्यवाद~~👍🏻👍🏻
वाह, सच में कमाल है
धन्यवाद, मैं इसे धीरे-धीरे और बेहतर क्वालिटी के साथ पूरा करने की कोशिश करूंगा।
धन्यवाद। धन्यवाद। मैं आपका समर्थन करता हूँ।
हौसला बढ़ाने के लिए धन्यवाद!