Juego ASCII: un compromiso de autenticidad y conveniencia

¡Hola a todos! Mientras desarrollaba un juego estilizado como modo texto, llegué a la contradicción esperada. Por un lado, el juego debe estar saturado con el espíritu del modo de texto, porque para esto me gusta y, espero, a los fanáticos de los juegos retro les gustará. Por otro lado, quiero que el juego sea lo más divertido y moderno posible. En este artículo describiré cinco puntos en los que me desvié del modo de texto verdadero. ¿Logré mantener el tubo de humor alfanumérico en el juego? Pido expresar una opinión!



1. Conjunto de caracteres


Absolutamente todos los gráficos en el juego están hechos con los caracteres que se escriben en el teclado. Para ser más precisos, se utilizan los caracteres de la tabla ASCII del 32 al 126.



Sin embargo, los textos en el juego están localizados en varios idiomas. Ahora apoyo ruso e inglés en paralelo, pero quiero agregar algunos más, incluido el chino. Los caracteres de las tablas ASCII, incluso los extendidos, claramente no son suficientes para estos fines.



Los diálogos en el juego pueden contener personajes que no pertenecen al rango auténtico. Sin embargo, estos personajes no están involucrados en el diseño. Los gráficos son solo ASCII.

2. Precisión de subcaracteres


A diferencia de los modos de texto, ASCIIDENT utiliza precisión de píxeles para mover capas de texto y mover sprites.



En modo texto, el desplazamiento del sprite en una posición parece un salto notable. Para un juego tan dinámico como ASCIIDENT, esto es inaceptable desde el punto de vista de la experiencia de juego moderna. Por lo tanto, para sprites individuales y capas de texto, que se discutirán más adelante, hice un movimiento suave.

Para mantener la autenticidad, me adhiero a la siguiente regla. Dentro de una capa de texto, todos los objetos estáticos están claramente alineados en la cuadrícula de caracteres. Además, cada sprite consta de caracteres también alineados en una cuadrícula de caracteres.

Relativas entre sí, las capas y los objetos en movimiento se pueden ubicar a una distancia sub-simbólica. Esto asegura un movimiento suave y, en consecuencia, una jugabilidad cómoda. Este es un compromiso.

3. Paralaje


El juego tiene varias capas de texto que se mueven a diferentes velocidades, dándose cuenta del efecto de paralaje. Los símbolos de las capas superiores se superponen a los símbolos de las inferiores. Con precisión de subcaracteres, el criterio de superposición es una superposición de más del 50% del ancho y / o alto de la celda de texto. Usando un z-buffer simple, esta superposición es fácil de implementar.



Paralaje con movimiento suave de capas es una técnica gráfica muy expresiva. Sí, puede violar en gran medida la autenticidad del modo de texto. Sin embargo, decidí usar paralaje. Resulta muy bonito.

4. Animación


Animación de sprites individuales en el juego "honesto", realizado estrictamente en modo texto. La posición de cada carácter está alineada en la cuadrícula de texto. Las animaciones se obtienen reemplazando los caracteres en las celdas.



Me pareció muy importante mantener la integridad de las animaciones de sprites. Esto es probablemente lo principal que hace que el juego sea tan retro-atractivo. Además, con este tipo de animación, técnicamente se vuelve muy simple crear y editar sprites ASCII animados. No pude resistirme e hice un editor ASCII incorporado en el juego. En cualquier momento, cualquier elemento gráfico puede cargarse y modificarse. Puedes, por ejemplo, editar el cofre agregando cuadros de animación, y después de guardar todos los cofres en todos los lugares del juego se volverán nuevos. Cualquier jugador puede hacer esto, creando así su propio mod del juego.


Sin embargo, a veces necesitas una animación suave. Por ejemplo, en el juego existe un lugar donde se cultiva la fibra óptica biológica. Un dron vuela sobre las camas, lo que riega la fibra óptica con un líquido tóxico. El líquido debe gotear suavemente, de lo contrario feo. Para implementar tales efectos, hice generadores de sprites y su unión a cualquier otro sprite en el mundo del juego. Técnicamente, cada caída es un sprite separado que puede moverse con precisión de subpíxeles. Un compromiso razonable de nuevo.

5. Luz, color y fuente.


Muchas personas a las que les muestro el juego hacen el comentario de que hay demasiados colores en mi juego. En los modos de texto no había tanta riqueza de tonos. El hecho es que implementé un mapa de luz de pantalla completa que calcula cualquier cantidad de fuentes de luz. Al mismo tiempo, el color de cada personaje es de 24 bits (16.777.216 colores diferentes). A veces la imagen se ve colorida.



Para emular modos de color retro, hice siete opciones adicionales: tres modos monocromáticos, dos modos de 16 colores (DOS / Mac), 2 bits y modo Game Boy. El modo de fuente LED también está disponible. En este modo, cada píxel de cada personaje se separa de los vecinos. El siguiente video muestra todos los modos, cómo afectan la imagen.


El algoritmo de conversión de color para modos monocromáticos hizo esto. Primero, calculo el brillo del color (R, G, B):

V = 0.3 * R + 0.59 * G + 0.11 * B Los

monitores retro monocromáticos tienen diferentes tonos de color para diferentes brillos de símbolos. Por lo tanto, la sombra también debe cambiar. Utilizo dicha interpolación lineal:

RR = sqrt (V) * (monoR1 * (1 - V) + monoR2 * V)

GG = sqrt (V) * (monoG1 * (1 - V) + monoG2 * V)

BB = sqrt (V ) * (monoB1 * (1 - V) + monoB2 * V)

Color final (RR, GG, BB)

Para modos de 16 colores, utilizo un algoritmo diferente. Para cada color (R, G, B) busco el color más cercano en la paleta. Eso es todo.

2 bits y el modo Game Boy tiene solo cuatro colores en la paleta. Una simple búsqueda del color más cercano da una imagen muy oscura. Por lo tanto, antes de buscar un color en la paleta, hago la normalización:

d = 1 / max (R, G, B)

normR = d * R, normG = d * G, normB = d * B

Las fórmulas son esquemáticas. Los cheques para la división por cero no mencionaron. Espero que todos los que decidan jugar ASCIIDENT puedan elegir por sí mismos un esquema de color que calienta al máximo su alma retro.

6. Consola con un modo de texto honesto


En el proceso de creación del juego, surgió la idea de poner terminales de computadora con un modo de texto honesto en el mundo del juego. Puedes acercarte a ellos, conectarte y trabajar / jugar.

Si el juego en sí está estilizado como un modo de texto de 80x25 con desplazamiento suave y paralaje de capas de texto, entonces la pantalla del terminal incorporado tiene una resolución de 72x20 caracteres sin ninguna posibilidad de ir más allá de esta cuadrícula.

Todas las aplicaciones para terminales integrados (incluido el gestor de arranque) están escritas en el lenguaje de programación DUHASM. Este lenguaje es similar al ensamblador, pero tiene variables dinámicas y matrices. Aquí, por ejemplo, hay una parte del código del juego Pi-astre Hanter:



Una característica divertida es que los bucles se implementan como parte de construcciones condicionales, donde se coloca LOOP en lugar de END.

En el lanzamiento, el juego carga aplicaciones de archivos * .duhasm y las compila en código de bytes. Cuando un jugador activa la consola, se inicia un intérprete honesto.

Por el momento, he escrito dos juegos sobre DUHASM, que ya están disponibles en la versión actual. Hay un plan para escribir un editor de código (también en DUHASM, por supuesto) para que cada jugador pueda intentar crear una aplicación / juego que todos los demás jugadores verán.


Espero no haber gastado en vano mucho esfuerzo y tiempo para implementar esta función y habrá personas a quienes les guste. El lenguaje DUHASM ciertamente necesita algo de refinamiento. Realmente no me gusta cómo, por ejemplo, las funciones se llaman con argumentos. Según la historia del juego, el lenguaje DUHASM surgió con un cyborg semi-sensible que escapó del laboratorio de piratas espaciales. Sorprendentemente, este lenguaje de programación se ha arraigado en las afueras de la parte habitada del universo.

CONCLUSIÓN


Bueno, hubo muchos compromisos: un conjunto de caracteres, precisión de subcaracteres, animación, colores. Pero también para mantener una sensación de autenticidad en el modo de texto, he emprendido mucho durante estos más de dos años de desarrollo. Para obtener más comentarios y comprender si me estoy moviendo en la dirección correcta, decidí comenzar el juego con acceso anticipado en Steam . Hay algo mágicamente atractivo en los modos de texto. Cuando se puede escribir cualquier imagen con caracteres en el teclado, a veces es difícil resistirse y no comenzar el juego con el editor ASCII incorporado, e incluso no dibujar un prototipo de un nuevo mini-juego, que luego se implementará en el lenguaje DUHASM.



¡Gracias a todos! ¡Hasta!

All Articles