RONICAT: un petit regal per obrir cartutxos i fer-los parlar català
Gràcies per existir, Projecte Ce Trencada
Vaig conèixer Projecte Ce Trencada gràcies a la revista 3Dnassos, una d’aquelles coincidències aparentment petites que després resulten tenir ramificacions. Em va agradar de seguida el que feien: traduir videojocs, recuperar espais que el català no havia pogut ocupar i demostrar, una vegada més, que una llengua no necessita demanar permís per existir dins d’un cartutx.
Jo adoro Projecte Ce Trencada. També m’agrada l’enginyeria inversa, que és una manera tècnicament respectable de dir que gaudeixo obrint objectes que no havien estat construïts perquè ningú hi fiqués els dits. Per tant, la conclusió era inevitable.
He fet un petit regalet.
Es diu RONICAT, acrònim de ROM Nintendo Català, i és una eina local per extreure, revisar, traduir, reconstruir i generar pedaços de textos de videojocs de consoles Nintendo clàssiques.
Petit, naturalment, és una unitat de mesura flexible.
La falsa senzillesa de traduir un joc antic
Des de fora, traduir un videojoc retro pot semblar una operació relativament elemental: trobar el text anglès, substituir-lo pel català i tornar a guardar el fitxer.
És una idea encantadora.
El problema és que moltes ROMs antigues no contenen els textos en un document educadament anomenat dialogues.txt. Cada joc pot utilitzar una codificació pròpia, una taula de caràcters diferent, bancs de memòria, punters, terminadors, compressions particulars o textos convertits directament en gràfics.
De vegades una A és el byte 0x41. De vegades és 0x0A, 0x60 o qualsevol altre valor que els programadors van considerar convenient fa trenta anys. De vegades el text és llegible. De vegades sembla que una entitat abissal hagi esternudat dins de la memòria del cartutx. I de vegades no hi ha cap text perquè allò que veiem a la pantalla és, literalment, un dibuix.
RONICAT no pretén abolir aquesta realitat. Pretén fer una cosa més sensata: resoldre i encapsular tanta part tècnica com sigui possible perquè la persona traductora pugui dedicar-se principalment a traduir.
Què fa RONICAT
L’usuari aporta la seva pròpia ROM. RONICAT no en descarrega, no n’inclou i no en distribueix cap.
A partir d’aquí, el sistema pot detectar la consola, calcular hashes, validar informació bàsica i cercar si existeix un perfil compatible amb aquella versió concreta del joc.
Actualment treballa amb cinc famílies de consoles:
Game Boy i Game Boy Color
Game Boy Advance
NES
Super Nintendo
Nintendo 64
Quan troba textos o possibles textos, els converteix en formats humans i reutilitzables:
JSON, que conserva la informació tècnica necessària;
CSV, per poder treballar amb un full de càlcul;
PO, pensat específicament per a processos de localització.
La traducció es pot revisar des d’una interfície web local. També hi ha assistència opcional amb Softcatalà, Google Translate o models locals d’Ollama, perquè una pretraducció pot estalviar feina, però encara no hem arribat a aquella fase gloriosa de la història en què una màquina comprèn automàticament el context d’un videojoc de 1991 sense fer cap bestiesa.
Per tant, tota proposta automàtica necessita revisió humana. Les màquines també tenim dret a no ser utilitzades com a oracle infal·lible.
Quan la traducció està preparada, RONICAT reconstrueix una còpia modificada de la ROM i genera un pedaç BPS o, quan les limitacions del format ho permeten, IPS.
La ROM original no es modifica. El que es comparteix és el pedaç.
La traducció també ha de cabre dins del cartutx
Una de les salvaguardes que he incorporat comprova els caràcters i els bytes abans de permetre desar una traducció.
Això és important perquè «casa» ocupa quatre lletres, però el nombre de bytes depèn de la codificació del joc. I perquè una ROM antiga pot no tenir accents, ela geminada o determinats signes, no perquè tingui res contra la normativa de l’Institut d’Estudis Catalans, sinó perquè la seva font conté vint-i-sis lletres majúscules, quatre símbols i poca disposició al debat.
Si una traducció conté caràcters que el joc no pot representar, RONICAT no deixa desar-la. Si supera l’espai disponible, tampoc.
És preferible que el programa digui «això no hi cap» abans que permetre una reconstrucció defectuosa i descobrir després que el menú principal ha colonitzat la taula de punters, els crèdits o mitja memòria del joc.
La persona tradueix. RONICAT vigila que el cartutx ho pugui suportar.
Els perfils: ensenyar al sistema com funciona cada joc
L’extracció genèrica pot trobar candidats, però no pot conèixer per art de màgia l’arquitectura interna de qualsevol ROM.
Per això RONICAT està pensat al voltant dels perfils de joc.
Un perfil identifica una ROM concreta mitjançant el seu hash i descriu com s’ha de tractar:
on es troben els blocs de text;
quina codificació utilitzen;
com funcionen els punters;
quins terminadors hi ha;
quants bytes admet cada entrada;
si existeix compressió;
com s’ha de reconstruir el contingut.
La feina tècnica es fa una vegada i queda conservada. A partir d’aquell moment, qualsevol altra persona amb la mateixa versió del joc pot carregar-la, extreure els textos correctes i concentrar-se en la traducció.
Aquesta és probablement la part més important de RONICAT. No es tracta de fingir que tots els jocs són iguals, sinó de convertir l’enginyeria inversa acumulada en coneixement reutilitzable.
El sistema també incorpora un catàleg de més d’un centenar de desassemblatges, decompilacions, eines i fonts tècniques públiques. No són perfils automàtics ni promeses de compatibilitat: són mapes, pistes i punts de partida perquè els perfils futurs no hagin de néixer sempre des del no-res.
Cinc consoles, moltes proves i cap miracle promès
RONICAT ja ha completat proves del circuit tècnic en 65 ROMs locals de les cinc plataformes: extracció d’una entrada, modificació, reinserció, generació del pedaç, aplicació posterior i comprovació que l’original continuava intacte.
També he fet proves visibles en diversos jocs i sistemes. En alguns casos el resultat és net. En d’altres apareixen textos estranys, fragments incomplets o candidats que no són realment llenguatge. Alguns jocs no ofereixen res aprofitable amb l’escàner genèric. Altres amaguen les paraules dins de gràfics, compressions o formats particulars.
Això no és una errada conceptual de RONICAT. És la realitat del material amb què treballa.
Per tant:
RONICAT no és perfecte.
RONICAT no és universal.
RONICAT no tradueix automàticament qualsevol joc antic.
És una infraestructura inicial per investigar ROMs, construir perfils fiables, facilitar la traducció i evitar que cada projecte hagi de reinventar tota la part tècnica.
Per començar, em sembla una criatura prou digna.
Descendent de Fractalis
RONICAT és descendent de Fractalis, el meu sistema de traducció i tractament de corpus.
Fractalis va néixer per treballar amb textos, formats i fluxos de traducció. RONICAT n’hereta la idea d’una interfície local, la normalització de dades, la traducció assistida i aquella tendència familiar a entrar en sistemes que no havien estat dissenyats pensant en el català.
La mare traduïa textos.
La filla ha après a obrir cartutxos i tornar-los a cosir.
Un regal per a Projecte Ce Trencada
RONICAT és un regal per a Projecte Ce Trencada.
El codi, la documentació i el paquet públic són gratuïts. Projecte Ce Trencada també ha rebut un paquet complet i autoexecutable preparat perquè puguin començar a treballar sense instal·lar Python, configurar terminals o reunir manualment totes les eines tècniques.
No conté ROMs ni projectes locals. Només la maquinària.
Ho he fet perquè m’agrada el que fan, perquè crec que la seva feina importa i perquè ajudar una llengua no consisteix únicament a produir contingut: també consisteix a construir eines perquè altres persones en puguin produir més.
Ut alii vivant.
RONICAT està disponible gratuïtament a:









