Pengo. Sus últimos secretos

Para hablar de esos juegos de las recreativas que tanto nos gustaban
Avatar de Usuario
robcfg
Amiga 2500
Amiga 2500
Mensajes: 2137
Registrado: 07 May 2009, 15:34
Sistema Favorito: Amstrad CPC
primer_sistema: Atari 800XL/600XL
Ubicación: Estocolmo
Gracias dadas: 843 veces
Gracias recibidas: 168 veces
Contactar:

Re: Pengo. Sus últimos secretos

Mensajepor robcfg » 01 Oct 2017, 08:46

Que pasa, Tron? :mrgreen:

Por favor, léete las normas del foro, que aceptaste al registrarte y preséntate en el subforo correspondiente.

Un saludo.

Avatar de Usuario
josepzin
Amiga 2500
Amiga 2500
Mensajes: 3103
Registrado: 12 Ene 2009, 14:36
Sistema Favorito: C64
primer_sistema: ZX81
Ubicación: Carthagonova
Gracias dadas: 4 veces
Gracias recibidas: 61 veces
Contactar:

Re: Pengo. Sus últimos secretos

Mensajepor josepzin » 01 Oct 2017, 13:09

Madresantisima, que explicación mas detallada :O

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 396
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 138 veces
Contactar:

Re: Pengo. Sus últimos secretos

Mensajepor explorer » 02 Oct 2017, 01:26

Ya he analizado el generador de números aleatorios y... me he llevado una sorpresa.

Empezando con la semilla $365A, genera 8192 valores distintos, hasta que comienza a repetirse por el mismo $365A.

Como comento en el mensaje anterior, lo que realmente se utiliza no es este valor de 16 bits, sino el resultado del byte más alto, almacenado en el registro 'a.

Bueno, pues si sacamos la estadística de los bits más bajos del byte más alto, el resultado es sorprendente.

Para los dos primeros bits (para sacar valores entre 0 y 3), el resultado es:

Código: Seleccionar todo

0 => 2048
1 => 2048
2 => 2048
3 => 2048

O sea, una distribución perfecta. Si escojo los tres primeros, para valores entre 0 y 7, tenemos:

Código: Seleccionar todo

0 => 1024
1 => 1024
2 => 1024
3 => 1024
4 => 1024
5 => 1024
6 => 1024
7 => 1024

Perfecto. Y para cuatro bits (0 a 15), tenemos:

Código: Seleccionar todo

0 => 512
1 => 512
2 => 512
3 => 512
4 => 512
5 => 512
6 => 512
7 => 512
8 => 512
9 => 512
10 => 512
11 => 512
12 => 512
13 => 512
14 => 512
15 => 512

También perfecto. Incluso en un caso, se usa un solo bit, el quinto, para sacar un valor aleatorio {0,16}:

Código: Seleccionar todo

0 => 4096
16 => 4096


Resumen: un generador perfectamente equilibrado.

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 396
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 138 veces
Contactar:

Re: Pengo. Sus últimos secretos

Mensajepor explorer » 02 Oct 2017, 23:21

He reeditado el primer mensaje del hilo, reordenando algunas partes, e incorporando nueva información, como por ejemplo:
  • descubierto el misterio de por qué en algunas situaciones un Sno-bee se queda quieto al acercarse un bloque deslizante
  • ¿es posible conseguir 30 000 puntos en las dos primeras fases?
  • la información del sándwich o bocadillo explicado unos mensajes más atrás

Avatar de Usuario
Tron
ZX Spectrum 16
ZX Spectrum 16
Mensajes: 7
Registrado: 30 Sep 2017, 09:36
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 7 veces
Gracias recibidas: 2 veces

Re: Pengo. Sus últimos secretos

Mensajepor Tron » 04 Oct 2017, 12:58

explorer escribió:Este hilo es para contar los secretos que he descubierto al desensamblar el código del Pengo (Sega, 1982).


Gracias por todas las respuestas. Son excelentes. Me gustaría darle algunos comentarios de mi experiencia.

1. El "querer ir a Pengo" no explica la velocidad de las abejas. Por ejemplo, si juegas el juego en EASY y luego juegas en HARDEST, puedes ver claramente que las abejas se mueven mucho más rápido en HARDEST. También me gustaría saber si hay alguna diferencia de velocidad entre EASY y MEDIUM.

2. Tienes razón. He experimentado esta abeja de rebote solamente una vez mientras que juega el juego. Normalmente los diamantes son alineados por Pengo o no en absoluto, y la posibilidad de ver esto sucede es extremadamente rara.

