50 पॉइंट द्वारा namyunwoo 2026-05-17 | 24 टिप्पणियां | WhatsApp पर शेयर करें

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_offset bit layout अलग)
  • SPB — 256 रंग + RLE, 1,155 images
  • MOB — character/NPC animation के 2,699 frames। 0xA4 header + 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 (0x3C ATK→STR, 0x40 INT→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 के /goal feature का उपयोग, 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.sh test 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 टिप्पणियां

 
chinnotching 2026-05-22

जब मैं मिडिल स्कूल में था, उस समय एक दोस्त था जिसने उस दौर में बहुत कम होने वाली "प्री-ऑर्डर" की थी। Forgotten Saga रिलीज़ डेट बार-बार नहीं निभा पा रहा था, इसलिए वह मेरे पास आकर लगातार अपनी भड़ास निकालता था—उसी लड़के की याद आ रही है. हाहा

 
namyunwoo 2026-05-22

लगभग 2 साल? पीछे खिसकता रहा, हाहा

 
benjamin 2026-05-20

रोमांच उमड़ पड़ता है। इस शानदार प्रोजेक्ट के लिए शुभकामनाएँ!

 
namyunwoo 2026-05-22

धन्यवाद, रोमांच ढूंढना आसान नहीं है।

 
chcv0313 2026-05-19

अगर नाम नहीं डालते थे तो वह अपने-आप Hiro और Amy पर सेट हो जाता था, लेकिन यहाँ वह नहीं हो रहा है.
वह bugs से भरा हुआ गेम था, तो जिज्ञासा है कि port करते समय क्या आपने उन bugs को भी वैसे ही faithfully port किया है?

 
namyunwoo 2026-05-19

शायद इसमें और भी ज़्यादा बग होंगे.. इसे थोड़ा-थोड़ा करके सुधारने की कोशिश करूंगा।

 
shakespeares 2026-05-18

शानदार.. वाह

 
namyunwoo 2026-05-22

धन्यवाद💪🏻

 
zz5414 2026-05-18

मैं भी इन दिनों अपने प्राथमिक स्कूल के दिनों में मज़े से खेले गए किसी क्लासिक गेम को वेब पर पोर्ट करना चाहता था, और ऐसा ही एक लेख यहाँ दिख गया। यह जानने की जिज्ञासा है कि इस तरह के लेख, जिनमें प्रेरणा या किए गए विश्लेषण की बात होती है, कहाँ से लाए जाते हैं और GeekNews पर कैसे दिखाई देते हैं।

 
namyunwoo 2026-05-22

हाहा, क्योंकि मैंने ही इसे पोस्ट किया था

 
namyunwoo 2026-05-22

❤️धन्यवाद

 
gafani 2026-05-18

मैंने नाम गलत डाल दिया है, इसे कैसे मिटा सकता हूँ? Esc वाला virtual बटन काम नहीं कर रहा और keyboard का backspace भी काम नहीं कर रहा। दिल तेज़ी से धड़क रहा है।

 
namyunwoo 2026-05-19

धन्यवाद :'(
Backspace के काम न करने वाले bug को मैंने ठीक कर दिया है। लेकिन full screen में esc दबाने पर full screen बंद हो जाने वाली समस्या का समाधान अभी भी किया जा रहा है..

 
sam1287 2026-05-18

बहुत शानदार!

 
namyunwoo 2026-05-22

हाहा, बस थोड़ी-सी फैन फीलिंग है..

 
teipub 2026-05-18

कमाल है!

 
namyunwoo 2026-05-22

आप मेरी बहुत ज़्यादा तारीफ़ कर रहे हैं, हाहा 😂

 
ifmkl 2026-05-18

वाह, यह सच में कमाल है।

 
namyunwoo 2026-05-22

धन्यवाद~~👍🏻👍🏻

 
kaydash 2026-05-18

वाह, सच में कमाल है

 
namyunwoo 2026-05-22

धन्यवाद, मैं इसे धीरे-धीरे और बेहतर क्वालिटी के साथ पूरा करने की कोशिश करूंगा।

 
mssmss 2026-05-17

धन्यवाद। धन्यवाद। मैं आपका समर्थन करता हूँ।

 
namyunwoo 2026-05-22

हौसला बढ़ाने के लिए धन्यवाद!