Duda/Curiosidad créditos finales Street Fighter 2 Champion Edition

Buenas,

Decir que soy un apasionado de Street Fighter 2, concretamente de la versión Champion Edition, ya sea la arcade (emulada en MAME) o de cualquier recopilatorio, como puede ser la edición del 30th Anniversary que trae todas las versiones.

Como buen jugador finalizo al 99% de las veces el juego sin perder un solo round, por lo que siempre me aparece el final de los créditos, donde aparecen todos los personajes rompiendo barriles y cajas mientras aparecen los nombres de los desarrolladores.

Pues bien, cuando cada personaje hace su movimiento para romper el barril o la caja, finaliza con una pose, y siempre me he preguntado porque en algunas ocasiones se utiliza una pose o la otra.

Imagen
Imagen

Yo diría que es algo aleatorio, que te puede aparecer una pose u otra, pero no estoy al 100% y no he encontrado info sobre ello.

¿Alguien puede confirmar si realmente esto sucede de forma aleatoria o bien hay que realizar algo en concreto durante el juego para que los personajes muestren una pose u otra?

Saludos.
Ni idea, pero te lo upeo solo porque me ha venido a la cabeza el tema de staff roll que para mí es el mejor de ese juego.
Gracias por el upeo. Sigo buscando info sin éxito. Inclusos las IAs no saben darme una respuesta concreta.
Bido escribió:Gracias por el upeo. Sigo buscando info sin éxito. Inclusos las IAs no saben darme una respuesta concreta.


He pasado el hilo y la rom sf2ce.zip del romset MAME 0.260 a Claude, me dice lo siguiente. Parece ser aleatorio al 50/50.

Primero leo el hilo para ver cuál es la duda.

La duda es si en los créditos finales de *Champion Edition* la pose con la que acaba cada personaje al romper el barril o la caja es aleatoria o depende de algo. Miro la ROM.

La ROM de programa son los tres ficheros `s92e_23b`, `s92_22b` y `s92_21a` (código del 68000). Compruebo qué herramientas tengo para desensamblar 68000.

Necesito desensamblar el 68000 y aquí no hay herramienta, así que antes de escribir una miro si en la ROM hay textos que ayuden a localizar la escena de los créditos.

Aparecen los textos de los créditos (el personal de Capcom) hacia `0x10300`. Para leer el código que los dibuja y controla la animación necesito un desensamblador de 68000, así que escribo uno.

Busco ahora el código que usa esa lista de nombres del personal, buscando referencias a su dirección.

Hay una tabla de punteros en `0x1020A` que apunta a los textos, y justo antes y después de los textos hay código. Miro ese bloque.

Ese bloque dibuja el texto del personal. Corrijo un fallo de mi desensamblador con `ext` (confundido con `movem`) y reviso el resto de la rutina de créditos.

Sigo leyendo la rutina de los créditos para encontrar la parte que controla a los personajes.

Antes de seguir leyendo código a ciegas, compruebo si ya hay documentación sobre esa escena de créditos.

Hay un despachador de objetos por tipo en `0x14612`, con una tabla de punteros a rutinas. La leo para sacar las rutinas de los tipos `0x50`, `0x53` y `0x54`, que son los que crean los créditos.

Me equivoqué en la dirección base de la tabla (la extensión está en `0x1461A`, así que empieza en `0x1462A`). La recalculo y leo las rutinas de los tipos de los créditos.

Los tipos `0x50`–`0x54` apuntan a rutinas hacia `0x2FCE0`–`0x311F0`, justo después de los textos de los finales. Desensamblo la primera.

Cada personaje tiene su propia rutina de créditos dentro de este manejador. Saco las direcciones de las 12 y empiezo por la de Ryu para ver cómo acaba en pose.

Cada personaje pasa por varias fases. Tras la rotura, la máquina de estados salta a la fase 2 (`0x309FA`). Es el sitio donde esperaría la pose, así que la leo.

Sí, la ROM lo aclara: **es aleatorio, un 50/50**, y no depende de nada que hagas tú. No lo he comprobado jugando, solo leyendo el código del 68000 de `sf2ce` (la versión World).

**Cómo lo decide el juego**

Cada luchador de los créditos tiene su propio objeto con varias fases: primero rompe el barril o la caja, luego espera 45 fotogramas y después elige la pose. En el momento de elegirla ocurre esto:

1. Llama a la rutina `0x0344`, que es un generador de números pseudoaleatorios. Calcula cada valor a partir de un estado de 16 bits que va cambiando en cada llamada.
2. Se queda con los 5 bits bajos del resultado, de 0 a 31.
3. Comprueba ese número contra una máscara fija, `0x55555555`: si es par, activa un indicador interno del luchador y, si es impar, lo deja apagado.

Como hay 16 pares y 16 impares, sale 50 % para cada pose. Después, el código de cada personaje se bifurca con ese indicador. Por ejemplo, en uno de los casos, con el indicador activo hace un movimiento vertical siguiendo una tabla y reproduce un sonido, y sin él hace otra cosa. Cada luchador tira su propio dado, así que puedes ver una pose en uno y otra en otro dentro de la misma escena.

**Qué no influye**

En esa rutina compartida no hay ninguna comprobación de tu personaje, de las vidas, del tiempo, de los *perfects*, de si eres 1P o 2P ni de la dificultad. Solo cuenta el número aleatorio. Si no pierdes un asalto, sí es lo que desbloquea que salgan los créditos, tal como recogen las fichas del juego ("Try to beat the game without losing any rounds"), pero eso no cambia las poses.

**Lo que no he podido comprobar**

- No sé qué pose de tus capturas (A o B) corresponde a cada valor del indicador, ni si es la misma correspondencia en los 12 personajes. Eso habría que verlo en pantalla.
- Podría haber otras elecciones aleatorias dentro del código específico de algún personaje que no haya leído entero.
- El generador es determinista: con exactamente las mismas entradas y el mismo momento del arranque saldría lo mismo. En la práctica parece aleatorio, porque su estado se usa también durante los combates.

Para contestar en el hilo, algo así sirve: *"Según el código de la ROM de SF2 CE (World), la pose final de cada personaje en los créditos se decide con una tirada aleatoria 50/50, hecha por separado para cada luchador al llegar a esa fase. No depende de lo que hagas en la partida."*
3 respuestas