3. Estoy de acuerdo. De mi experiencia, Hechos 5, 9 y 13, las abejas parecen ser "más inteligentes" de lo normal. Aunque debo decir que los Hechos 14, 15 y 16 pueden ser muy difíciles comparados con la Ley 13.

4. Usted es correcto que esto puede suceder. Sólo una vez, he asombrado a una abeja en movimiento, y se movió en una posición de diamante.

5.You está correcto esto puede suceder, sin embargo no estoy seguro de entender su respuesta de la manera que he visto las abejas se mueven a través de los bloques. Por ejemplo, y esto sucede muy a menudo, una abeja se mueve a través de un bloque sin romper el bloque. Si Pengo está esperando con otro bloque para matar a la abeja, Pengo ya no puede matar a la abeja.

ABEJA >>>> BLOQUE (que no se rompe) BLOQUEO ... PENGO EN ESPERA DE EMPUJAR BLOQUE.

En los Hechos más rápidos como 13-16, cuando esto sucede, a veces es un Pengo muerto. ¿Es posible que la animación sea incorrecta, y Pengo todavía puede empujar su bloque para matar a la abeja? He intentado y no he tenido éxito.

6, 9 y 10. Cuando se juega en MAME o Arcade, es bastante obvio que sólo hay un número determinado de laberintos. Si están en RAM, entonces se escribe el código que proporciona sólo un número determinado de laberintos. En MAME y Arcade, a veces se obtiene el mismo laberinto dos veces seguidas.

7. Aceptar para no matar la pantalla de Pengo. Sin embargo, por experiencia, cuando en la Ley 17 o 33 o superior, etc, las abejas se comportan de manera diferente para el mismo laberinto, ya veces son "inteligentes" de lo que normalmente sería, como la Ley 5, 9 o 13.

11. He notado que cuando las abejas generan para iniciar el laberinto, Pengo se mueve más rápido por un corto período, y luego se ralentiza. ¿Por qué pasó esto?

Avatar de Usuario
Tron
ZX Spectrum 16
ZX Spectrum 16
Mensajes: 7
Registrado: 30 Sep 2017, 09:36
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 7 veces
Gracias recibidas: 2 veces

Re: Pengo. Sus últimos secretos

Mensajepor Tron » 04 Oct 2017, 13:01

robcfg escribió:Que pasa, Tron? :mrgreen:

Por favor, léete las normas del foro, que aceptaste al registrarte y preséntate en el subforo correspondiente.

Un saludo.


¿Qué quieres decir? ¿Qué te gustaría saber? :carta: :D

Avatar de Usuario
robcfg
Amiga 2500
Amiga 2500
Mensajes: 2137
Registrado: 07 May 2009, 15:34
Sistema Favorito: Amstrad CPC
primer_sistema: Atari 800XL/600XL
Ubicación: Estocolmo
Gracias dadas: 843 veces
Gracias recibidas: 168 veces
Contactar:

Re: Pengo. Sus últimos secretos

Mensajepor robcfg » 04 Oct 2017, 14:20

Por regla general, mayoría de los usuarios nuevos no se leen las normas del foro. O si lo hacen lo mismo es que no están claras y, si es ese el caso, os agradeceríamos que nos lo hicierais saber para redactarlas de forma que sean más comprensibles.

El primer párrafo de las normas es este:
Si eres nuevo, antes de empezar a participar es necesario que te presentes en la comunidad a través del subforo de Presentaciones. Di si desarrollas código o te interesa el hardware, en qué proyectos andas inmerso y qué máquinas son las que más te interesan. Así todos sabrán un poco más de ti.
.

Lo único que te pido es que dediques unos minutos a leer las normas y te presentes en el subforo arriba indicado, como cortesía con el resto de compañeros.

Imagínate que un día aparezco yo por tu casa sin conocernos de nada y te pregunto que si sabes como arreglar mi Amstrad que no enciende. Lógicamente te parecerá chocante. Aquí nos pasa un poco lo mismo y por eso se puso en las normas la necesidad de presentarse antes que nada.

Si tienes cualquier duda, los moderadores y administradores estamos a tu disposición (y a la de todos) para ayudarte.

Avatar de Usuario
Tron
ZX Spectrum 16
ZX Spectrum 16
Mensajes: 7
Registrado: 30 Sep 2017, 09:36
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 7 veces
Gracias recibidas: 2 veces

Re: Pengo. Sus últimos secretos

