11 poin oleh colus001 2026-03-26 | 3 komentar | Bagikan ke WhatsApp

Kenapa belum pernah ada sampai sekarang?

  • Seri petualangan point-and-click The Legend of Kyrandia yang dirilis 35 tahun lalu. Dari seluruh seri, hanya sekuel kedua Hand of Fate yang belum pernah dilokalkan ke bahasa Korea
  • Di antara engine yang diimplementasikan di ScummVM, ada cukup banyak game dengan lokalisasi penggemar untuk SCUMM milik Lucas atau SCI milik Sierra, tetapi untuk engine Kyra milik Westwood hampir tidak ada
    • Format biner proprietary, rendering font yang hanya mempertimbangkan 1 byte, dan font yang dibutuhkan juga tidak lengkap
  • Untuk membuat lokalisasi Korea, tidak cukup hanya mengekstrak dan menerjemahkan; kode rendering teks di engine Kyra milik ScummVM juga harus diubah

Terjemahan

  • Proses menerjemahkannya sendiri tidak terlalu sulit, skrip yang diekstrak dijalankan ke LLM untuk diterjemahkan
  • Hanya diberi prompt sederhana agar nuansa game tetap terjaga, dan sejauh ini tampaknya tidak ada masalah besar
    • Bagian halus seperti permainan kata atau plesetan tampaknya masih belum diterjemahkan dengan baik

Reverse engineering

  • Format game proprietary dari Westwood: PAK (paket), EMC (skrip scene), DLG (dialog), ENG (teks UI)
  • Masing-masing format di-reverse engineer lalu dibuatkan alat Python
    • EMC -> KMC, DLG -> DLK, ENG -> KOR, masing-masing dibuat sebagai hasil terjemahan lalu disimpan ke OTHER.PAK
    Iklan
  • Kode ScummVM dimodifikasi agar untuk terjemahan fan, file hasil terjemahan dimuat dari OTHER.PAK
  • Tanpa dependensi eksternal, semuanya bisa dibangun hanya dengan satu baris: $ python tools/build_korean.py, lalu dibuat menjadi file .zip dan tinggal ditimpa ke game asli

Font

  • Pada dasarnya tidak ada font Korea, jadi harus dicari
    • Ada font Korea dari game klasik yang pernah dirilis resmi di Korea, The Dig, dan itu sudah sempat disimpan
    • Karena struktur font-nya sedikit berbeda, header-nya dihapus
  • Menambahkan renderer font Korea ke ScummVM
    • Untungnya, sistem font untuk terjemahan fan bahasa Tionghoa sudah punya pemuatan bitmap, rendering 1bpp, pemrosesan outline, sampai penggabungan 1-byte + 2-byte (MultiSubsetFont)
    • Ada juga sistem font Korea model kombinasi di Kyrandia 1, jadi logika membaca 2 byte pun sudah ada
    • Tinggal menambahkan logika untuk mengubah pasangan byte EUC-KR menjadi indeks glyph
    • Awalnya sempat ingin memanfaatkan font Jepang di versi FM-Towns, tetapi ternyata masalahnya bisa diselesaikan dengan mudah

Perang melawan bug

  • Bug "gagagaga"
    • Fungsi preprocessString() yang menyesuaikan dialog panjang dengan lebar layar diimplementasikan berdasarkan font 1 byte
      • \r masuk di tengah karakter 2-byte, sehingga seluruh teks setelahnya rusak dan tampil sebagai "gagagaga"
      Iklan
    • Saat memuat skrip scene, terjadi error di bagian yang mereferensikan _scriptLangExt, sehingga yang dimuat malah bahasa Jepang
      • Karena font yang sesuai juga tidak ada, hasilnya kembali tampil sebagai "gagagaga"
    • Keduanya terjadi karena getFontOffset mengembalikan 0 jika karakter yang dimaksud tidak ditemukan, dan perlu diperbaiki agar bisa berjalan dengan benar
  • Game data not found
    • Mulai dari eksekusi kedua, aplikasi anehnya crash
    • Saat game ditutup, ScummVM menyimpan bahasa sebagai Korea sehingga deteksi game gagal
    • Untuk sementara, deteksi tetap dilakukan sebagai bahasa Inggris, lalu jika ada KOREAN.FNT nilainya disimpan ke fanLang untuk diproses. Ternyata ini memang pendekatan yang benar
  • Bug Chunk overread
    • Saat ScummVM IFFParser mem-parsing skrip scene KMC yang sudah diterjemahkan, muncul error Chunk overread
    • Saat memaketkan KMC sesuai standar IFF, nilainya disimpan sebagai form_size = file_size - 8, tetapi Westwood justru menyimpan form_size = file_size
      • Offset jadi tidak cocok dan menimbulkan error
    Iklan

Berkontribusi ke ScummVM

  • Terjemahan fan didukung secara resmi oleh ScummVM dengan pola FLAGS_FAN(KO_KOR, EN_ANY)
    • Yang depan adalah bahasa terjemahan fan, yang belakang bahasa aslinya
  • Setelah engine dimulai, mode ini dialihkan di kyra_hof.cpp agar benar-benar mendukung mode Korea dan memuat file terjemahan
  • Sistem ekstensi file berbeda untuk tiap bahasa, dan untuk file DLG, di DOS bahasa Inggris adalah DLE sedangkan bahasa Jerman adalah DLG
    • Saat mengerjakan berbasis FM Towns lalu berlanjut ke DOS, tiba-tiba bahasa Jerman muncul
  • Jika tidak ada KMC, sistem dibuat menggunakan EMC agar game tetap berjalan meski terjemahan belum selesai sepenuhnya
  • Sudah membuat PR, dan tanggapannya tidak sekeras yang dikhawatirkan; akhirnya hanya commit-commitnya yang dirapikan

Potensi AI

  • Pada praktiknya, sebagian besar pekerjaan ini dilakukan oleh OpenCode dan Opus / Sonnet
  • Yang dilakukan penulis hanyalah seperti project leader: mendorong, menguji, debugging, dan menyemangati (memberi prompt)
  • Semua bahan sebenarnya sudah terkumpul, dan mungkin saja bisa dikerjakan sendiri, tetapi kemungkinan besar akan bingung harus mulai dari mana
  • Hampir tidak menulis kode Python maupun C++ satu baris pun, dan ini terasa seperti engineering bersama AI
  • Karena itu, penulis menjadi lebih positif terhadap AI coding

3 komentar

 
roxie 2026-04-01

Wah, nuansa masa lalu yang terasa dari layar gamenya;;

 
computerphilosopher 2026-03-26

Sepertinya ini game seperti The Secret of Monkey Island. Terlihat menarik.

 
colus001 2026-03-26

Benar. Memang agak berlebihan kalau dibilang sebagai rival, tetapi Legend of Kyrandia juga cukup populer berkat lokalisasi bahasa Korea. hehe