Señor Ventura escribió:Definitivamente está roto. Lo que habría que hacer es cambiar el estado de como transfiere la rom a la wram el estado de la memoria tras el arranque, a como queda tal y como lo altera el soft reset, para que siempre sea aleatorio arrancando en frío.
Luego que si te damos mucha caña, tío... ¿¿Qué es lo que se transfiere de ROM a WRAM en el arranque?? Supongo que a esa conclusión has llegado mirando el código... ¿qué rutina hace esa "transferencia" de ROM a RAM?
Dejando de lado esa "hipotesis", creo que el problema viene más de lo que comenta
@josete2k. La SNES (el hardware real) al encenderse tiene la WRAM inicializada a un valor desconocido, que debería de ser todo $00 porque los chips DRAM que componen los 128Kbytes de WRAM suelen estar formados por una matriz de condensadores que, al arrancar, están descargados y por tanto, cada celda de memoria es $00.
Probablemente el juego tenga un "randomizer" es decir, una rutina de generación de números aleatorios para obtener el siguiente adversario, o para que la IA determine cuándo realizar ciertos ataques. Este randomizer puede ser muy básico y, como no hay posibilidad de obtener un verdadero número aleatorio desde el hardware, siempre está inicializado a los mismos valores y por tanto, da como resultado el mismo personaje al arrancar desde apagado.
Al reiniciar la máquina (soft-reset, aunque este término se suele usar cuando el reset se provoca desde el código, saltando al vector de RESET, pero en este caso, la pulsación del botón hace algo muy parecido), la WRAM tendrá el mismo contenido que antes de pulsar el botón de RESET y diferente al contenido cuando se inicia desde apagado (hard-reset). Es por eso que el randomizar arrojará valores diferentes.
Un randomizer bien hecho para este juego sería, por ejemplo, tener un contador de frames que tarda el jugador en pulsar el botón START para empezar una partida. Este tiempo es variable y es un buen punto de partida para generar números lo más aleatorios posibles.