Mensajepor Tron » 04 Oct 2017, 15:52

robcfg escribió:Por regla general, mayoría de los usuarios nuevos no se leen las normas del foro. O si lo hacen lo mismo es que no están claras y, si es ese el caso, os agradeceríamos que nos lo hicierais saber para redactarlas de forma que sean más comprensibles.

El primer párrafo de las normas es este:
Si eres nuevo, antes de empezar a participar es necesario que te presentes en la comunidad a través del subforo de Presentaciones. Di si desarrollas código o te interesa el hardware, en qué proyectos andas inmerso y qué máquinas son las que más te interesan. Así todos sabrán un poco más de ti.
.

Lo único que te pido es que dediques unos minutos a leer las normas y te presentes en el subforo arriba indicado, como cortesía con el resto de compañeros.

Imagínate que un día aparezco yo por tu casa sin conocernos de nada y te pregunto que si sabes como arreglar mi Amstrad que no enciende. Lógicamente te parecerá chocante. Aquí nos pasa un poco lo mismo y por eso se puso en las normas la necesidad de presentarse antes que nada.

Si tienes cualquier duda, los moderadores y administradores estamos a tu disposición (y a la de todos) para ayudarte.



Para ser completamente honesto, vi este hilo en Pengo arcade navegando en Internet. La única manera que podía comunicarme con la retroalimentación y proporcionar mi experiencia, era unirse a este foro. He intentado ayudar al codificador a entender y verificar lo que realmente sucede en el juego de Pengo. Y como se puede ver muchas de las preguntas que he hecho y mi experiencia en este juego se ha añadido a los resultados en este hilo.

No entendí que no podía publicar en este hilo sin hacer mensajes en otro lugar primero.

He tratado de ayudar a su comunidad en las conclusiones de Pengo. Ese es mi interés, así como todos los juegos de arcade clásicos.

Copiaré este mensaje al subforo para hacerte feliz ... viewtopic.php?f=60&t=8099

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 396
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 138 veces
Contactar:

Re: Pengo. Sus últimos secretos

Mensajepor explorer » 04 Oct 2017, 23:31

Buenas.

La información que muestro en este hilo está sacada de mi experiencia, pero sobre todo, del resultado del análisis del código del propio juego.

Tron escribió:1. El "querer ir a Pengo" no explica la velocidad de las abejas. Por ejemplo, si juegas el juego en EASY y luego juegas en HARDEST, puedes ver claramente que las abejas se mueven mucho más rápido en HARDEST. También me gustaría saber si hay alguna diferencia de velocidad entre EASY y MEDIUM.

A ver si lo explico de forma más detallada.

El bucle de juego se ejecuta a toda velocidad. En cada vuelta de ese bucle, se mira a ver si se debe mover cada Sno-bee. La forma de saberlo es incrementando un contador que tiene cada Sno-bee. Si ese contador llega a un cierto valor(*), comprueba si el Sno-bee está en una posición múltiplo de bloque (múltiplo de 8 en la posición de las X, múltiplo de 16 en el caso de las Y). Si está en esa posición, el Sno-bee elegirá 1) huir del bloque de hielo que se le ha lanzado, 2) moverse por los pasillos, 3) como rompedor, ir hacia el Pengo o seguir rompiendo los muros, 4) ir hacia el Pengo en el 7/8 de las veces si está en una columna o fila aledaña, 5) ir hacia el Pengo si está en la misma fila o columna, 6) huir (al final del Act) en una dirección, y 7) correr por el muro hacia una esquina.

La dificultad (EASY, MEDIUM, HARD y HARDEST) lo que modifica es el valor(*) del límite del contador de animación. Aquí se aplica la fórmula ya comentada antes:

límite del contador de animación en cada vuelta = 12 - ( (número de Act - 1) / 4 + dificultad )

De esta manera, a medida que aumente el número de Act, sumada a la dificultad indicada por los switch de la placa, se reduce el límite del contador de animación, por lo que el Sno-bee hará más decisiones y se moverá más deprisa.

La diferencia entre EASY y MEDIUM, entonces, es fácil de comparar. Suponiendo que estamos en el Act 1:

limite en EASY = 12 - 0 = 12

límite en MEDIUM = 12 - 1 = 11

Bueno, parece muy poco, pero recordemos que cada vuelta del bucle de la lógica del programa se ejecuta muy rápido (ahora mismo no sé la frecuencia, no depende de ningún reloj o interrupción hardware, sino a la velocidad que marque el procesador Z80), así que por eso vemos a los Sno-bees cada vez más rápidos. E ir cada vez más rápido, más veces ocurre que están en múltiplo de bloque de hielo, haciendo que "piensen" más a menudo.

