Sigo con mi queridísimo
World Cup Italia '90.
https://www.elotrolado.net/hilo_30-anos-de-world-cup-italia-90_2342246Resumiendo:
- La música que suena en los partidos depende de los equipos. Si el equipo del player 1 es sudamericano, suena la samba, si es europeo depende del rival y si es del resto suena la tercera melodía.
- Las camisetas coincidentes en colores se almacenan en una tabla del juego y se usan según esa tabla. Hay equipos que siempre juegan con la misma camiseta. La ropa de los porteros está también almacenada en una tabla.
- Los resultados entre equipos de la CPU dependen de sus atributos y un valor aleatorio. Dice que es imposible que haya empates tal y como está implementado el algoritmo, pero yo juro haber visto empates en muy poquitas ocasiones. Ahí creo que Claude alucina.
EDITO: He visto un longplay en youtube con la versión japonesa del juego en una máquina USA, y se ven bastantes empates en el mismo. Le he pasado el video a Claude y la ROM japonesa y me dice que en esa ROM si hay un flag que hace que en la fase de grupos pueda haber empates.
De todas formas, yo juraría que he visto empates en la versión del Mega Games I que es a la que he jugado siempre.
- El algoritmo de determinación de los equipos clasificados es bastante pocho. En el Mundial Italia '90 se clasificaban los dos primeros de cada grupo y los 4 mejores terceros. En este juego se clasifican los dos primeros, pero el resto de equipos, ya sean terceros o cuartos, se orden por criterio de puntos y goles marcados. Esto hace que se puedan clasificar los 4 equipos de un mismo grupo. A mí me pasó una vez.
- Los tiros de los penaltys de la CPU no son totalmente aleatorios. Hay tablas de patrones según la región del equipo.
¿Cómo se determinan los resultados de los partidos que juega la CPU?
Los partidos que no juegas tú se calculan así, en cada partido entre dos equipos del ordenador.
Los datos de partida
Cada selección tiene cinco valores de 1 a 5, en este orden: speed, skill, defence, keeper y total.
Paso 1: ataque y defensa de cada equipo
Ataque = (speed + skill) × total
Defensa = (defence + keeper) × 2
Paso 2: cuántos goles puede marcar cada uno
Para dos equipos A y B, se divide el ataque de un equipo entre la defensa del otro (división entera, sin decimales) y se suma 2:
Posibilidades de A = ataque de A ÷ defensa de B + 2
Posibilidades de B = ataque de B ÷ defensa de A + 2
Paso 3: se sacan los goles al azar
Los goles de A son un número aleatorio entre 0 y (posibilidades de A − 1), todos con la misma probabilidad. Lo mismo para B, con otra tirada. Como el ataque máximo es 50 y la defensa mínima es 4, un equipo muy superior puede llegar a marcar hasta 13 goles.
Paso 4: si empatan
Si salen los mismos goles, el juego tira otro número aleatorio y le da un gol más a uno de los dos equipos, al azar. Por eso los partidos simulados no terminan en empate.
Ejemplo: Alemania Occidental – Argelia
Alemania tiene 4, 3, 5, 5, 5, así que su ataque es (4+3)×5 = 35 y su defensa (5+5)×2 = 20.
Argelia tiene 2, 3, 1, 2, 2, así que su ataque es (2+3)×2 = 10 y su defensa (1+2)×2 = 6.
Posibilidades de Alemania: 35 ÷ 6 = 5, más 2 son 7. Marca entre 0 y 6 goles.
Posibilidades de Argelia: 10 ÷ 20 = 0, más 2 son 2. Marca 0 o 1.
De dónde sale el azar
De un generador de números que avanza en cada fotograma del juego y también con la IA y los tiros. Por eso el resultado depende de cuántos fotogramas hayan pasado, como viste con tu savestate.
Cuándo se calcula
En la fase de grupos, los partidos de cada jornada se resuelven por orden de calendario: los que van antes del tuyo, al empezar la jornada, y los que van después, nada más acabar tu partido. En las eliminatorias se usa la misma fórmula.
Lo que no entra en el cálculo
La clasificación, la forma de los equipos, los resultados anteriores o lo que hagas tú. Solo cuentan los cinco valores de cada equipo y el azar.
Dudas que mantengo
La parte del desempate la he deducido de instrucciones en decimal codificado en binario, que mi desensamblador muestra confusas. Tu observación de que no hay empates entre equipos del ordenador la respalda. Lo que no he podido explicar es el grupo en el que los cuatro equipos tenían 3 puntos.
¿Cómo se decide la música que suena durante el partido?
Solo hay tres melodías de partido, y se elige según la procedencia de los dos equipos. No interviene el azar ni la ronda del torneo.
Cómo se decide
Al preparar el partido, el juego mira los números de los dos equipos, el primero (el tuyo) y el segundo (el rival), y los clasifica en tres zonas:
0 a 12, Europa: Alemania Occidental, Italia, Francia, URSS, Dinamarca, Países Bajos, Inglaterra, Escocia, España, Hungría, Bélgica, Polonia y Yugoslavia.
13 a 17, América: Perú, Brasil, Argentina, Uruguay y México.
18 a 23, resto: Estados Unidos, Japón, Corea, China, Marruecos y Argelia.
La regla es:
Si el primer equipo es de América, suena la melodía nº 0x87.
Si el primer equipo es del resto, suena la nº 0x86.
Si el primer equipo es europeo, se mira al segundo. Si también es europeo, suena la nº 0x85. Si es americano, la 0x87. Si es del resto, la 0x86.
Es decir, hay una melodía “europea”, otra “americana” y otra “del resto del mundo”, y cuando juegan un europeo y un no europeo, gana la del que no es europeo. Si los dos son no europeos, manda el primer equipo.
Con dos jugadores
No cambia nada, porque la rutina solo mira los dos equipos y no el número de jugadores. El primer equipo es el del primer jugador. Por eso, Brasil contra Japón suena americana si Brasil es el primero y “resto del mundo” si lo es Japón.
Lo que no he podido comprobar
Cómo suena cada una de las tres melodías, porque no he decodificado los datos del motor de sonido. Solo sé sus números.
Que sea la única música durante todo el partido. Hay otras órdenes de música con otros números (entre 0x90 y 0x9E) en muchos puntos del juego, que parecen jingles de eventos como goles o el descanso.
¿Cómo se decide la camiseta que lleva cada equipo?
Cada selección tiene una equipación normal y una alternativa, y una tabla fija de parejas decide cuándo se cambia.
La regla
Al preparar el partido, el juego busca los dos equipos en una tabla de 61 parejas. Cada entrada (X, Y) significa que, cuando se enfrentan X e Y, el equipo Y se pone la alternativa. El orden no importa: da igual cuál sea el equipo 1, el local o el que lleva el jugador. Si la pareja no está en la tabla, los dos juegan con la equipación normal, aunque se parezcan. La tabla está hecha a mano por los desarrolladores y no se calcula a partir de los colores.
Países Bajos, Brasil y Japón no tienen alternativa, y no aparecen nunca como el equipo que cambia. Los porteros funcionan aparte: hay 5 equipaciones de portero y a cada equipo le toca una fija, sin comprobar choques de color.
Colores por equipo (aproximados)
Equipo Normal Alternativa Cambia contra
Alemania Occ. blanca verde Japón
Italia azul blanca Francia
Francia azul blanca nunca
URSS roja blanca España, China
Dinamarca roja blanca URSS, España, Hungría, Bélgica, China
Países Bajos naranja no tiene —
Inglaterra blanca azul Alemania Occ., Japón
Escocia azul amarilla Italia, Francia
España roja azul China
Hungría roja blanca URSS, Países Bajos, España, Bélgica, China
Bélgica roja blanca URSS, España, China
Polonia blanca roja Alemania Occ., Inglaterra, Perú, Japón
Yugoslavia blanca roja Alemania Occ., Inglaterra, Polonia, Japón
Perú blanca roja Alemania Occ., Inglaterra, Yugoslavia, Japón
Brasil amarilla no tiene —
Argentina celeste azul Francia
Uruguay celeste blanca Italia, Francia, Escocia, Argentina
México verde blanca nunca
EE. UU. roja azul URSS, Dinamarca, España, Hungría, Bélgica, Corea, China
Japón blanca no tiene —
Corea roja azul URSS, Dinamarca, España, Hungría, Bélgica, China
China roja amarilla nunca
Marruecos roja verde URSS, Dinamarca, España, Hungría, Bélgica, EE. UU., Corea, China
Argelia verde blanca México
Lo que no está comprobado
Los colores son una traducción mía de las paletas del juego. Supongo que las tres primeras entradas de cada paleta son los tonos de la camiseta, la cuarta el pantalón y la quinta las medias, porque encaja con equipos como Italia o Brasil, pero no lo he visto en pantalla.
Algunos tonos dudosos, como el rojo violáceo de Bélgica, pueden diferir de lo que ves.
¿Cómo se determina qué equipos se clasifican de la fase de grupos?
Se clasifican 16 equipos de los 24: los dos primeros de cada grupo y los 4 mejores del resto. El cuadro es fijo, no hay sorteo.
Quién se clasifica
Hay 6 grupos de 4 (A a F). La clasificación de cada grupo se ordena por puntos (2 por victoria, 1 por empate). Si hay empate a puntos, se mira un criterio de goles marcados, sin diferencia de goles ni enfrentamiento directo.
Primeros y segundos: pasan los dos primeros de cada grupo, 12 equipos, a puestos fijos del cuadro.
Los 4 puestos restantes: se reparten entre los 12 equipos que quedan, que son los terceros y los cuartos de todos los grupos. Se ordenan con el mismo criterio de puntos y goles y se van colocando de mejor a peor.
Restricción por grupo: cada uno de esos 4 equipos solo puede ocupar ciertos puestos libres según su grupo. Si sus dos puestos permitidos ya están cogidos, se lo salta y el juego prueba con el siguiente mejor.
Por eso un cuarto de grupo puede clasificarse si su registro es mejor que el de otros terceros, como te pasó con tus 3 puntos. Y por eso no entran necesariamente “los 4 mejores terceros”.
El cuadro de octavos
Los 16 puestos forman 8 partidos. Los cruces son:
Partido Cruce
1 1.º A contra uno de los 4 extra
2 2.º B contra 2.º F
3 1.º C contra uno de los 4 extra
4 2.º D contra 1.º E
5 2.º A contra 2.º C
6 1.º D contra uno de los 4 extra
7 1.º B contra uno de los 4 extra
8 1.º F contra 2.º E
A quién se enfrenta cada uno de los extras
Contra el 1.º A: un tercero o cuarto de los grupos C, D o E.
Contra el 1.º B: de los grupos A, C o D.
Contra el 1.º C: de los grupos A, B o F.
Contra el 1.º D: de los grupos B, E o F.
Dentro de cada grupo, el orden de preferencia es: A prueba primero contra el 1.º C y luego contra el 1.º B; B contra el 1.º C y luego el 1.º D; C y D contra el 1.º A y luego el 1.º B; E contra el 1.º A y luego el 1.º D; F contra el 1.º C y luego el 1.º D. Así nunca se enfrenta un extra a un ganador de su propio grupo, y es un esquema parecido al de los mundiales reales de la época.
El sorteo
Lo único aleatorio es el reparto inicial de las 24 selecciones en los grupos, que es completamente aleatorio y sin cabezas de serie. Después el cuadro es fijo.
Lo que no he comprobado
Cómo se emparejan los ganadores en cuartos y semifinales. Lo más probable es que sea por orden de partido (1 con 2, 3 con 4, y así), pero no lo he leído.
Si, a igualdad de puntos, el desempate por goles favorece al que marcó más o al que marcó menos. Al leer la comparación me sale que prefiere al que marcó menos, lo que parece un error del juego, pero puede que me falle algo.
Que las letras de los grupos en pantalla sigan el orden de las casillas del reparto, que es lo que he supuesto.
¿Qué ropa lleva cada portero?
Voy a leer las 5 paletas de portero y la tabla que dice cuál le toca a cada equipo.
Cada portero lleva una de 5 equipaciones fijas, y cada equipo tiene asignada la suya. No hay alternativa de portero, ni el juego comprueba si choca con la de los jugadores.
Las 5 equipaciones
Nº Camiseta Pantalón y medias
1 azul gris claro / blanco
2 amarilla marrón-ocre / amarillo
3 gris negro / casi negro
4 amarilla negro / casi negro
5 roja negro / casi negro
Qué equipos usan cada una
Azul (1): URSS, Hungría, Yugoslavia, Perú y China.
Amarilla con pantalón ocre (2): Dinamarca, Polonia, México y Marruecos.
Gris (3): Escocia, España, Brasil, EE. UU. y Corea.
Amarilla con pantalón negro (4): Alemania Occidental, Países Bajos, Bélgica, Japón y Argelia.
Roja (5): Italia, Francia, Inglaterra, Argentina y Uruguay.
Lo que no está comprobado
Los colores son una traducción mía de las paletas del juego. Supongo que las tres primeras entradas son los tonos de la camiseta, la cuarta el pantalón y la quinta las medias, igual que con los jugadores, pero no lo he visto en pantalla.
Por lo que he leído, nada impide que los dos porteros lleven la misma equipación. Por ejemplo, en un Italia contra Francia, los dos irían de rojo. Tampoco he visto que se compare el color del portero con el de los jugadores de campo del rival.
¿En los lanzamientos de penalty, los tiros de la CPU son aleatorios?
Voy a releer el código de la tanda de penaltis, que es donde se usan los números aleatorios en esta parte.
Hay probabilidades concretas, y dependen del equipo que tira. Para traducir las zonas 0 a 4 a algo comprensible, miro qué dirección de la cruceta corresponde a cada una en el tiro del jugador.
Sí, pero no son uniformemente aleatorios: son una tirada aleatoria con pesos fijos, y los pesos dependen de la selección que lanza.
Cómo se elige el tiro de la CPU
El juego saca un número aleatorio de 0 a 255 y lo compara con unos umbrales de una tabla. Eso da una de cinco zonas de tiro. La tabla depende de dos cosas:
El grupo de la selección que tira. Cuatro grupos: Europa (equipos 0 a 12), América (Perú, Brasil, Argentina, Uruguay y México), EE. UU., Japón, Corea y China, y Marruecos y Argelia.
Una variable de modo. Hay dos tablas distintas según su valor y no sé qué representa. Cambia sobre todo el grupo europeo.
Las cinco zonas son las mismas que usa el tiro del jugador con la cruceta: izquierda, arriba-izquierda, arriba (centro), arriba-derecha y derecha. No sé en qué lado de la pantalla cae cada una cuando la CPU tira por el lado contrario.
Probabilidad de cada zona (%)
Grupo Modo A: izq, arr-izq, arriba, arr-der, der Modo B: izq, arr-izq, arriba, arr-der, der
Europa 0, 0, 30, 15, 54 50, 10, 14, 20, 5
América 0, 0, 0, 20, 80 0, 0, 0, 20, 80
EE. UU., Japón, Corea, China 20, 0, 50, 20, 10 20, 0, 50, 10, 20
Marruecos, Argelia 5, 10, 5, 20, 60 5, 10, 5, 20, 60
Algunas cosas curiosas: los equipos americanos solo tiran a la derecha o arriba-derecha, nunca a la izquierda. Y los europeos casi no tiran a la zona que más usan en el otro modo.
Qué no influye
Por lo que veo, esa tirada no mira qué haces tú como portero: usa solo el número aleatorio y el grupo de la selección. Tampoco hay memoria de los penaltis anteriores.
Lo que no he podido comprobar
Qué es la variable de modo: dependería de lo que represente (dificultad, orden de saque, lado del campo...) que unos u otros pesos sean los que veas.
Qué zona queda a tu izquierda o derecha en pantalla.
Si después de elegir la zona hay otros factores, como fallar el tiro o la potencia, que no he leído.
Para comprobarlo, mira si los equipos americanos solo tiran a un lado en varias tandas.
Gracias, esa captura es una prueba directa: en el grupo D, Corea (KOR) y Uruguay (URU) tienen las dos 0-1-0 y 1 punto, es decir, un empate, y no es tu equipo, que es Brasil, el que sale en naranja. Eso contradice lo que leí en el código, así que voy a revisar la rutina de simulación con más cuidado.
Esa pantalla (elimination league, 1st day) sí existe en esta ROM, así que es el mismo modo de juego. Intento ver qué dice el vídeo que me pasas, para saber con qué versión está grabado.
La captura prueba lo que dices: en el grupo D, Corea (KOR) y Uruguay (URU) figuran con 0-1-0-1, es decir, un empate entre dos equipos del ordenador, porque tu equipo es Brasil (el naranja). Japón figura con una derrota y Argentina con una victoria, así que el único empate de la jornada en ese grupo es el de Corea y Uruguay. No he podido abrir el vídeo (el enlace me ha dado un error y, en cualquier caso, no puedo ver contenido en vídeo), así que me baso solo en tu captura.
Por qué choca con mi lectura
Esa pantalla (elimination league, 1st day) está en esta ROM, así que es el mismo modo de juego. Pero he reproducido la rutina de simulación fielmente, con la división, el resto, el decimal codificado y el generador aleatorio, y la he ejecutado 220 800 veces con todos los emparejamientos posibles. Sin el desempate saldrían empates en torno al 30 % de los partidos. Con el desempate, ninguna de las ejecuciones devuelve empate. Es decir, según el código de esta ROM, ese resultado no debería poder salir de esa rutina.
Qué puede explicarlo
Que el vídeo use otra versión de la ROM. El mismo juego existe en varias ediciones (suelto o dentro de recopilatorios), y alguna podría tener la simulación sin desempate o con él aplicado de otra forma. Es lo que me parece más probable.
Que haya un camino en esta ROM que registra empates y que yo no he visto. Es posible, pero ni mi lectura ni la emulación lo muestran.
Que en toda la jornada solo haya un empate, y no unos tres, es compatible con ambas cosas.
Cómo salir de dudas
Dime con qué ROM está grabado el vídeo. Si es otra, el código de esa versión puede ser distinto y puedo mirarlo.
Si consigues un empate así con la ROM del recopilatorio, apunta qué dos selecciones fueron y el valor de 32 bits que hay en 0xFFFE04 justo antes de la jornada. Con eso puedo calcular exactamente qué resultado debía salir y ver si coincide.
Hasta entonces, lo que te dije sobre que no hay empates entre equipos del ordenador solo lo mantengo para esta ROM, y con la advertencia de que tu captura apunta en sentido contrario.
Te paso la ROM japonesa World Cup Soccer (Japan) (En).md
Tiene todo el sentido: la cabecera de esa ROM japonesa dice SOCCER a secas, que es lo que se ve en el logotipo. Voy a leer la simulación de los partidos en esta versión.
Con esa ROM queda resuelto: la versión japonesa sí permite empates entre equipos del ordenador en la fase de grupos, y la del recopilatorio no.
Qué hace cada versión
La fórmula de simulación es idéntica en las dos. Los cinco valores de cada equipo coinciden (Alemania Occidental: 4, 3, 5, 5, 5, e Italia: 4, 2, 5, 5, 4 en las dos) y se calcula igual el ataque, la defensa y los goles posibles. La diferencia está en el desempate:
Japonesa: después de comparar los goles hay una comprobación extra. Solo se desempata (dando un gol más a uno de los dos al azar) si una variable ($FFBF8B) vale cero. El juego pone esa variable a 1 al empezar la fase de grupos y la pone a 0 al empezar las eliminatorias. Es decir, en grupos los empates se quedan y en eliminatorias nunca hay empate.
Recopilatorio (Mega Games I): esa variable no existe y el desempate se aplica siempre, así que no hay empates en ninguna fase entre equipos del ordenador. Parece un cambio deliberado de esa edición.
Comprobación con números
He ejecutado la rutina japonesa con todos los emparejamientos y muchas semillas. Con la variable a 1, el 29,5 % de los partidos acaba en empate, y con la variable a 0, ninguno. En tus capturas hay 5 empates entre equipos del ordenador en 22 partidos (un 23 %), que encaja bien con ese porcentaje.
Esto también aclara tus dos observaciones anteriores: el grupo con los cuatro a 3 puntos, que exige empates entre equipos del ordenador, y tu partida de ayer sin ningún empate. Cada una encaja con una de las dos versiones.
Qué cambia para lo que te expliqué
Todo lo demás que te he contado (clasificación, cuadro, música, camisetas, penaltis, atributos...) lo leí en la ROM del recopilatorio. Si juegas con la japonesa, puede haber más diferencias que no he mirado. Lo más probable es que haya cambios en el criterio de clasificación o en el cuadro, así que lo verificaría ahí antes de darlo por válido para esa versión. Si quieres, empiezo por la clasificación y el desempate de los grupos en la versión japonesa.