miércoles, 15 de octubre de 2025

[Notas Romhacking] 15-10-2025

Hace bastante que no creaba una entrada para contar en qué proyectos estoy trabajando, en parte porque muchas veces no estoy seguro de si los terminaré, y en otras simplemente por mera procrastinación.

En fin, comencemos:

1.- Donkey Kong Country 3 (SNES):


Trás terminada la herramienta de edición, me he propuesto en traducir este juego de la infancia de muchos, si bien existe la versión en español de GBA, personalmente nunca me gustó, es cierto que se considera superior en música y permite entre otras cosas un guardado más automático, pero el "zoom in" en los mapas, y  algunas modificaciones nunca me convencieron. Así que la solución para mi es hacer una traducción a la versión de SNES, para ello ocuparé parte del script de la versión de GBA. 


Entre algunas más complicadas. he modificado cierta rutina que pone al final la exclamación "!" cuando una etapa es pasada completamente (conseguir las 2 monedas bonus y la moneda DK), que debo decir que de las muchas veces que he jugado este título, nunca me había dado cuenta de esto, aquí parte de la rutina.

copy_stage_name:
	STA $FFE0,X		; Store current character into buffer
	INX			; Move output index
	INY			; Move input index
	LDA $A9DE,Y		; Load next character from stage-name table
	BIT #$00FF		; Test if character is zero (end of string)
	BNE copy_stage_name	; If not zero, continue copying
check_stage_complete:
	LDA $001C65		; Load stage completion flags
	AND #$001C		; 
	EOR #$001C		; Compare with full completion
	BNE return_to_routine	; If result != 0, stage is not 100%		
	LDA #$0021		; Add character "!"
	STA $7EFFE0,X		; Store after the stage name
	INX			; Move output index
return_to_routine:
	PLB			; Restore data bank												
	TDC			; Transfer Direct Page register to A (A = DP)
	STA $7EFFE0,X		; Store DP, add 00 to end
	RTS			; Return
Si bien encontrar la rutina me llevo un tiempo, en parte por mi falta de ganas. Modificarla ha sido menos complejo de lo que pensaba, puesto que si tuve que mover de sitio esta rutina, pero de manera afortunada en un espacio libre dentro del mismo banco, por lo cual no tuve que adentrarme demasiado en el código fuente. A continuación una imágen con el resultado después de modificar.



Así que si todo sale bien, será mi regalo de Navidad para la comunidad.

2.- Bomberman Jetters (GBA):

Este es el primer juego de Game Boy Advance que estoy traduciendo, y me he encontrado con varias ventajas que ofrece esta consola. La principal es que los juegos se cargan completamente en la CPU. ¿Y cuál es la ventaja de eso? —se preguntarán—.
Pues bien, en resumen, podemos acceder a cualquier parte de la ROM en cualquier momento, ya que no dependemos de manejar bancos que se vayan alternando, como ocurre en consolas más viejas, como la NES o la SNES.

Esto tiene un impacto directo en la traducción, ya que podemos mover el texto libremente a los lugares más convenientes, y solo debemos preocuparnos de manejar correctamente los punteros. Y qué mejor que hacerlo con mi propia herramienta, que gestiona punteros de 4 bytes en GBA (perdón por la autopromoción 😅).

Hablando de la ROM, esta es japonesa y nunca tuvo una versión americana, por lo que estoy usando como base una traducción puente realizada por Normmatt, quien además implementó la difícil tarea de incluir una rutina de texto con ancho variable (VWF).

Algo a destacar es que dicha rutina complica un poco el conteo de caracteres por línea, ya que el juego no formatea el texto automáticamente como en otros títulos. Así que habrá que tener paciencia con este proyecto, porque no sé cuánto me demoraré en completarlo.






Con respecto al apartado técnico que supone la traducción, los gráficos se encuentran comprimidos con LZ77, el algoritmo usado en la BIOS del GBA. Afortunadamente, nuestro colega CUE ha creado una herramienta que permite descomprimir y comprimir gráficos con facilidad. A él, por supuesto, se le darán los créditos correspondientes.

3.- Romancing SaGa (SNES):

Otro RPG. En este caso, mi idea inicial era ayudar a Damniel a pulir un poco su traducción, simplemente por mera satisfacción de ayudar a a terminar un proyecto de la comunidad. Así que comencé toqueteando la ROM para ver como modificar la introducción, integrar las letras del alfabeto español y ajustar las tablas de anchos variables presentes en la traducción puente, ya que este juego es originalmente japonés.

Sin embargo, soy consciente del tiempo que requieren este tipo de proyectos, y dado su poco tiempo disponible, él me ha autorizado a utilizar y modificar su trabajo para ofrecer una versión mejorada de su traducción.

Así que… próximamente 😉






Al igual que con Bomberman Jetter, alterar el texto con rutina VWF puede ser un calvario a la hora de contar caracteres, esto supone un gran problema a la hora de traducir, y es evidente la falta de una herramienta que se encargue de esto...

En el apartado técnico no tengo mucho que decir, si bien modificar los punteros es cosa sencilla, me he encontrado con un pequeño problema en el menú incial, en el que deber crear tu personaje, que impide volver atrás, por el momentos no lo he arreglado, porque me encuentro haciendo el grueso de la traducción, el script principal.

ROMS DE PICADILLO


Bomberman Tournament (GBA)

Internamente es igual al Jetters, por lo que debería ser relativamente sencillo, aunque igual de demandante en tiempo.

Bill & Ted’s Excellent Adventure (NES)

Si bien encontré los textos comprimidos en 5 bits, aún no he localizado los diccionarios de palabras del MTE que incluye internamente, pese a que sé cuáles son.

Otro punto desalentador es que los punteros parecen estar desordenados, lo que me hace pensar que requeriré una herramienta propia para modificarlos. Y sinceramente, ahora mismo me da pereza programarla, ya que necesitaría bastante depuración.

Wurm – Journey to the Center of the Earth! (NES)

Algo parecido ocurre con este juego. He encontrado los textos, el diccionario y los punteros, pero también están desordenados. En resumen, otro pequeño calvario.

Demi Kids: Light Version (GBA)

Mientras escribía esta entrada me había olvidado por completo de este juego. Actualmente manejo todos mis proyectos mediante batch files: de esta forma, al terminar, simplemente ejecuto un build.bat y se genera todo automáticamente, desde la ROM hasta el parche IPS. Esto tiene muchas ventajas, entre ellas poder mantener y modificar facilmente, teniendo un registro de todo, sin embargo me hace más olvidadizo, porque puedo dejar proyectos  a medio hacer, sin tener que preocuparme por olvidar cosas.

Entre lo que recuerdo, hace falta el dump completo del texto. Si bien  los gráficos comprimidos se encuentran extraidos y listos para reinsetarlos, creo aún hace falta algunos. Al menos encontré la fuente principal, que es una de las partes más importantes.

En cuanto al script, curiosamente maneja entradas multibyte, lo cual no debería representar un problema.