Es más fácil verlo entre el Act 1 y 16:

limite en EASY = 12 - ( (1 - 1) / 4 + 0 ) = 12
limite en EASY = 12 - ( (16 - 1) / 4 + 0 ) = 9 (un 33 % más rápido)

Ese valor de 9 es el mismo que el Act 1 en el modo HARDEST:

limite en HARDEST = 12 - ( (1 - 1) / 4 + 3 ) = 9

El valor en el modo más difícil, en el último Act:

limite en HARDEST = 12 - ( (16 - 1) / 4 + 3 ) = 6 (el doble de rápido que el Act 1 en modo EASY).


Tron escribió:2. Tienes razón. He experimentado esta abeja de rebote solamente una vez mientras que juega el juego. Normalmente los diamantes son alineados por Pengo o no en absoluto, y la posibilidad de ver esto sucede es extremadamente rara.
Hay algunos jugadores que después de juntar los bloques, miran a ver la posibilidad de convertirlo en bocadillo con un movimiento rápido de uno o dos bloques. Pero también juegan con un cronómetro al lado. Si están por debajo de los 30 segundos, no merece la pena, y es mejor acabar con los Sno-bees que resten. Y tampoco merece la pena si podemos matar a los dos últimos Sno-bees de un solo golpe, porque el premio son 1600 puntos, que seguro que son más que la suma de todos los bloques de hielo.

Tron escribió:3. Estoy de acuerdo. De mi experiencia, Hechos 5, 9 y 13, las abejas parecen ser "más inteligentes" de lo normal. Aunque debo decir que los Hechos 14, 15 y 16 pueden ser muy difíciles comparados con la Ley 13.
Sí.. cierto. El causante es la parte "/4" de la fórmula anterior. En esas fases "notamos" que los Sno-bees son "distintos" de las fases precedentes.

En el caso de los Act 14, 15 y 16, lo que vemos es una versión "acelerada" de los Sno-bees que aparecen en la 13.

Cuando yo digo que la 13 es la más difícil... es una apreciación personal. Quiero decir que en ese Act es como una mezcla perfecta (para los Sno-bees) entre aumento de velocidad y el tomar nuevas decisiones. Las fases siguientes, aunque los Sno-bees son más rápidos, también implican que "piensan" más veces, por lo que su comportamiento es más errático, no tan directo como en la 13.


Tron escribió:4. Usted es correcto que esto puede suceder. Sólo una vez, he asombrado a una abeja en movimiento, y se movió en una posición de diamante.
El juego no tiene una "física" completa, por lo que pasan estos casos. El juego usa, por una parte, la memoria de pantalla para ver dónde hay bloques, y por otro lado, las coordenadas de los sprites, para pintarles.


Tron escribió:5.You está correcto esto puede suceder, sin embargo no estoy seguro de entender su respuesta de la manera que he visto las abejas se mueven a través de los bloques. Por ejemplo, y esto sucede muy a menudo, una abeja se mueve a través de un bloque sin romper el bloque. Si Pengo está esperando con otro bloque para matar a la abeja, Pengo ya no puede matar a la abeja.

ABEJA >>>> BLOQUE (que no se rompe) BLOQUEO ... PENGO EN ESPERA DE EMPUJAR BLOQUE.

En los Hechos más rápidos como 13-16, cuando esto sucede, a veces es un Pengo muerto. ¿Es posible que la animación sea incorrecta, y Pengo todavía puede empujar su bloque para matar a la abeja? He intentado y no he tenido éxito.
No, no se puede.
Para que un bloque se pueda empujar, debe tener el camino despejado.

La animación del Sno-bee es correcta, y es lo que vemos. Lo que pasa es que no ocurre la animación del bloque de hielo rompiéndose. Y si no lo hace, el bloque sigue estando allí.

La única opción posible es... huir.

Una situación parecida es la que me pasaba a mi, hace tiempo. Tuve una temporada que solía empujar el bloque de hielo antes de que el Sno-bee estuviera dentro de la ruta del bloque deslizante. La consecuencia es que el bloque pasa por debajo del Sno-bee. Este se da la vuelta y mata al Pengo.

La solución fue... aprender a empujar el bloque cuando el Sno-bee esté en su mayor parte dentro de la ruta del bloque.

