¿BUG? en los emuladores de super nes cuando ejecutas el street fighter 2 turbo

Solo sucede con esa versión del SF2, no sucede ni con el world warrior, ni con el super street fighter 2.

Cuando ejecutas el street fighter 2 turbo, el orden de los luchadores es siempre el mismo, y empiezas siempre por el mismo, pero dependiendo del emulador es de una manera, o de otra.

Por ejemplo, con el bsnes, el primer combate es siempre contra zangief, y en el nocashsnes el primer combate es siempre contra dhalsim.

¿Alguien sabe a que se debe esto?.
atreyu_ac está baneado del subforo por "faltas de respeto"
Yo no lo sé, pero se me ocurre que quizá en la snes se elige el luchador usando lo que hay en una zona de memoria sin inicializar (con lo que puede haber cualquier valor) y en los emuladores a veces se inicializa a cero toda la memoria y cosas así. Pero es pura especulación.
Creo recordar y si la memoria no me falla, pasa mucho también en consola (mi 2º juego para la Super, desde el '94 le tengo y dado mucha cera, juraría que pasa eso que comentais), empezabas casi siempre por Dalshim (a veces también Zangief) y supongo influía según el luchador a elegir.
En SNES real yo siempre he empezado contra Dalshim en modo turbo. Y el orden de batallas era seguido (en The World Warrior creo que el orden era aleatorio).

En modo CE no jugaba mucho.

Hablo siempre de la primera partida, con la ram a 0.

Tal vez dependa de si el emulador inicia la máquina desde cero cada vez o busca una imagen de la ram anterior antes del arranque.
Que interesante el tema, la explicación de la Ram me gusta. Yo tuve el juego en su día(y lo tengo), y le dí mucha caña, creo recordar que siempre empezaba contra Dhalsim, aunque me suena que también empezabas contra Zangief, lo que ya no se es si después de la primera partida, o desde cero.
Pero lo de Dhalsim fijo.
Pues ni sabia yo esto, cuestión de probarlo en mi snes.
Pues sí, ya somos varios con el mismo tema, casi siempre Dalshim y a veces también Zangief, si no me equivoco alguna vez si variabas de luchador salía en primer combate Ryu, pero en mi caso casi siempre tiraba de Sagat o algunas veces Ken (también Ryu).
Luego como dice Josete, después van saliendo en seguidos en orden hasta llegar a los Jefazos y siguen el orden de nuevo.
@aranya por aquí igual, supongo que la explicación que nos ha dado Josete es la más lógica, junto con la forma que esté programado el juego entiendo yo.
He probado el juego PAL en mi SNES sin tocar las opciones y ha pasado esto.

Elijo a Blanka y el primer enemigo es Dhalsim, me dejo ganar, no continuo. Empiezo de nuevo, con Blanka y el primer enemigo es Guile.

Si apago la consola y vuelvo a empezar me sale Dhalsim, pero si reseteo me sale Guile.

Asi que lo de la RAM puede que tenga algo de razon, o eso o simpelmente han puesto orden a los personajes de manera que solo varia en un par en cada posicion (total, al final tienes que ganarlos a todos...).
mis pruebas con street fighter turbo y snes9x
primero al iniciar el emulador y con ryu sale zangief
luego si no resetas el orden es aleatorio,me ha salido honda,dalshin ,chun li,ken ect
titorino escribió:mis pruebas con street fighter turbo y snes9x
primero al iniciar el emulador y con ryu sale zangief
luego si no resetas el orden es aleatorio,me ha salido honda,dalshin ,chun li,ken ect


Cambia el nombre a la rom y prueba de nuevo.
josete2k escribió:
titorino escribió:mis pruebas con street fighter turbo y snes9x
primero al iniciar el emulador y con ryu sale zangief
luego si no resetas el orden es aleatorio,me ha salido honda,dalshin ,chun li,ken ect


Cambia el nombre a la rom y prueba de nuevo.

lo probaré
¿te refieres a la extension o al nombre del juego?
josete2k escribió:
titorino escribió:mis pruebas con street fighter turbo y snes9x
primero al iniciar el emulador y con ryu sale zangief
luego si no resetas el orden es aleatorio,me ha salido honda,dalshin ,chun li,ken ect


Cambia el nombre a la rom y prueba de nuevo.


¿Por qué se supone que eso funciona?, me tiene intrigado.
Señor Ventura escribió:
josete2k escribió:
titorino escribió:mis pruebas con street fighter turbo y snes9x
primero al iniciar el emulador y con ryu sale zangief
luego si no resetas el orden es aleatorio,me ha salido honda,dalshin ,chun li,ken ect


Cambia el nombre a la rom y prueba de nuevo.


¿Por qué se supone que eso funciona?, me tiene intrigado.



Porque cada vez que carga una rom nueva "algo" cambia... Es como si se encenderse la máquina desde cero (lógico puesto que apagarla es un paso necesario para cambiar de cartucho) mientras que si cargas una rom que ya ha cargado con anterioridad parece que el emulador lo gestione como un simple reset.

Cuando estaba testeando el parche de hardware real del AST tenía que ir renombrando la rom porque de no hacerlo el fallo supuestamente reparado seguía saliendo.

En este caso era la sram (archivo srm) pero por intentarlo...

Me refiero a cambiar el nombre de la rom, ponle una a al final o algo, antes de la extensión claro.
josete2k escribió:Porque cada vez que carga una rom nueva "algo" cambia... Es como si se encenderse la máquina desde cero (lógico puesto que apagarla es un paso necesario para cambiar de cartucho) mientras que si cargas una rom que ya ha cargado con anterioridad parece que el emulador lo gestione como un simple reset.

Cuando estaba testeando el parche de hardware real del AST tenía que ir renombrando la rom porque de no hacerlo el fallo supuestamente reparado seguía saliendo.

En este caso era la sram (archivo srm) pero por intentarlo...

Me refiero a cambiar el nombre de la rom, ponle una a al final o algo, antes de la extensión claro.


Que extraño eso.

Y como se comporta el SF2T en hardware real?, ahora mismo no puedo probar nada.
Señor Ventura escribió:
josete2k escribió:Porque cada vez que carga una rom nueva "algo" cambia... Es como si se encenderse la máquina desde cero (lógico puesto que apagarla es un paso necesario para cambiar de cartucho) mientras que si cargas una rom que ya ha cargado con anterioridad parece que el emulador lo gestione como un simple reset.

Cuando estaba testeando el parche de hardware real del AST tenía que ir renombrando la rom porque de no hacerlo el fallo supuestamente reparado seguía saliendo.

En este caso era la sram (archivo srm) pero por intentarlo...

Me refiero a cambiar el nombre de la rom, ponle una a al final o algo, antes de la extensión claro.


Que extraño eso.

Y como se comporta el SF2T en hardware real?, ahora mismo no puedo probar nada.


Lo han dicho arriba, si vienes de encendido Dalshim empieza los combates SIEMPRE, si vienes de reset es aleatorio aunque parece que Guile es el primero que entra en escena.

Ya te digo que con AST me pasaba lo mismo, si encendía el juego y hacía un reset no me fallaba, sin embargo si empezaba a jugar nada más encender se corrompía la sram (hablo de hardware real y una repro del cartucho).
Tiene pinta de que está roto, si. Con el SSF2 y con el SF2 no pasa, las partidas son aleatorias en cualquier condición.
@Señor Ventura aprovecho el hilo para proponerte una idea.
Como ves, aprovechando las virtudes del msu1 meterle al street fighter la intro del arcade con un video?
Sería complicado?
He estado probando el juego e incluso con el Super Ufo y siempre sale Dalshim 1º, si se resetea en vez de apagar ya es aleatorio como comentabais antes, da igual que sea modo turbo que modo champiñón, no recordaba mal del todo entonces, los otros que me salieran sería de resetear.
titorino escribió:@Señor Ventura aprovecho el hilo para proponerte una idea.
Como ves, aprovechando las virtudes del msu1 meterle al street fighter la intro del arcade con un video?
Sería complicado?


Sin problema, de hecho el zelda embute un video a la fuerza tras poner nombre, justo antes de comenzar la partida.

Ahora, yo lo haría a 16 colores para que pueda ser a pantalla completa, y sin ninguna compresión... total, la intro no requiere mucho mas.

yuragalo escribió:He estado probando el juego e incluso con el Super Ufo y siempre sale Dalshim 1º, si se resetea en vez de apagar ya es aleatorio como comentabais antes, da igual que sea modo turbo que modo champiñón, no recordaba mal del todo entonces, los otros que me salieran sería de resetear.


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.

Para mi es un come cocos ahora mismo, pero una vez que te habitúas tiene que ser fácil moverse con los editores hexadecimales.
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.
magno escribió: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?


Dije el estado de la memoria, no la rutina que defina la aleatoriedad.

Tras el soft-reset los valores que determinan el orden de los luchadores cambia, fué una conclusión lógica, no hace falta mirar nada para llegar a eso cuando puedes compararlo con el SF2 y el SSF2, además que desde el móvil en 10 segundos mucho mejor no me podía expresar.

Por lo demás, por supuesto, ir con buena fe o con mala fe siempre suele marcar la diferencia entre quejarse o no quejarse. Ya solo faltaría xD


Cuando pones el street fighter 2, o el super street fighter 2, el orden de los combates es totalmente aleatorio, pero eso ya no pasa en el street fighter 2 turbo, así que en realidad si que diría que algo si que cambiaron, porque eso está roto en ese juego en comparación con los otros dos.

Mi impresión, acertada o no, fué que tras el arranque el estado de la memoria era diferente, tenga sentido o no, pero viendo las características de la wram, y que los tres juegos se comportan diferente, tal vez habría que plantearse en serio si en todos los casos la rutina que define la aleatoriedad realmente es transferida tras el arranque, o si sucede mucho después en dos de los juegos, cuando en teoría la memoria ya no debería presentar ese problema.
Señor Ventura escribió:Dije el estado de la memoria, no la rutina que defina la aleatoriedad.


Ya, porque no sabías que existía [beer] Es broma, a lo que me refería con mi post anterior es que el estado de la memoria no se transfiere, sólo se inicializan las variables que vas a necesitar al valor que vayas a necesitar. Como el código que se ejecuta siempre es el mismo, siempre inicializarías la memoria al mismo valor, por lo cual siempre estarías obteniendo el mismo personaje al empezar a jugar ya sea en SF2, SF2T o SSF2.
Por tanto, para que se elijan personajes diferentes cada vez que empiezas una partida desde cero, necesitas un randomizer para determinar el personaje. Y este randomizer se ha de basar en algún factor aleatorio (lo que se suele llamar "semilla") para generar números aleatorios que permitan seleccionar personajes diferentes.
Así que realmente no es el estado de la memoria en sí misma lo que cambia (que es un factor importante, pero no es el motivo real), sino que han usado un generador de números aleatorios cutre que se ve afectado por los valores iniciales de la WRAM, que cambian en soft-reset y hard-reset.


Señor Ventura escribió:tal vez habría que plantearse en serio si en todos los casos la rutina que define la aleatoriedad realmente es transferida tras el arranque, o si sucede mucho después en dos de los juegos, cuando en teoría la memoria ya no debería presentar ese problema.


Las rutinas no se transfieren, muchacho [carcajad]
magno escribió:Ya, porque no sabías que existía [beer] Es broma


Pues esta si que me la mini sabía XD
La work ram de la snes es de tipo dinámica (dram), que consta de un transistor y un condensador que le da la carga con la que mantiene su estado. Lo tenía claro porque sabía que tiene la tendencia a descargarse, y una vez durante el dibujado de cada scanline requiere parar durante 40 master cycles para mantener la carga eléctrica de todas sus celdas, provocando que pare todo el hardware durante ese período de tiempo, y que baje la cantidad de información por línea (de 170.5 a 165.5).

Lo que no sabía es que al arrancar los condensadores duren descargados tanto tiempo (en el caso del street fighter 2, y suponiendo que esa rutina para la aleatoriedad de los combates se cargue en el primer instante del primer frame nada mas encender la máquina), siendo que la memoria para, para comprobar que estén cargados literalmente cientos de veces por frame.

magno escribió:a lo que me refería en mi post anterior es que el estado de la memoria no se transfiere, sólo se inicializan las variables que vas a necesitar al valor que vayas a necesitar. Como el código que se ejecuta siempre es el mismo, siempre inicializarías la memoria al mismo valor, por lo cual siempre estarías obteniendo el mismo personaje al empezar a jugar ya sea en SF2, SF2T o SSF2.
Por tanto, para que se elijan personajes diferentes cada vez que empiezas una partida desde cero, necesitas un randomizer para determinar el personaje. Y este randomizer se ha de basar en algún factor aleatorio (lo que se suele llamar "semilla") para generar números aleatorios que permitan seleccionar personajes diferentes.
Así que realmente no es el estado de la memoria en sí misma lo que cambia (que es un factor importante, pero no es el motivo real), sino que han usado un generador de números aleatorios cutre que se ve afectado por los valores iniciales de la WRAM, que cambian en soft-reset y hard-reset.


Aclarado. Contaba con que en la misma rom esas variables que mencionas solo diesen por defecto un valor fijo, y no que era la ram la que por su condición altera ese valor.

No me dió por pensar por qué un soft reset lo arreglaba... y ahora tiene sentido, claro. ¿En teoría bastaría con añadir al código un soft reset por software nada mas encender la máquina?.

magno escribió:Las rutinas no se transfieren, muchacho [carcajad]


Se leen, se leen xD
a mi esto me pasaba en los arcades con el street fighter 3, que si me elegia a ryu o ken me salian siempre los rivales en un orden determinado, y la verdad es que no me gustaba nada, prefiero que sea totalmente aleatorio...
en algun super street fighter 2, no recuerdo cual ni de que consola, te salian los 8 personajes originales de forma aleatoria cada 2 combates y entre esos te salian siempre los 4 nuevos, o sea, uno antiguo, uno nuevo, y asi todo el rato, y es una mierda eso, deberia ser siempre totalmente aleatorio, al final si sabes mas o menos quien te puede tocar el siguiente pierde la gracia y se hace mucho mas cansino jugar :(
esto que digo pasaba tambien en el infame dragon ball final bout de psx, juego que compré de salida por 10.000 pts junto con la consola en la unica tienda de mi ciudad donde se vendian videojuegos en el 97, y que te añadian siempre 1000 o 2000 pts al precio que habia por ejemplo en centro mail en las revistas :-|
el caso es que en el final bout tambien te iba saliendo un rival aleatorio de los 10 principales pero cada 2 combates luchabas contra uno de los personajes secretos, y siempre en el mismo orden, y eso es una mierda, el segundo combate era siempre contra goku pequeño super guerrero, el cuarto siempre contra trunks gt super guerrero, y asi.... yo no se porque hacen eso, hacen mucho peores los juegos de lucha }:/
23 respuestas