Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Segunda Fase del desarrollo del Minijuego

–Gráficas de punto fijo y física elemental–

¡Finalmente ha sucedido! Por fin en toda la historia de esta web he terminado algo! Y aunque solo se trate de una pequeña parte de este modesto minijuego por ahora lo que importa es que acabé algo por primera vez. ¡Llamen a Ripley! ¡A los inversionistas y publishers! Y si se puede también a mis amigos de “la industria” que ahora mismo deben de estar por llegar a la Game Developers Conference. Por cierto, aunque se de buena fuente que fueron, no fui capaz de encontrar el stand de los mexicanos. Bueno, vamos a dejar las burlas a un lado porque en esta nota se ve a hablar de lo que va a ser la segunda fase de la programación del minijuego en ensamblador.

primera etapa terminada

Un famoso programador de videojuegos conocido como Andre Lamothe dijo alguna vez que lo único que necesitaba para hacer un buen juego era que le dijeran como iluminar un pixel y leer un botón. El desarrollo está exactamente en ese punto, ya solo falta un programador de videojuegos del nivel del buen Andre para que esto sea un juego de primera linea. Pero a falta de este recurso, el juego va a tener que conformarse con este fanático del ensamblador que no cuenta con eso que “la industria” llama experiencia profesional (y luego de investigar a su planta laboral espero no ganar esa experiencia con ellos). Lo que quiero decir es que hay algoritmos mas o menos clásicos que se pueden acondicionar a cualquier plataforma.

Lo que hace diferente a una plataforma de otra son tanto las capacidades de hardware como el ambiente de software en el que este se desenvuelve. Una vez que hemos pasado la barrera de leer un botón e iluminar un pixel, cosa que es diferente en cada sistema; ya podemos recurrir a algoritmos tan antiguos que estoy bien seguro varios de los programadores mas viejos conocen bien como por ejemplo el contacto de sprites, la construcción de mundos complejos a partir de mosaicos (tiles) o la combinación de dibujos usando máscaras de bits. En esta segunda etapa se van a implementar estas y otras funciones. Al final de esta etapa el programa debe de ser capaz de desplegar todo lo que debe de haber en un nivel o “ruta” como se le llamaba en el Clash at Demonhead original. Ahora veamos paso por paso lo que significa cada uno de los rectángulos del segundo mapa de desarrollo y como estos dependen entre si.

Primero voy a explicar los conceptos de gráficas de punto fijo y física elemental. Las computadoras antiguas y en buena medida también las modernas trabajan de manera bastante eficiente con números enteros. Es posible usar aritmética entera incluso para hacer cálculos bastante avanzados sin necesidad de meterse en lios con el procesamiento de punto flotante. Este normalmente solo es indispensable en desarrollos que involucran cálculo vectorial avanzado como las aplicaciones 3D mas avanzadas. Aunque hay quien dice que hay sistemas que son mas eficientes con el punto flotante que con la aritmética entera. Como este es un minijuego bastante modesto no pienso meterme en cálculos avanzados de punto flotante a menos que vea que el proyecto en verdad lo merece. En cuanto a la física elemental esta se refiere tan solo al manejo de fuerzas de acción y reacción así como la interacción física entre sólidos. Esto parece muy elaborado pero si tomamos en cuenta que la física en los videojuegos renuncia al realismo en favor de la jugabilidad y que todo esto se arregla con sumas de constantes (uno de los teoremas de euler) y operaciones de máscara de bits la cosa cambia. Ahora veamos cada uno de los conceptos:

Mapa de desarrollo de la segunda fase

primera etapa terminada

Sprites

Estas son las unidades básicas de todo juego en el plano (llamado despectivamente 2D) Se trata de arreglos rectangulares de pixeles, aunque en memoria se acomodan de manera lineal. Existen operaciones lógicas para hacer que los sprites tengan partes transparentes y opacas, que se puedan sobre-escribir sobre otras imágenes sin borrarse y por supuesto para moverse con realismo y componer imágenes mucho mas grándes e incluso animaciones si uno conoce las estructuras de datos adecuadas. Este tema es fascinante en si mismo, es una pena que tantos aficionados menosprecien los sprites sin saber que estos se siguen usando aun en los mas avanzados juegos de la actualidad.

Frame Buffer

La técnica del Frame Buffer consiste en que los cuadros de animación se generan en una zona de la memoria distinta a la memoria de video y luego se envian a esta de un solo golpe. Es la base para que la animación del juego se vea limpia y fluida.

Tiles

En los videojuegos los mundos no se construyen a mano desde cero, si así lo hicieran los juegos ocuparían unas cantidades monstruosas de memoria. Lo que se hace es que se usan bloques semejantes a los sprites llamados Tiles (traducido al castellano como mosaicos o azulejos). A diferencia de los sprites los tiles normalmente son cuadrados y completamente opacos, lo que les permite escribirse a mas del doble de velocidad que los sprites normales. En pocas palabras, los tiles son los bloques con los que se construyen los mundos en esta clase de videojuegos

Scrolling

Con la excepción de los juegos de mesa, en la mayoría de los juegos solo podemos ver una pequeña parte del mundo en pantalla. En juegos de mundos muy grandes la pantalla sigue a los personajes del mismo modo que lo hace una cámara y toma la acción. El término Scrolling viene de Scroll que se traduce como pergamino. Esos papeles de la antiguedad que se enrollaban en dos varillas cilíndricas y que se podían leer al tiempo que estas se giraban. El Scrolling es esencial para hacer mundos grandes y su movimiento debe de ser suave y preciso sin por ello dejar de ser rápido.

Animaciones Cíclicas