Tron escribió:6, 9 y 10. Cuando se juega en MAME o Arcade, es bastante obvio que sólo hay un número determinado de laberintos. Si están en RAM, entonces se escribe el código que proporciona sólo un número determinado de laberintos. En MAME y Arcade, a veces se obtiene el mismo laberinto dos veces seguidas.
Sí, cierto. La generación es aleatoria, pasillo por pasillo. En teoría... deberían ser 256, pero como siempre empiezan por la esquina inferior izquierda, eso limita bastante el número de ellos.

Sería interesante hacer una recopilación gráfica...

Tron escribió:7. Aceptar para no matar la pantalla de Pengo. Sin embargo, por experiencia, cuando en la Ley 17 o 33 o superior, etc, las abejas se comportan de manera diferente para el mismo laberinto, ya veces son "inteligentes" de lo que normalmente sería, como la Ley 5, 9 o 13.
Le aseguro que el Act 1 siguiente a un Act 16, los Sno-bees son exactamente los mismos que el primer Act 1 de la partida. No hay en ninguna parte del código, ningún cálculo referido al total de Act jugados.

Tron escribió:11. He notado que cuando las abejas generan para iniciar el laberinto, Pengo se mueve más rápido por un corto período, y luego se ralentiza. ¿Por qué pasó esto?
Humm... ¡no me había dado cuenta! :P Es, sencillamente, porque el juego empieza a realizar muchas operaciones. Se nota sobre todo cuando los Sno-bees empieza a romper bloques. Las animaciones de los bloques, más el propio movimiento del Sno-bee, hace que el Pengo vaya más lento.

Si un Sno-bee no está haciendo nada (está oculto, a punto de aparecer de un huevo), el programa hace un bucle vacío de unas pocas vueltas (5), sin hacer nada.

Código: Seleccionar todo

; -----------------------------------------------------------------------------
;; Comportamiento Snobees: 0 : una espera muy breve
         .org $3353
snobee_behaviour_wait:
         ld   b,5
85:         djnz   85b

         ret

Naturalmente, este bucle es muy pequeño comparado con todo lo que hace en una situación de juego normal, así que sí que lo notamos en el movimiento del Pengo. Y volveremos a ver cómo acelera el Pengo al final de las fases, cuando solo queden uno o dos Sno-bees.
Última edición por explorer el 15 Oct 2017, 05:29, editado 2 veces en total.

Avatar de Usuario
Tron
ZX Spectrum 16
ZX Spectrum 16
Mensajes: 7
Registrado: 30 Sep 2017, 09:36
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 7 veces
Gracias recibidas: 2 veces

Re: Pengo. Sus últimos secretos

Mensajepor Tron » 05 Oct 2017, 11:43

explorer escribió:
límite del contador de animación en cada vuelta = 12 - ( (número de acto - 1) / 4 + dificultad )

De esta manera, a medida que aumente el número de acto, sumada a la dificultad indicada por los switch de la placa, se reduce el límite del contador de animación, por lo que el Sno-bee hará más decisiones y se moverá más deprisa.

La diferencia entre EASY y MEDIUM, entonces, es fácil de comparar. Suponiendo que estamos en el Acto 1:

limite en EASY = 12 - 0 = 12

límite en MEDIUM = 12 - 1 = 11


Gracias por sus respuestas.

1. La Ley comienza con una cierta velocidad de abeja. Más adelante en la Ley, después de usar su lógica para las abejas restantes, las abejas se mueven más rápido. En su explicación anterior, no veo el algoritmo para explicar el código de las 2 velocidades diferentes durante la Ley. ¿Es el algoritmo que ha proporcionado anteriormente para el comienzo de la Ley, o la velocidad máxima para la Ley? ¿Cuáles son los algoritmos para la velocidad inicial de la abeja y la velocidad posterior de la abeja? ¿Hay sólo 2 velocidades, o más durante la Ley (sin contar la última abeja que huye)?

explorer escribió:Mi récord personal es de 980 420:
pengo_record_980420.png



12. Su puntuación añadida no es correcta. Usted ha escrito que es 655310 + 325110 = 980420. En realidad es 655360 + 325110 = 980470. Mientras que la puntuación máxima que se puede mostrar es 655350, cuando se vuelca su puntuación, el programa utiliza 655360 para el rollover. Si has grabado este juego, por favor mira el rollover y verás que la puntuación correcta es 980470. Si tienes tiempo, quizás quieras investigar el rollover de la partitura en Pengo ya que es muy interesante, y agrega tus hallazgos a esto hilo.


Volver a “Videojuegos arcade”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados