Hace 2 años | Por senfet a youtube.com
Publicado hace 2 años por senfet a youtube.com

La era de los "8 bits" de finales de los 80 trajo los videojuegos al hogar con sistemas como NES. Los desarrolladores de juegos de la época produjeron juegos icónicos e introdujeron géneros que todavía nos acompañan hasta el día de hoy, mientras trabajaban con hardware que tenía serias limitaciones. Esta charla explorará cómo los desarrolladores de NES crearon más con menos, analizando las técnicas utilizadas en los juegos de NES desarrollados profesionalmente para manejar la física, la detección de colisiones, la aleatoriedad, la compresión...

Comentarios

Shinu

#1 Brutal el método que usaba el FF para "generar" los números aleatorios lol

meneandro

#2 No tanto, en esos tiempos lo típico era precalcular cualquier cosa más compleja de la cuenta o imposible de hacer en tiempo real (siempre y cuando no te robara más ram de la cuenta, que los recursos eran muy limitados).

De hecho, tanto este como el método del contra no los consideraría "estúpidos", sino formas de ahorrar y aprovechar ciclos de reloj respectivamente (en un caso tendría memoria disponible y querría ahorrar ciclos para los cálculos de los combates y en el segundo caso no dispondría de demasiada memoria como para gastar en tablas y aprovecharía algunos ciclos libres para hacer un truco un poco sucio pero efectivo).

Far_Voyager

#6 Amstrad CPC:
10 RANDOMIZE TIME
20 X = RND(1)

Y aun así se repetían los números.

Especialmente comparado con lo que hoy se encuentra a veces sobre todo en dispositivos móviles, por mucho que el tipo de interfaz que usan consuma muchos recursos por necesidad.

meneandro

#9 Porque era una rutina basic, y a saber cómo generaba esos números, el z80 no tenía generador de números aleatorios en hardware como tienen los procesadores de hoy en día.

Las consolas no tenían roms con rutinas BASIC como los microordenadores, accedían directamente al hard (si acaso tenían alguna ligera capa BIOS o algún mínimo middleware hecho por el fabricante).

robustiano
perreme

#15 la mejor tira sobre informática de la historia.

l

#11 #9 Supongo que el reloj tampoco tenia mucha resolucion. Si solo da segundos enteros, facil que repita. si da milisegundos ya es mas dificil repetir.
#13 #16 Un profe de mates decia a los alumnos que se inventasen numeros aleatorios e hicieran otro tanda con aleatorios de verdad y el descubria cual es cual. Los aletorios tenian repeticiones de numeros mas largas, porque a los alumnos eso no les parecia aleatorio y las hacian mas cortas.

anv

#24 a ver. El dato del reloj se usa como semilla para iniciar una secuencia. No se usa el número en si mismo.

l

#30 #26 Pero si solo tienen esa entrada el resultado sera el mismo. Si la resolucion son segundos, es facil que se repita el valor ,con milis, es mucho mas improbable. No se si introduce otros datos como tecleo. Temperatura, no las sabrá y raton no lo tenia.

anv

#31 Si la resolucion son segundos, es facil que se repita el valor

¿A ti te parece que la cantidad de segundos que tarda el usuario en encender el ordenador y arrancar el programa puede repetirse fácilmente?

meneandro

#24 Piensa en una función hash. Depende de lo buena o mala que sea, generará más colisiones o no (en este caso, repetirá más veces números o no). En este caso, más que echarle la culpa al reloj, diría que simplemente el algoritmo es malo (por las limitaciones que sean).

anv

#9 Y aun así se repetían los números.

A ver, pregunta con trampa:

secuancia 1 1 1 1 1 1 1 1 1 1 1 1 1

¿Pueden ser números aleatorios?

Far_Voyager

#13 Si no me equivoco sí. Es poco probable pero puede pasar.

JanSmite

#9 10 RANDOMIZE TIME
20 X = RND(-1)

Del manual:

