Realización de NES gameinvitro "MULTIDEFENDER"

Entonces, a fines de marzo, en la nariz de la Revisión 2020, todavía hay un largo mes de autoaislamiento por delante, y todo comenzó, como de costumbre, con el hecho de que decidimos escribir otra demo para NES. Por supuesto, la "demostración" se dice en voz alta. Basado en nuestras propias capacidades y la cantidad de tiempo restante hasta la fecha límite, se tomó el curso para crear una invitación simple al Multimatograph (demoparty ruso en Vologda), que consiste en un desplazador con información y un efecto de ecualizador simple basado en el logotipo de Multimatograf.



Cómo funciona: analizaremos en detalle cada parte, de principio a fin.

Scroller y logo


Al principio, esta parte fue escrita como la principal. Todos los "kits de cuerpo" fueron inventados e introducidos en el camino, como siempre sucede. El degradado y el logotipo están hechos en la capa de fondo. Revisamos varias opciones de apariencia:

opción de gradiente 1  opción de gradiente 2

hasta que finalmente aprobamos la actual: la

gradiente final

agonía de elección se explica de manera bastante simple: no es una organización simple de la pantalla de la consola y sus atributos. La pantalla NES consta de mosaicos de 32x30 que miden 8x8 píxeles. Y si, por ejemplo, en el ZX Spectrum o Commodore 64, un atributo bicolor actúa sobre una familiaridad, entonces aquí el atributo de la paleta de cuatro colores cubre un área de hasta 2x2 familiaridad, o un cuadrado de 16x16 píxeles. Solo hay 4 paletas disponibles, por lo tanto, para dibujar tanto el degradado como el logotipo rojo, tuvimos que usar 3 paletas con colores comunes en cada una de ellas.

Fondo Nesst

Para lograr el efecto de un fondo estático, se seleccionó un gradiente de tablero de ajedrez y el bit más bajo se restableció para cada nueva coordenada de desplazamiento, de modo que el fondo se movió solo en posiciones uniformes, creando la ilusión de un logotipo en movimiento con un fondo aparentemente inmóvil. Sí, los efectos suelen hacer exactamente eso: es imposible decidir sobre la frente: el engaño.

En el camino, se hicieron claros algunos matices, como el hecho de que el dithering del ajedrez en los televisores CRT se verá completamente diferente de lo que parece en el emulador, que se probó en un decodificador real con un televisor real: de

distorsión de la textura del ajedrez en un televisor CRT

hecho, no hay mucho bien. Sin embargo, dado que el fondo ya estaba torturado con tales dificultades, y se suponía que el programa era del emulador, obtuvimos esas bagatelas, al final, no parece tan aterrador con este muaré.

Resumen:

  1. — . , .
  2. .
  3. “” , “” + - , .


La fila con el desplazador está separada de la pantalla principal por "división". Esta técnica se ha utilizado en muchos juegos clásicos, por ejemplo, HUD en Super Mario. Pero, a diferencia de Super Mario, ambas partes de nuestra pantalla "dividida" tienen su propio desplazamiento autónomo. Implementar el desplazamiento unilateral en Dandy es tan simple como se pone, de hecho, todos los juegos de plataformas con desplazamiento de pantalla se hacen: cada nueva letra (o columna de paisaje / laberinto) se dibuja en la pantalla vecina cada +16 píxeles, luego la cámara se mueve 16 píxeles hacia la derecha, y todo se repite de nuevo.

Para que el desplazamiento no pareciera completamente aburrido, se le aplicaron dos efectos:

1. La similitud de "gigaskrin" en NES. Por qué no? Para hacer esto, la fuente se dibujó con una textura de tablero de ajedrez: píxeles pares con un índice de paleta, píxeles impares con el segundo, entre los cuales se realizó la transición de acuerdo con la tabla: primero puntos pares de la textura, luego impar. Como resultado, obtuvimos un color intermedio entre los colores existentes de la paleta NES, y visualmente el cambio de color se ve más suave. Efecto no muy notable, si no lo sabe, pero mirando de cerca el pergamino, puede comprender de qué se trata:

fuente de desplazamiento

2. "Saltos" de la línea de desplazamiento al compás del compás. Para hacer esto, se rastreó el búfer del jugador y su canal de ruido, y se agregó uno vertical al desplazamiento horizontal.

Resumen:

Dandy le permite dividir la pantalla en al menos dos partes, cada una de las cuales puede desplazarse de forma independiente. Estas dos partes fueron suficientes para nosotros tanto para el logotipo como para el desplazador. Para mayor claridad, sugerimos mirar la "cámara" del logotipo:

animación de cámara con logo

Y la "cámara" del desplazador:

cámara de desplazamiento de animación

ahora es el momento de pasar a los kits del cuerpo.

Logotipo de NESDEV


En general, este es nuestro segundo trabajo en esta composición, por lo tanto, para tal unión, la etiqueta "equipo Nesdev" fue elegida con el nombre del canal Telegram en el que discutimos todo lo relacionado con las consolas, su programación y noticias. La apariencia de la inscripción fue elegida por analogía con el logotipo de Titan en su trabajo de demostración Overdrive, que, a su vez, parodió el estilo del logotipo de la marca Sega y, bajo el efecto de degradado, replanteamos una cierta cantidad del cartucho con tablas para el desvanecimiento. Resultó no estar mal:

tabla se desvanece animación

pero, debido a la cantidad limitada de espacio libre en el cartucho, después de algunas revisiones, se decidió deshacerse de algunas de estas tablas y transferir el fundido a soluciones estándar de la biblioteca neslib (excepto el texto debajo del logotipo):

animación de neslib se desvanece

Encaje Vologda


Animación de encaje Vologda

Inicialmente, planeamos mostrar estos monogramas en un desvanecimiento suave, usando las paletas viejas y buenas, pero dado que el atributo NES afecta no solo a una familiaridad, sino inmediatamente a 4, tuvimos que abandonar este método, y se decidió usar sprites como animación preliminar antes del mosaico de fondo deseado quedará "impresionado" en la familiaridad.

Usando el método de Google, se seleccionaron varias referencias adecuadas y se decidió detenerse en una de ellas, que estaba ligeramente impurificada para nuestra tarea.

encaje - referencia  dibujo de encaje

Esta imagen tiene 387 azulejos únicos. El problema es que la página de gráficos NES contiene 256 mosaicos. En este caso, la misma buena pantalla dividida viene al rescate. Si antes de dividir teníamos activa la primera página de gráficos, luego de dividir podemos hacer clic en el frasco y activar el segundo juego de caracteres. Esto es cierto solo en relación con los mapeadores con CHR-ROM, pero de nuevo, con todos los detalles en el mismo artículo, recomendamos encarecidamente quién aún no se ha familiarizado.

Había dos latas más libres con gráficos restantes, por lo que la pantalla se dividió verticalmente en 2 partes y se seleccionó la ubicación de división óptima, en la que se cambió el banco de gráficos. Por lo tanto, teníamos dos conjuntos separados de 256 fichas para las partes superior e inferior, cada una de las cuales albergaba aproximadamente 192 fichas. Esto fue suficiente, y quedó el margen necesario para mosaicos adicionales para animar las partes que se cruzan del patrón.

Banco 1:

banco de encaje 1

Banco 2:

banco de encaje 2

Es fácil ver que las páginas de fondo de los bancos tienen diferentes conjuntos de mosaicos, y las páginas de sprites son las mismas: la granularidad de los bancos conmutados es de 8 kilobytes (4 por fondo, 4 por sprite). El número de mosaicos diferentes para la capa de sprites resultó ser inferior a 256, por lo tanto, para la conveniencia de la salida, todos los sprites se colocan en una página, que se duplica en ambos bancos de 8 kilobytes.

La paleta tiene 3 colores que podemos cambiar (el cuarto es de fondo, general, actualmente negro), lo que significa que en realidad podemos organizar 4 fases de animación de un color para una familiaridad usando una combinación de sprite y mosaicos de fondo.

fases de animación de fondo y sprite

Para hacer esto, dibujamos las tres primeras fases de la animación en el mosaico de sprites con los índices de la paleta 1, 2, 3 (en la imagen para mayor claridad, cada fase se resalta en rojo, azul y verde, respectivamente) y el mosaico de fondo como el cuarto mosaico de animación.
En teoría, se ve así:

Fase 1: índice de paleta 1 = blanco, el resto es el color de fondo (negro);
Fase 2: índice de paleta 1 y 2 = blanco, el resto - color de fondo;
Fase 3: índice de paleta 1, 2, 3 = blanco.
Fase 4: elimine el sprite y "escriba" la fase final del fondo del personaje en el fondo.

Pasamos a la siguiente familiaridad, etc.

Tradicionalmente, para mayor claridad, puede ver lo que sucede en la capa de sprites por separado:

encaje - animación de capa de sprite

Además del blanco, por supuesto, puede usar cualquier otro color. La principal limitación para este efecto particular es que la animación de sprites siempre es monocroma, mientras que los mosaicos de fondo ya pueden tener más colores, como lo hemos hecho. Por lo tanto, la conclusión fue un efecto adicional, porque la punta del monograma que se muestra está animada solo en blanco y parece una luz de fondo.

La imagen de fondo consta de 3 colores: dos tonos de gris y un color blanco (paleta 0). Todo esto está duplicado en la paleta 2, con una excepción: uno de los colores grises se cambia a negro, e inicialmente la pantalla se llena con esta paleta.

En el proceso de visualización de monogramas, "línea por línea" reemplazamos la paleta en la pantalla, creando el efecto de "separar" una capa adicional con monogramas detallados. En la imagen a continuación, esta ranura de la paleta está marcada en gris oscuro, el rojo es la posición del sprite cero y el amarillo es el tiempo de espera antes de cambiar el frasco (por qué, exactamente, se describe a continuación):

encaje - dividir y cambiar lugares

toda la animación se divide en 3 fases (la fase 4 se combina con la fase 1) para que manténgase dentro del sonido de la pieza musical de apertura.

Cada fase dura 4 cuadros, y en cada cuadro se dibuja por separado:

0 cuadros - cuadros de fondo de la parte superior
1 cuadros - sprites de la parte superior
2 cuadros - cuadros de fondo de la parte inferior y flores (su apariencia se establece en la tabla según el contador de cuadros global)
3 cuadros - sprites inferiores

Esto se hizo para cumplir con la velocidad de ejecución del código, que, debo decir, no está escrito de manera muy óptima en matrices multidimensionales, lo que se desaconseja firmemente desde el enlace que genera el compilador al mismo tiempo parece monstruoso.

Se escribió una utilidad de creación de prototipos (javascript + html), se dibujaron varias capas del fondo con la eliminación de parte del gráfico para animar los lugares de intersección y varias capas de la máscara, luego se hizo clic cuadro por cuadro, dando como resultado binarios para mosaicos, una pantalla y código C con matrices de datos de animación . Además, para completar la imagen, se agregaron todos los efectos y música planificados para esta parte, de modo que en la etapa de creación de prototipos se pudiera ver la imagen completa. La utilidad se agrega al repositorio, el resultado del trabajo se almacena en localStorage, también cuando se actualiza la página, se hace clic y se recalculan todos los datos y la matriz de animación se muestra en forma de json en el cuadro de texto.

utilidad de análisis de animación

El método elegido para analizar la animación resultó ser difícil, y muchas veces tuvimos que volver a dibujar partes individuales de las máscaras, y al final no quedaba tiempo y algunos problemas técnicos permanecieron con nosotros para siempre. Además, todo se escribió originalmente de acuerdo con el canon para los sistemas NTSC, por lo que existen problemas para la región PAL, pero probablemente los tendremos en cuenta solo en nuestro próximo trabajo.

Resultados: la combinación de sprites animados y renderizado de fondo es familiar: esta es una buena tradición, utilizada tanto en juegos como en algunos productos de demostración (HEOHdemo), pero realizada con diferentes enfoques, puede obtener diferentes efectos, todo depende de su imaginación.

Mosaico "MULTIMATOGRAF"


Aquí todo es simple: un logotipo dividido en "cubos" + conjuntos de coordenadas iniciales y desplazamientos. Probablemente vale la pena mencionar es un pequeño truco usado. El límite de sprites NES es de 8 piezas por línea de trama, pero no logramos deshacernos del noveno: "sprite cero", que divide la pantalla en dos partes, y esto creó un pequeño problema: uno de los sprites del logotipo desapareció, cruzando la posición Y del sprite "cero" . No quería cambiar la posición del logotipo, especialmente porque pasé mucho tiempo dibujándolo en la parte principal de la introducción, y por prueba y error encontramos un lugar adecuado para el sprite cero (al comienzo de la línea que precede a la división), y después de la división, el sprite se ocultó fuera de la pantalla, Además, se organizó un retraso del programa hasta el final de la línea, después de lo cual el banco con charters ya estaba cambiando.Como resultado, el logo sprite no mostró solo unos pocos cuadros y solo en una línea de la pantalla, lo que no lastimó nuestros ojos y se ajustó a nuestros objetivos.

Intra o juego?


Mientras tanto, mr287cc terminó ferozmente el espacio libre del cartucho con nuestra siguiente idea: decidimos superar el tema actual del "coronavirus" y, viendo cómo se organizó la demopatía de Vologda, avanzó más y más, debido a la cuarentena, decidimos por todos los medios " proteger "multimatógrafo de coronavirus. Se hicieron varios caminos de ranura a lo largo de los cuales se suponía que los virus debían volar, y en la parte inferior de la pantalla había una nave espacial que se suponía que disparaba a los virus y los convertía en cerveza. Pero dado que la cerveza de los virus es una aventura más o menos, la idea fue ligeramente rediseñada, y acabamos de obtener una nave espacial del juego Galaga, destruyendo cadenas de virus que vuelan a lo largo de diferentes trayectorias.

el origen del juego

Además, la IA piloto sin pretensiones se modificó a una menos sin pretensiones, luego se crearon efectos de sonido para la aparición de cadenas de virus, su destrucción y animación de la explosión, un contador de puntaje y se implementaron saludos e invitaciones en forma de una tabla de puntaje cercano:

invita-saludos

Y en algún momento nosotros y decidí que era necesario darle al espectador la oportunidad de controlar el barco él mismo y destruir los virus. Este fue el primer paso para convertir el Intra en un minijuego completo.

A todos realmente les gustó esta idea, y después de haber jugado lo suficiente, alguien en broma notó que no había suficiente jefe y que aquí no podíamos detenernos. Aunque en ese momento algunas partes escénicas de demostración del trabajo aún no estaban completamente listas, a raíz del éxtasis que nos agarró, arrojamos por completo toda nuestra energía a la parte del juego. mr287cc redid movió la nave de lineal a inercial, y TmK cortó la primera versión del jefe:

jefe - primera versión

inspirada por el jefe de Castlevania, esta opción se finalizó, y apareció un jefe bueno, en forma y de pleno derecho en nuestro juego vitro.

opción final del jefe

Luego profundizamos en el proceso y el comportamiento del jefe se llevó a cabo por completo de acuerdo con los cánones de los viejos juegos de dandy de los años 90 firmemente arraigados en el cerebro, desde un momento sin preocupaciones, cuando todavía no podíamos programar y apretar fuertemente los gamepads en nuestras manos, sin escatimar tubos de imágenes, jugamos dandy toda la noche . Aceleración de la fase de animación antes de lanzar proyectiles de virus, trayectoria de vuelo de proyectil, parpadeo cuando se golpea y cuando los puntos de golpe disminuyen por debajo de un cierto nivel, e incluso explosiones después de una victoria: todo esto es nuestra experiencia de juego obtenida del clásico gamedev de los 90.

Mientras tanto, el límite de ROM libre ha finalizado, a pesar del hecho de que introduje algunos datos del PRG al CHR-ROM, y nos reconciliamos con el hecho de que no podremos pulir el juego aún más. Sin embargo, casi antes de la fecha límite, cuando se renderizó el video para mostrar, se encontró un código no óptimo con ciclos abiertos, después de la edición, que se liberaron otros 3 kilobytes, los datos en CHR-ROM se empaquetaron y se complementaron con otros datos de PRG-ROM, gracias a lo cual fue posible obtener más aproximadamente kilobytes, pero no quedaba tiempo para la revisión.

En el momento de la fecha límite, no todos los planes se realizaron, pero no nos íbamos a dar por vencidos.

Armados con la idea de celebrar torneos en demopati, continuamos desarrollándonos y lo que surgió de ello: vea el lanzamiento final. En el juego, se redibujó una nave espacial y explosiones de enemigos, como en la versión de grupo había sprites prestados, se agregó el nombre de un jugador, una tabla de puntaje alto, se hicieron un par de correcciones menores y mejoras cosméticas, creando así un juego de competición de torneo simple pero bastante adecuado para un juego sin pretensiones: durante cierto tiempo necesitas disparar la mayor cantidad de coronavirus posible basura y sumar puntos máximos.

información del juego

Guía rápida:

  1. Estamos esperando la finalización del efecto introductorio con el encaje Vologda, después de lo cual se iniciará el modo de introducción y demostración del juego.
  2. El botón "Seleccionar" alterna la visualización de la tabla de puntaje alto, información sobre el juego.
  3. Haga clic en el botón "Inicio".
  4. : — 6 .

La hora se muestra en la esquina superior izquierda como un icono de reloj de arena. Aproximadamente un minuto antes del final del juego, el ícono parpadea con cierta intensidad, lo que indica que el tiempo se acaba.

Los enemigos atacan en oleadas: 3 oleadas de virus (pueden aparecer "supervirus" en cada una de estas oleadas, no se recomienda omitirlas, ya que se les otorgan puntos adicionales). Al final de 3 oleadas, se genera el jefe, luego de nuevo de acuerdo con el patrón habitual: 3 ondas, jefe, hasta que se agote el tiempo asignado.

El jefe tiene 10 puntos de golpe, por la eliminación de cada jugador se le otorga 1 punto. Se otorgan puntos extra al derrotar al jefe. Con cada golpe en el barco, el jugador pierde 1 punto y queda inmovilizado temporalmente, y si se produce una colisión durante la batalla con el jefe, en este caso el jefe recibe 1 punto de golpe.

entrada de apodo al final del juego

Resumen:

  1. Exhibimos en la revisión;
  2. Te hemos invitado a la Multimatógrafo;
  3. Hicimos un gamevitro para una plataforma que no estaba bien representada en el demoscene;

Un agradecimiento especial a bfox y Quiet por los consejos y la prueba del juego.

PD de TmK:

En general, no fue fácil, básicamente escribimos en C y solo algunas cosas dependientes del tiempo en el ensamblador (por ejemplo, la salida del analizador al logotipo). Antes de eso, tenía experiencia en el desarrollo para NES en nuestro trabajo anterior (NESPECCY), pero olvidé mucho desde entonces (y el código escrito por mí en el ensamblador ahora parecía desconocido y cómo optimizar el código C correctamente; en muchos momentos, la optimización se logró por simple fuerza bruta de varias opciones para escribir código).

Le instamos a que no posponga el trabajo de escritura en demopati en el último momento, comience hoy, tal vez incluso ahora, especialmente porque ya se conocen las fechas aproximadas de todos los eventos.

Algunas palabras sobre el fondo musical de n1k-o / Stardust


Dado que el objetivo de nuestro trabajo era invitar a personas que simpatizaban con el demoscene a la fiesta de Vologda, el primer pensamiento fue tomar como base la pista conocida, en la que constantemente especifican: "dónde, dónde, en Vologda, ahí es donde". La idea de un remix de portada para esta pista resultó insostenible: no encaja mucho en el estilo in-vitro, por lo que se decidió dejar la introducción del original y luego en la pista realicé un breve pasaje al motivo del coro. En esta parte con un remix de portada terminó y la pista original fue más allá. ("Original" con algunas advertencias: se seleccionó una referencia que iba bien con una secuencia de video orientada a demostración: tenía una línea de bajo distinta, un ritmo de ritmo funky, una melodía pegadiza, en general, todo para escuchar y no apagar al menos 2-3 ciclo.)

En los primeros enfoques, el motivo principal de la canción sobre Vologda fue recogido, girándolo de un lado a otro, dibujé el ritmo y la línea de bajo, tratando de hacer lo sugerido en la pista de "introducción".

rastreador de vórtices

Esbozar todos estos enfoques es más fácil para mí en Vortex Tracker, a pesar del hecho de que este editor está destinado principalmente a escribir música para el ZX Spectrum: funciona mucho más rápido y me resulta más familiar, y la velocidad y la calidad son lo principal. La transferencia de notas de un editor a otro (FamiTracker) no es el mayor problema: gracias a los esfuerzos de Ivan Pirog and Co., el rastreador Vortex puede copiar datos al portapapeles de Famitracker.

Por lo tanto, hice en forma de borrador casi todo el boceto principal en la pista NES, si lo desea, esta pista también se puede agregar para el ZX Spectrum.

La segunda etapa del trabajo es la transferencia de la pista del rastreador Vortex a FamiTracker, la tarea es monótona: copiar y pegar. Afortunadamente, he estado escribiendo para algunos chicos durante casi un año, y la interfaz de FamiTracker se ha vuelto casi nativa (pero no para bocetos rápidos, aquí todavía estoy tropezando con la interfaz). Después de copiar todas las partes, comencé a prescribir cada una de ellas, seleccionar los instrumentos y todo lo que se suponía que saturaría y darle a la pista un aspecto completo.

FamiTracker

Al principio, me prometieron que podía usar toda la funcionalidad del editor, con todos sus comandos y capacidades, y, por cierto, nunca había usado el editor antes de las restricciones a las que estaba constantemente limitado; todo es complicado los codificadores toman el poder y las maniobras de los músicos ordinarios para que ellos, los codificadores, tengan más poder y espacio para sus maniobras. Por lo tanto, debe trabajar en condiciones extremadamente limitadas, de modo que comprenda que también es imposible cambiar el volumen de los instrumentos en la columna del rastreador especialmente provisto para esto, así de limitado es el formato del reproductor Famitone. En general, lo principal aquí es recordar que nada es imposible, excepto que es posible, y esto es bastante, por lo que es más fácil recordar que no puede equivocarse. Por analogía, esto es similar a las limitaciones que existían en los primeros editores,que acaban de aparecer en los años 90, hay tanto disponible.

En general, es como si pudieras terminar la historia, porque no había nada más, moví la pista, la sacié y la desarrollé un poco más, y los muchachos periódicamente tenían ideas sobre cómo cargarme de trabajo: hice todo lo posible para envidiar rápidamente, aunque se balanceó durante mucho tiempo. También fue necesario complementar la pista final con ritmos al final de los patrones para dirigir los "saltos" del desplazamiento, o diluir las partes de bajo y percusión para relajar la audición.

FamiTracker parte de la pista

Y al final, fue necesario hacer efectos, y esto es esencialmente jugar eventos de juegos con instrumentos, es decir necesitamos sonar una toma, eso significa que usamos las mismas herramientas del rastreador para representar esta toma, guardándola como una pista separada. En el caso del rastreador, algunos probablemente vieron que puede haber varias melodías en un módulo .NSF, las mismas reglas se aplican a los efectos, pero a su vez, pueden tener una base de instrumentos separada.

Sonido FX

En general, al final, quiero decir tradicional, escribir escenas de demostración, hacer juegos y no aburrirme con todos estos eventos de coronavirus reflejados en nuestro intra-juego (es decir, no enfermarse).

Puede descargar el paquete con la fiesta y la versión final aquí .

Repositorio con el proceso de desarrollo de

Créditos:


PD: Invitamos a los fanáticos de demoscene a participar en demopati Multimatograf . La fecha estimada es a principios de julio, y todo depende de cuán exitosamente luches contra el virus en nuestro juego.

All Articles