11 पॉइंट द्वारा colus001 2026-03-26 | 3 टिप्पणियां | WhatsApp पर शेयर करें

अब तक यह क्यों नहीं हुआ?

  • 35 साल पहले आई point-and-click adventure series The Legend of Kyrandia में, पूरी series में सिर्फ दूसरा भाग Hand of Fate ही Korean में localized नहीं था
  • ScummVM में implemented engines में Lucas का SCUMM या Sierra का SCI जैसे engines के लिए काफी fan Korean patches हैं, लेकिन Westwood के Kyra engine के लिए fan localization बहुत कम है
    • proprietary binary format, सिर्फ 1 byte को ध्यान में रखकर बनाया गया font rendering, और जरूरी fonts का न होना
  • Korean localization के लिए सिर्फ extract और translation काफी नहीं था; ScummVM के Kyra engine के text rendering code को भी बदलना पड़ा

अनुवाद

  • translation अपने-आप में बहुत कठिन नहीं था, और extracted scripts को LLM में चलाकर translate किया गया
  • गेम का tone बनाए रखने के लिए सिर्फ एक simple prompt दिया गया, और फिलहाल कोई बड़ी समस्या नहीं दिखी
    • हालांकि puns या wordplay जैसे सूक्ष्म हिस्से अच्छी तरह translate नहीं हुए

Reverse engineering

  • Westwood के proprietary game formats: PAK (package), EMC (scene script), DLG (dialogue), ENG (UI text)
  • हर format का reverse engineering करके Python tools बनाए गए
    • EMC -> KMC, DLG -> DLK, ENG -> KOR के रूप में translate करके OTHER.PAK में save किया गया
  • ScummVM code को modify करके fan translation की स्थिति में translated files को OTHER.PAK से load करने के लिए बदला गया
  • बिना किसी external dependency के, सिर्फ $ python tools/build_korean.py एक लाइन से सब build होकर .zip file बनती है, और उसे original game पर overwrite कर देने से काम पूरा हो जाता है

Font

  • मूल रूप से Korean font था ही नहीं, इसलिए उसे अलग से जुटाना पड़ा
    • Korea में officially released classic game The Dig में Korean font था, जिसे पहले से लिया हुआ था
    • font structure थोड़ा अलग था, इसलिए उसका header हटा दिया गया
  • ScummVM में Korean font renderer जोड़ा गया
    • सौभाग्य से Chinese fan translation के लिए बने font system में bitmap loading, 1bpp rendering, outline processing, और 1-byte + 2-byte merge (MultiSubsetFont) जैसी सुविधाएँ पहले से थीं
    • Kyrandia 1 में मौजूद Korean compositional font system के कारण 2-byte read logic भी पहले से था
    • सिर्फ EUC-KR के byte pair को glyph index में बदलने वाला logic जोड़ा गया
    • FM-Towns version में Japanese font था, उससे कुछ करने का सोचा था, लेकिन मामला आसानी से हल हो गया

Bugs के साथ जंग

  • "गागागागा" bug
    • लंबी dialogues को screen width के हिसाब से adjust करने वाली preprocessString() function 1 byte font के आधार पर implement की गई थी
      • 2-byte sequence के बीच में \r घुस जाने से बाद का सारा text टूट जाता था और "गागागागा" के रूप में दिखता था
    • scene script load करते समय _scriptLangExt को refer करने वाले हिस्से में error के कारण Japanese load हो रही थी
      • और संबंधित font न होने की वजह से फिर वही "गागागागा" दिखता था
    • दोनों मामलों में getFontOffset संबंधित character न मिलने पर 0 return कर रहा था; इसे सही करने में काफी मेहनत लगी
  • Game data not found
    • दूसरी बार run करने से अजीब तरह से crash हो रहा था
    • ScummVM में game exit के समय language को Korean के रूप में save कर देने से detection fail हो रही थी
    • फिलहाल detection अंग्रेज़ी में रखी गई, और अगर KOREAN.FNT मौजूद हो तो उसे fanLang में save करके process किया गया। यही सही तरीका निकला
  • Chunk overread bug
    • localized scene script KMC को ScummVM IFFParser parse करते समय Chunk overread error आती थी
    • IFF standard के अनुसार KMC package करते समय form_size = file_size - 8 के रूप में save किया गया था, लेकिन Westwood सिर्फ form_size = file_size save करता है
      • offset mismatch होने से error आई

ScummVM में योगदान

  • fan translation को ScummVM आधिकारिक तौर पर FLAGS_FAN(KO_KOR, EN_ANY) तरीके से support करता है
    • पहला fan translation की language है, दूसरा original language
  • engine start होने के बाद kyra_hof.cpp में switch करके वास्तविक Korean mode को support कराया गया और translation files load होने लगीं
  • file extension system language के अनुसार अलग है; DOS में DLG file के लिए English DLE है और German DLG
    • FM Towns base पर काम करते-करते जब DOS पर काम किया तो अचानक German सामने आ गई
  • KMC न होने पर EMC इस्तेमाल करने की व्यवस्था की गई, ताकि translation पूरी न होने पर भी game चल सके
  • PR छोड़ा गया, और जितनी चिंता थी उतनी प्रतिक्रिया नहीं आई; बस commits को थोड़ा व्यवस्थित किया गया

AI की संभावना

  • वास्तव में इसका अधिकांश काम OpenCode और Opus / Sonnet ने किया
  • मैंने project leader की तरह सिर्फ दिशा दी, test किया, debug किया, और हौसला बढ़ाया (यानी prompts दिए)
  • सारी सामग्री पहले से इकट्ठी थी, इसलिए सीधे खुद भी किया जा सकता था, लेकिन कहाँ से शुरू करना है यह समझना मुश्किल होता
  • Python और C++ code लगभग एक लाइन भी खुद नहीं लिखी, और लगा कि शायद यही AI के साथ engineering है
  • इसी वजह से AI coding को लेकर नज़रिया पहले से ज्यादा सकारात्मक हो गया

3 टिप्पणियां

 
roxie 2026-04-01

वाह, गेम स्क्रीन से पुराने दिनों की खुशबू महसूस हो रही है;;

 
computerphilosopher 2026-03-26

लगता है यह The Secret of Monkey Island जैसे गेम की तरह है। मज़ेदार लग रहा है।

 
colus001 2026-03-26

सही कहा। इसे प्रतिद्वंद्वी कहना तो शायद ज़्यादा होगा, लेकिन Kyrandia की Legend भी हिंदीकरण की वजह से काफ़ी लोकप्रिय थी। haha