"Da el siguiente número aleatorio de la sucesión en el caso de que la tenga valor positivo o no haya sido especificada.
Si la toma valor cero, RND vuelve a dar el anterior número aleatorio generado.
Si la toma un valor negativo, se inicia una nueva sucesión aleatoria y RND da su primer número."

Far_Voyager

#17 No me acordaba de ese -1. O eso o que el libro dónde lo vi tenía el 1 por errata de imprenta.

editado:
Error de imprenta, comprobado. El CPC que tenía venía además sin manual al ser de segunda mano, y no sabía de esa instrucción.

sillycon

#2 En mis tiempos buscábamos los registros de hardware que más se movieran y los XOReabamos y ROLeabamos.
Si había un registro de tiempo o de la posición del barrido de pantalla, o la posición de los sprites del jugador, o algún otro registro. Lo jodido era que tuviera un rango amplio, pero para salir del paso valía.

anv

#12 Como dato interesante, Linux sigue haciendo algo así. El núcleo tiene un generador de entropía que toma información de fuentes muy variables como teclado, ratón, temperaturas, tiempos de acceso a los discos, etc. Cualquier programa puede obtener números al azar leyendo /dev/random pero con cuidado: puedes vaciarlo rápidamente si pides muchos. Si es simplemente un juego y no buscas esconder cosas de la NSA, es mejor usar /dev/urandom, que no usa fuentes tan aleatorias pero es suficientemente bueno para un uso cotidiano.

Tribuno

#14 #12 Ahora con un pincho sintonizador TDT te puedes montar un generador muy barato de números aleatorios que puedes tirar de /dev/random sin miedo a vaciar el pool.

sillycon

#28 Claro, pero se trata de no obligar al usuario a comprar hardware. Eso es para aplicación específicas

S

#1 Te recomiendo leer "Racing the beam" de MIT press. Es específico de la Atari 2600 y está muy bien escrito.

S

#3 ahora que leo la página ¿he encontrar un error?

"The Atari 2600 was designed to play a game called Combat"

No! era para jugar al Pong! Y los objetos que ouede mover tienen nombres relacionados con eso

DDJ

#4 Disculpa pero no, ya hubo algunas "atari" anteriores a la 2600, lo del pong fue anterior. Se refiere específicamente a la atari 2600 que se vendía acompañada del juego Combat.

S

#18 Ok a medias: la Atari 2600 fue la primera consola que vendieron, aunque tuvo varios nombres (al principio fue VCS, luego 2600.. yo tuve la 2600 Jr). El chip gráfico en todos ellos se llama TIA y permite mover unos sprites que originalmente tenian un propósito muy específico: ie dos "jugadores", una"pelota" (de ahí lo del Pong) y "dos misiles" (ok, combat)

#1 En el vídeo, dice que el método de Contra para generar números aleatorios es el más estúpido. Hay alguien que sepa por qué? Es que me parece más listo que el método de Final Fantasy, pero no soy experto.

Azrapse

#25 Más que ser un método estúpido, con connotación negativa, es más bien un método "tonto", en el sentido de simple o sencillo.
Sumar un valor repetidamente cada ciclo mientras sobren ciclos antes del siguiente refresco de pantalla. Es un método muy sencillo, simple, para generar números aleatorios. Sin ningún alarde técnico o matemático. Una solución "tonta".

Pero como el tipo dice al final del vídeo, el objetivo de la charla era promover que la gente abrace las soluciones tontas. "Embrace stupid". Porque suelen ser sencillas y, al mismo tiempo, solucionar el problema suficientemente bien para dar el pego.
Una oda en contra de la sobreingeniería, más o menos.

Bley

Ojalá estuviese en español, es muy interesante.

Lo que se conseguía hacer antes con hardware tan limitado, que mérito. Son obras de arte de la creatividad y el entretenimiento.

Ano_Torrojo

Curiosamente hace pocos días vi este vídeo. Esta mujer programa mario en javascript con kaboom. Es muy ilustrativo.

NubisMusic

Aún no he pulsado al vídeo, pero imagino que se programaba en ensamblador

meneandro

#5 Habla más de técnicas que se usaban para resolver problemas que de programación.