11 poin oleh colus001 27 hari lalu | 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
  • 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"
    • 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

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 21 hari lalu

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

 
computerphilosopher 27 hari lalu

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

 
colus001 27 hari lalu

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