Incluso hoy, la gente sigue creando nuevos juegos para consolas antiguas. Los llamamos
homebrew . A veces, esta es una forma de hacer realidad el sueño de la infancia de crear un juego para la consola en la que el niño jugara. Pero además, también es una tarea interesante para cualquier diseñador o desarrollador de juegos: retro-iron tenía muchas limitaciones que desafiaban la creatividad de los autores. En los años 90 para desarrolladores profesionales, estas restricciones eran familiares. Hoy, cuando tenemos herramientas más avanzadas, la creación de juegos para tales máquinas se ha vuelto mucho más asequible.
El año pasado escribí un artículo sobre la
creación de un juego para Game Boy . Hoy compartiré mi experiencia en la creación de tres juegos para la consola doméstica SEGA Mega Drive / Genesis. Probablemente, gracias a las poderosas herramientas modernas, esta es la máquina más fácil para desarrollar un juego casero. Por ejemplo, incluso logré crear un juego
(muy simple) en solo 60 minutos, ¡y en realidad se ejecuta en la consola!
Los juegos
El año pasado, para celebrar el 30 aniversario del lanzamiento de Genesis / Mega Drive, creé un juego llamado
30 Years of Nintendon't . Como su nombre lo indica, este es un homenaje a los mejores juegos de la consola y al marketing agresivo que SEGA usó en ese momento (por ejemplo, el eslogan
"Genesis Does what Nintendon't").En este juego, controlamos al evangelista de SEGA, que debe convencer a los jugadores de que se olviden de su NES y SNES, ¡porque Genesis tiene mejores juegos! El juego fue lanzado gratis en línea en el 30 cumpleaños de la consola. Puedes jugarlo aquí:
https://drludos.itch.io/30-years-of-nintendontDesde entonces, también he creado dos (pequeños) juegos de arcade para la consola:
"Romper un huevo""MeteoRain"Todos estos 3 juegos se venden en un cartucho publicado por Cote Gamers:
http://cotegamers.com/shop/en/genesis-mega-drive/43-test.htmlViene en una hermosa caja de plástico, como juegos vintage reales, y con un conjunto de postales.
¿Puedo usar Unity, Unreal Engine o Godot?
Lo sentimos, pero estos motores no pueden exportar juegos a SEGA Mega Drive / Genesis (¿tal vez por ahora?). Pero no se preocupe, hay otra herramienta que es tan útil como estos motores modernos populares y, al mismo tiempo, diseñada específicamente para Mega Drive / Genesis:
SGDK . Este es un marco que le permite escribir código para esta máquina en C. Es mucho más simple y rápido que aprender el lenguaje ensamblador, que era necesario en los años 90. Pero eso no es todo. SGDK también tiene herramientas para simplificar la creación de gráficos y sonidos. Puede crear gráficos en su editor de gráficos 2D favorito
(desde Photoshop a GIMP o Asesprite) , y se convertirá automáticamente si cumple con las restricciones de hardware (más sobre esto a continuación). Lo mismo se aplica al sonido: puede crear efectos de sonido en archivos .wav y usar diferentes rastreadores para la música. Una última cosa: SGDK tiene un poderoso "Sprite Engine" que simplifica la mayoría de las tareas técnicas de visualización de imágenes en movimiento en la pantalla. Pero, ¿qué tan "simple" es en realidad? En el artículo hablaré sobre mi propia experiencia laboral.
Blast Processing aparece en escena
Como cualquier programador de sistemas antiguos te dirá, si escribes un programa en C en lugar de ensamblador, esto reducirá el rendimiento del juego. Y es verdad Pero los costos en diferentes consolas retro varían mucho. Dependen de la CPU utilizada, así como de la eficiencia de los compiladores modernos que crean código para estos procesadores clásicos. Afortunadamente, Mega Drive / Genesis utiliza el procesador Motorola 68000, que es bastante adecuado para trabajar con las características del lenguaje C. Esto es especialmente cierto en comparación con otras CPU, por ejemplo, con la consola 65816 SNES. Aunque potentes en sí mismos, las CPU SNES son difíciles de forzar para ejecutar programas escritos en C con suficiente velocidad. Es decir, cuando se trata del desarrollo de C homebrew, "Blast Processing" no es un mito de marketing, ¡sino una realidad!
¿Qué tan rápido se puede ejecutar el código C?
Aquí hay un ejemplo de experiencia personal: un GIF animado de mi juego MeteoRain, en el que los sprites de 45 meteoritos se mueven sin demora a una frecuencia de 60 fps:
Aquí hay otro ejemplo de una explosión de Break An Egg, que consta de 40 partículas que se mueven a una frecuencia de 60 fps:
Si tomas los viejos juegos como ejemplo, entonces un buen ejemplo del poder de las CPU Mega Drive / Genesis es Contra Hard Corps. Aunque el juego se desarrolló en ensamblador en lugar de C
(después de todo, fue en los años 90) , los desarrolladores podían usar la enorme potencia informática para mover muchos sprites por la pantalla y crear jefes pegadizos con toneladas de piezas móviles y explosiones masivas.
A modo de comparación, Contra III en SNES estaba limitado por la potencia de la CPU y, en lugar de mover el montón de sprites, Konami utilizó efectos gráficos únicos que solo el chip de video SNES era capaz de, por ejemplo, el efecto de transparencia.
Aunque ambos juegos son igualmente interesantes, resaltan perfectamente las diferencias técnicas entre SNES y Mega Drive / Genesis. Puede encontrar más información sobre cómo Konami creó cada uno de los juegos en la consola correspondiente en el artículo
"Making of Contra III and Hard Corps" de
Retro Gamer No. 176 .
Restricciones gráficas
Dado que la potencia informática no es un problema, el principal cuello de botella de la consola Genesis / Mega Drive para desarrolladores de homebrew se ha convertido en sus limitaciones gráficas. Y más específicamente, un número limitado de colores exhibidos por ella. Aunque en general la consola puede generar 512 colores únicos, al mismo tiempo no puede haber más de 64 colores en la pantalla.
Ups A modo de comparación: SNES podría mostrar 256 colores simultáneamente de una paleta de 32768 colores únicos. Es decir, los artistas gráficos necesitaban un gran talento para hacer que los juegos de SEGA se vean tan bien como las consolas de los competidores. Y en muchos casos tuvieron éxito. A pesar de las restricciones de color, muchos juegos antiguos de Mega Drive / Genesis se ven hermosos, como
Comix Zone, Story of Thor, Streets of Rage II, Ranger-X, Gunstar Heroes, Sonic 1-2-3, etc.Zona Comix (1995)Pero en otros casos, los juegos de Mega Drive / Genesis parecían bastante aburridos en comparación con las versiones de SNES. Uno de los ejemplos más famosos es Street Fighter II, donde las restricciones de color de la consola son muy notables:
El uso óptimo de paletas limitadas
(4 paletas de 16 colores para Genesis versus 16 paletas de 16 colores para SNES) fue un gran desafío para los desarrolladores que generalmente tenían muy poco tiempo para completar proyectos. Hoy, los miembros talentosos de la comunidad SEGA pueden modificar algunos juegos para optimizar el uso de colores. Por ejemplo,
Gabrielle Piron hace maravillas con juegos como Castlevania Blood Lines, Golden Axe, Outrun o el mencionado Street Fighter II:
(Arriba está la paleta de colores del original, abajo está un Gabriel modificado)Con esto en mente, puede usar su editor de gráficos favorito para crear imágenes, ¡pero tenga mucho cuidado al elegir los colores! Si no coincide con la paleta de 512 colores que aparece en el equipo, esto no es un problema: SGDK convierte automáticamente la imagen a la paleta Mega Drive / Genesis. Pero cuando se trata de la cantidad total de colores utilizados y mostrados en la pantalla, ¡debe hacerlo usted mismo!
Hacer que los objetos se muevan
Para mostrar algo en la pantalla, debe copiar los datos gráficos de la ROM a la RAM de video. La GPU no tiene acceso directo a los datos en la ROM, pero puede leer datos de la RAM. Por lo tanto, para que cambie el fondo o la animación de los sprites, debe copiar regularmente nuevos datos de la ROM a la RAM. Y el número total de RAM de video (VRAM) es limitado: solo 64 KB. En comparación con el tamaño de las ROM de juegos (de 512 KB a 8 MB), esto es bastante pequeño.
Cuello de botella # 1: Transferencia VRAM
Si crea un juego muy pequeño con una pequeña cantidad de elementos gráficos, simplemente puede cargarlos de una vez por todas en la memoria cuando comience el juego. Pero la mayoría de los juegos necesitan actualizar periódicamente los gráficos en VRAM para demostrar varias animaciones. ¡Y generalmente causa muchos problemas!
La cantidad de datos gráficos que se pueden transferir de ROM a VRAM en cada cuadro (es decir, 60 veces por segundo) es limitada. Más específicamente, esto es 7524 bytes por cuadro, es decir, aproximadamente 7 KB. Cuando necesite mostrar enormes sprites animados más fondos animados, como en Street Fighter II, esta restricción interfiere constantemente. Y este es solo el primer problema.
Cuello de botella # 2: restricciones de sprites
Para las consolas de 8/16 bits, otra dificultad es la cantidad total de sprites que puede mostrar el equipo. Por lo general, hay dos restricciones: una para la cantidad total de sprites en la pantalla, la otra para la cantidad total de sprites en una fila horizontal. Para las consolas de 8 bits, como NES y Master System, estas restricciones son muy severas: no más de 8 sprites por línea horizontal, y el número total no debe exceder los 64 sprites. ¿Significa esto que podemos mostrar en la pantalla 64 veces a Sonic o Mario? No, me refiero a "sprites de hardware", que son más pequeños que lo que generalmente se llama un sprite. Aquí hay un ejemplo de Super Mario Bros para NES, donde se necesitan varios 8x8 píxeles de sprites de hardware para mostrar un solo sprite de Mario.
(Fuente: https://nesdoug.com/2018/09/05/06-sprites/ )Para las consolas de 16 bits, las restricciones de sprites se reducen ligeramente. Mega Drive / Genesis puede mostrar hasta 80 sprites de hardware. Pero un sprite de hardware separado puede tener un tamaño de hasta 32x32 (anteriormente, solo 8x8 píxeles). Estos son algunos ejemplos de corte de "sprites de hardware" en Mega Drive / Genesis. ¿Notaste que Sonic extrae solo dos sprites de hardware, mientras que Mario en NES necesita 8 sprites?
(Fuente: https://www.patreon.com/posts/new-resource-and-26847248 )Cuello de botella # 3: prioridades de sprites
Como si eso no fuera lo suficientemente complicado, Mega Drive / Genesis tiene una característica más específica: una cadena de sprites. Al aplicar dos sprites, la consola debe descubrir cuál necesita mostrarse encima de la otra. En el Sistema Maestro y en la mayoría de las consolas de Nintendo
(NES, Game Boy, SNES), los sprites se configuraron en una mesa grande y su orden en la mesa se utilizó para establecer la prioridad de visualización. No hace falta decir que esta es una herramienta bastante difícil de usar, porque necesita redefinir constantemente esta gran tabla para cambiar la prioridad de los sprites.
En Mega Drive / Genesis, SEGA utilizó un sistema más flexible y simple. Como en otras consolas, todos los sprites tienen un número de índice en una tabla grande, pero no se usa para establecer la prioridad del sprite. En cambio, cada sprite almacena un enlace al siguiente sprite que se mostrará. Finalmente, la consola crea una cadena de sprites, comenzando con el sprite 0. Cada sprite solo sabe lo que viene después. Esto hace que sea mucho más fácil cambiar las prioridades de los sprites sin organizar todos los sprites en una gran "tabla de enlaces de sprites". Pero, francamente, aunque dicho sistema es más fácil de usar, sigue siendo molesto cuando se crea un juego con una prioridad de sprites a menudo cambiante, por ejemplo, en beat'em up.
La manera fácil: motor de sprites SGDK
Mostrar sprites en movimiento y desplazarse por los fondos, teniendo en cuenta todos estos cuellos de botella, es todo un desafío. Todos los desarrolladores de los 90 lucharon con él, y muchos desarrolladores de homebrew continúan haciéndolo. Por ejemplo, Matt Phillips lanzó el magnífico juego
Tanglewood en 2018, pero lo creó con herramientas de los 90. Él programó el juego en lenguaje ensamblador y usó el kit oficial de desarrollo de hardware, diseñado hace unos 30 años. Por su parte, fue una elección deliberada, quería experimentar plenamente la técnica de desarrollar un juego clásico.
(Fuente: https://www.gamasutra.com/view/news/325040/New_game_classic_hardware_Developing_Tanglewood_on_a_Sega_devkit.php )Pero para las personas no tan experimentadas y pacientes como Matt, las herramientas modernas pueden reducir la cantidad de problemas creados por las limitaciones técnicas del hardware. Ya mencionamos que C suele ser más simple que el ensamblador. También vale la pena agregar que el uso de un emulador Mega Drive / Genesis de alta precisión como
Blast'em en combinación con Everdrive Flash Cart para probar en equipos reales hace que el desarrollo del juego sea casi indoloro en comparación con el uso de emuladores de hardware antiguos en combinación con un conjunto de herramientas DOS. Pero, de nuevo, el regalo principal de nuestro tiempo es SGDK.
¡Grabe el juego en una tarjeta SD, insértelo en Mega Everdrive y pruebe el juego en hardware real!Entre otras cosas, SGDK también tiene un poderoso "Sprite Engine", que facilita enormemente la vida del desarrollador. Este es un conjunto de funciones para procesar la visualización de sprites de forma similar a como se hace en los marcos modernos. En primer lugar, ya no necesita preocuparse por la cantidad de sprites de hardware requeridos para cada cuadro de la animación: SGDK lo hará automáticamente. Además, cuando trabaje con prioridades de sprites, no tiene que establecer manualmente la cadena de sprites, porque SGDK lo hace con el valor simple "prioridad de sprites", que se puede establecer para cada sprite, como en cualquier marco moderno. Una última cosa: ¡SGDK también procesa todas las transmisiones en VRAM automáticamente! Sí, lo entendiste correctamente, ¡gracias al motor Sprite ya no necesitas cuidar el VRAM! Simplemente puede decirle a SGDK que muestre la
"animación de X sprite Y" y hará todo el trabajo técnicamente difícil para usted. Si alguna vez tuvo que trabajar con estas cosas manualmente, parece mágico: ¡todo es simple y claro!
El Sprite Engine del marco SGDK solo hace de Mega Drive / Genesis la consola retro más fácil para el desarrollo de juegos, especialmente si tienes experiencia trabajando con marcos de juegos en plataformas modernas. SGDK es gratuito y de código abierto, pero si quieres ayudar a su autor Stefan Dallongevil en el desarrollo de la magia retro, puedes hacerlo en Patreon:
https://www.patreon.com/SGDK/Sonido
El sonido en el hardware retro también es una prueba real en sí mismo, y cada consola es única en este sentido. Mega Drive / Genesis tiene un procesador Z80 separado para esta tarea, que está directamente conectado al equipo de audio. Es decir, para crear sonido y música para la consola, primero debe escribir un "controlador de audio": un programa para el procesador Z80. En los años 90, cada estudio de juegos desarrolló su propio controlador de audio y lo ajustó para cada juego. Hacia el final de la vida útil de la consola, aparecieron controladores estandarizados, por ejemplo, Sega of America's GEMS, utilizado en
aproximadamente un centenar de juegos por desarrolladores occidentales.¡Crear un buen sonido para consolas de 8/16 bits no es solo una cuestión musical, sino también habilidades de programación! Algunos juegos con buena música o efectos de sonido han sido corrompidos por un mal controlador de audio. El ejemplo más famoso es Street Fighter II. El controlador de audio en este juego sufre de errores que distorsionan todas las muestras de voz. Muchos años después, Stefan Dallongewil
(autor del SGDK
y reconocido mago) realizó una ingeniería inversa de este controlador de audio y corrigió sus errores. Como resultado, ahora puedes jugar Street Fighter II con el grito cristalino "¡Hadoken!". Aquí hay un video donde puedes escuchar la diferencia:
Pero volvamos al desarrollo casero y al querido SGDK. Tiene la capacidad de seleccionar controladores de audio que se pueden seleccionar para satisfacer los requisitos de su juego. Por ejemplo, hay un controlador PCM que le permite reproducir un efecto de sonido a la vez en muy alta calidad
(por ejemplo, muestras de voz) . Pero también hay un controlador XGM que puede reproducir simultáneamente una pista de música + 4 efectos de sonido. Lo mejor de todo es que puedes cambiar entre controladores de audio durante el juego. Por ejemplo, en 30 Years of Nintendon't las muestras de voz en la pantalla de inicio y el final del juego son reproducidas por el controlador PCM para obtener una alta calidad. Pero durante el juego necesitaba jugar varios efectos de sonido al mismo tiempo, así que usé el controlador XGM.
En cuanto a los recursos en sí, se pueden utilizar herramientas modernas para crearlos. Como dije anteriormente, para efectos de sonido, simplemente puede tomar archivos .wav, que se convierten automáticamente al formato deseado. Para la música, la herramienta estándar es
Deflemask , un rastreador que puede crear música para el equipo de sonido de varias consolas de
8/16 bits. No tengo mucha experiencia en la creación de música, porque las composiciones utilizadas en mis juegos fueron escritas por talentosos artistas de chiptune: Minerscale (Break An Egg) y Warlord (MeteoRain). Ambos usaron Deflemask y exportaron sus creaciones al formato VGM, que SGDK puede convertir para usar con sus propios controladores de audio.
¿Crear un juego para Mega Drive / Genesis en 60 minutos? ¡Llamada aceptada!
Los atascos de juegos son una excelente manera de aplicar sus habilidades de diseño y desarrollo de juegos: ¿qué tan bueno puede crear un juego desde cero en un tiempo limitado (generalmente 48 o 72 horas)?
En términos de tiempo, el atasco más difícil es
0h Game Jam . Como su nombre lo indica, se celebra todos los años durante la transición al horario de invierno. Empiezas a crear el juego a las 02:00, la noche del reloj. Después de trabajar durante 60 minutos, lanzas el juego en línea en el mismo momento en que el reloj regresa de 03:00 a 02:00. El año pasado decidí participar en este atasco. Después de completar 30 años de Nintendon't, he adquirido algo de experiencia creando un juego para Mega Drive / Genesis y me inspiró la simplicidad de SGDK. Pero, ¿puede SGDK ser lo suficientemente simple como para que pueda crear una cerveza casera de 16 bits en solo 60 minutos?
Aquí está la respuesta :
60 minutos de trabajoSeamos honestos, el resultado no es absolutamente impresionante. El equilibrio del juego es terrible, y hay un gran error en el generador de números aleatorios, por lo que el juego se vuelve intransitable después del quinto huevo. Además, no hay imagen de fondo, sonido, etc. - Mega Drive/Genesis, 60 , . , , !
, , . ,
.
30 Years of Nintendon't , — MeteoRain.
!homebrew indie
homebrew ( ), -. . ,
Tanglewood , 90-, . ,
Xeno Crisis SGDK .
Tanglewood (2018 )Xeno Crisis (2019 ), -, Mega Drive/Genesis?
, SGDK, :
https://github.com/Stephane-D/SGDKEn conclusión
, SEGA Mega Drive/Genesis . , Cote Gamers:
http://cotegamers.com/shop/en/genesis-mega-drive/43-test.html(.. ROM-), - :
http://drludos.itch.io/,
Patreon . freeware, . Patreon, - , ( ).