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
Wah, nuansa masa lalu yang terasa dari layar gamenya;;
Sepertinya ini game seperti The Secret of Monkey Island. Terlihat menarik.
Benar. Memang agak berlebihan kalau dibilang sebagai rival, tetapi Legend of Kyrandia juga cukup populer berkat lokalisasi bahasa Korea. hehe