Como todos ya saben, una animación es una secuencia de imágenes donde cada una es ligeramente diferente de la anterior, en una animación cíclica esta secuencia de imágenes se muestra de manera que la primera sigue a la última y al ser desplegadas de manera continua da la sensación de movimiento sin fin, por ejemplo cuando un personaje corre sin detenerse.

Arboles de animación

Las animaciones cíclicas siempre muestran la misma secuencia de movimientos, cuando las animaciones cíclicas se combinan con una máquina de estado finito es posible hacer personajes que parecen reaccionar a su entorno, si corre sobre terreno plano habrá una secuencia diferente a si al correr se presiona el botón de salto o si en ese momento es alcanzado por algún monstruo. Aunque el arbol de animación puede ser hecho con tan solo con los dibujos horrorosos conocidos como ‘programmer’s art’ si se tiene paciencia (y algo mejor que el paint) pueden hacerse animaciones bastante elaboradas.

Sistema de menus

Esto que parece tan sencillo le ha hecho la vida imposible a los programadores de videojuegos mas jóvenes. Si se implementa un sistema de menú lo suficientemente abstracto se puede utilizar en partes del juego como por ejemplo las pantallas de selección, los diálogos e incluso durante el mapa de rutas.

Manejo de diálogos

No esperen por ahora tener voces reales mas allá de algunos gritos incidentales durante la acción. Por ahora los diálogos entre los personajes van a ser con texto y animaciones sencillas. Los diálogos están muy relacionados con el sistema de menus aunque a primera vista no parezca así.

Detección de Colisiones

La detección de colisiones es la rutina que revisa continuamente las posiciones de los sprites y manda una señal cuando dos o mas de estos sprites entran en contacto. Esto es mucho mas complicado de lo que parece, pues los algoritmos mas conocidos son de orden exponencial y los que trabajan de manera eficiente en conjuntos muy grandes son sumamente complicados de programar. Los que dividen el espacio y las estructuras en modo jerárquico parecen ser los mar rápidos y no son demasiado complicados de programar.

Física de Entorno

Relacionado de manera muy estrecha con la detección de colisiones, la física de entorno controla cosas que suelen ignorar los principiantes, por ejemplo que el piso sostenga a los personajes para evitar que la gravedad los jale al vacío, que los techos bajos lo detengan cuando salta o que no pueda caminar como fantasma traspasando las paredes. Por no mencionar cuando hay fuerzas externas como corrientes de agua, viento o plataformas. De hecho he visto juegos comerciales hechos por auténticas desarrolladoras (nada que ver con la gente de “la industria”) donde las plataformas móviles se deslizan bajo los pies de los personajes en lugar de transportarlos de un lugar a otro. En realidad es el mismo algoritmo con diferentes parámetros el que controla todas estas cosas.

Primitivas Geométricas Básicas

Aquí se engloban cosas que no tienen que ver directamente con los sprites como por ejemplo algoritmos de dibujo de lineas rectas, círculos y elipses, polígonos convexos como triángulos y por supuesto la forma como estos interactuan con los sprites. Como puede verse en el mapa esta tarea no depende de los sprites y por eso se ve casi como una ruta aparte.

Editor de Escenarios

El paint es bueno para crear sprites y con la ayuda de la cámara del celular que no llega al megapixel es mas que suficiente para crear texturas realistas. Pero una vez que se tenga capacidad de crear sprites animados y grandes escenarios a partir de los tiles va a ser necesario un editor de mundos. Este editor de mundos no solo servirá para acomodar esos tiles sino que debe de ser capaz de darles determinadas propiedades. Algo para lo que no existe una herramienta tan especializada. La salida de este editor debe de ser un archivo de mundos. Espero que este editor crezca lo suficiente para convertirse en un editor de contenidos y pronto ya no tenga necesidad de seguir usando el Paint.

Es divertido, pero como programador para mi es mucho mas sencillo hacer un editor gráfico especializado para este juego que aprender a usar un software de diseño gráfico de verdad. Además este juego no requiere gráficas tan elaboradas que justifiquen el uso de un editor de imagen mas avanzado que el paint. Me pregunto cual será el equivalente del paint para imágenes vectoriales.

Me pregunto que va a salir de esto, sobre todo ahora que al fin el juego va a tener algo que mostrar. Al parecer el punto en que este juego va a ser jugable ya no se ve tan lejano. Pero ahora menos que nunca me debo detener. Sobre todo porque hasta ahora el juego ha sido solo programación.

Anuncios

febrero 28, 2011 - Posted by | Uncategorized | ,

2 comentarios »

  1. No quisiera se me interpretara como crítica destructiva muy al contrario, creo que deberías usar menos la palabrería y mas la programación, pues la teoría la aprende cualquiera con paciencia de leer, pero la practica real no todos la dominan y aquí hace usted honores de esto último, al título que pones debes hacer honor y dejar la teoría para después de algo de práctica, llenas la web pero no llenas el interés real

    Comentario por Miguel | mayo 14, 2011 | Responder

    • Eso es cierto, creo que si pongo algunas rutinas de source code y luego las explico ayudaria mas a quienes quieren aprender ASM. Si casi no habia puesto codigo en la web era porque los programas en ASM pueden llegar a ser muy grandes pero creo que una subrutina de 10 o 20 instrucciones si que ayudaria a la pagina.

      Por otra parte no habia querido poner mucho source code porque un codigo que no se entiende es peor que simple teoria, lo que me han dicho que le hace falta a esta web es una seccion de descargas. Cualquier consejo para mejorar la pagina es bienvenido.

      Comentario por asm86 | mayo 14, 2011 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: