Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Proyecto de minijuego en ensamblador

–Game Developers de Fin de Semana–

Derrotado pero no muerto, regreso a mi vida en linea con esta humilde entrada del blog de ensamblador en la que una vez mas voy a hablar mal de “la industria” y escribir sobre proyectos que nunca voy a terminar. Voy a dejar para otro día las noticias que me ponen de malas y voy a contarles de un proyecto en el que he estado trabajando desde hace poco pero que no quería decirles para que no se me frustrara.

Si recuerdan de notas anteriores, un día que limpiaba mi centro de operaciones me encontré un documento de diseño de un juego que nunca programé. Bueno, pues hace poco quise retomar el proyecto, aunque cuando llevaba cierto avance me di cuenta de que las estructuras de datos que iba a necesitar eran demasiado complicadas para mis recursos actuales. El proyecto original trataba de un juego que aventura y exploración tipo Zelda ambientado en el espacio. El problema con el que me encontré a la hora de programar era que crear estructuras de datos para manejar adecuadamente la interacción de los escenarios y los items era algo que estaba fuera de mis capacidades actuales,o al menos no lo podría hacer en tiempo razonable. Sin mencionar que el tipo de perspectiva no se prestaba para el tipo de acción rápida que quería para el juego.

Como han de imaginarse este detalle me volvió a estancar hasta el grado de tener que echar por tierra alrededor de 3000 lineas de código inservible y volver a comenzar esta vez con otro formato que fuera mucho mas sencillo de programar pero que conservara el mismo espíritu de exploración y acción que buscaba conseguir. Luego de buscar ideas en juegos viejos me encontré con una cierta joyita bastante menospreciada de la época del NES que tenía ambos ingredientes y cuyo clon resulta mucho pero mucho mas sencillo de programar: “Clash at Demonhead”

Conocido en los paises asiáticos como “Dengeki Big Bang”, Clash at Demonhead es un juego de plataformas remotamente parecido al Mega Man que seguro todos ustedes conocen bien. Desde el punto de vista del Game Design se trata de un juego muy elaborado con una historia compleja, un mundo no lineal para explorar, una gran variedad de items, armas y equipo en el que se incluian trajes cohete y un interesante sistema de poderes especiales muy al estilo“la fuerza” de las películas de Star Wars.

Antes de continuar con los detalles de programación veamos lo que hacía diferente a este juego de otros títulos de temática similar: El juego se desarrollaba en un mundo bastante grande que incluía bosques, lagos, desierto, fortalezas robóticas y por supuesto la Montaña Demon Head. El mapa del juego era un grafo donde las aristas eran las escenas de acción llamadas aquí “Rutas” y lo vértices eran los cruces de estas rutas en los que el jugador podía elegir su propio camino. Esto en realidad es poco común porque en la mayoría de los juegos de plataformas y aventuras es exactamente al revés: los vértices son los niveles que cuentan con una o varias salidas y las aristas son esas salidas que conectan con el resto de los escenarios.

Pero desde el punto de vista de programación esta “comedia de aventuras” consta tan solo de dos partes muy básicas: La primera es una sección del código que controle la acción en las rutas y la segunda es un menú ingeniosamente disfrazado de mapa que asociado a un grafo elija de un archivo que rutas se deben cargar a la memoria. Las rutas son perfectamente lineales y en cada uno de sus extremos opuestos hay un sprite que al tocarlo sale del código de las rutas y entra al mapa de selección de ruta. Esa salida está asociada al vértice del grafo del que se va a leer la información de que rutas están asociadas a ese vértice. Dependiendo de si estos puntos de salida se difinen o no se pueden hacer niveles que solo puedan ser recorridos en un solo sentido como en un grafo dirigido o incluir salidas secretas a rutas que no aparezcan en el mapa. Si logro definir una buena estructura inclusive podría hacer niveles descargables completos en lugar de solo nuevas rutas individuales. Aunque ahora que lo pienso creo que sería conveniente incluir una especie de bandera para advertirle al código del mapa que seleccione una ruta de manera automática para poder crear el efecto de las rutas ocultas. El resto del código no es muy diferente al clásico jueguito de plataformas que todos game developers aficionados han programado alguna vez es su adolescencia.
toma externa
Bueno, creo que con esa descripción ya es suficiente para que se den una idea de como un juego que parece ser muy elaborado a nivel design puede ser muy sencillo a la hora de programarlo si se tiene la suficiente capacidad de abstracción de datos. Por cierto, poco después de ese último eclipse de luna que al parecer a nadie le importó estaba programando el código básico que carga y controla las rutas. Creo que tengo que partir la estructura total del programa para hacerlo mas manejable o voy a acabar con otro código inmanejable como el del primer intento. Por cierto, esta vez pude poner en práctica otro método para mantener el código bajo control. Aparte de usar una hoja de cálculo para llevar el control de los identificadores usados en el programa, la herramienta DRAW incluida en OpenOffice. La representación de estructuras de datos y flujos de programa son mucho mas rápidos de entender si se dibujan usando este programa. Por cierto, no piensen que Draw de OpenOffice sirve solo para hacer diagramas de flujo, yo mismo nunca acabé de entender el modo en que los antiguos diagramas de flujo representaban las subrutinas por lo que no esperen encontrarse los símbolos clásicos usados en esos documentos cuando vean este.

Bueno, pues ya llegué a mi límite de 1000 palabras y ahora lo que queda es ponerme a programar en serio. Me gustaría subir lo que llevo del juego pero como por un buen rato el programa no va a ser verdaderamente jugable mejor hago apuntes de las subrutinas que logre programar y cuando junte las suficientes hablaré de ellas en este blog. Mientras para que no se aburran y no me distraiga demasiado voy a estar usando mi cuenta de Twitter para mantenerlos informados de este modesto desarrollo. Solo espero que este proyecto pueda terminarse y no se una a la interminable lista de proyectos frustados de “El Cementerio de los Sueños”, otro proyecto que para mayor ironía también dejé sin terminar.

diciembre 22, 2010 - Posted by | Uncategorized

2 comentarios »

  1. Hola como estas muy buena la información que aportas en tu página, sobre todo de lo que llamaria el lenguaje madre; como veo que estas orientado a la parte de video juegos te envio un enlace sobre el ganador del año pasado de la competencia de hacer un juego de 1k, aunque el lenguaje requerido es Java, es interesante ver la capacidad de desarrollo de los participantes:
    http://marijnhaverbeke.nl/js1k/
    Saludos!

    Comentario por Ramonp | abril 28, 2011 | Responder

    • Eso me recuerda que alguna vez vi un tetris hecho en ASM para Windows que solo media uno o dos kbytes, todo un logro si tomamos en cuenta que la cabecera de un ejecutable de windows por si misma mide 3k.
      En cuanto a otros proyectos desde hace mucho que me habia interesado la robotica pero no habia tenido los recursos ni los conocimientos necesarios hasta ahora. No serian proyectos muy avanzados pero un insecto que pueda ‘vivir’ sin que nadie lo controle es un proyecto perfectamente factible, pero por ahora mejor termino primero el minijuego y luego ya veremos.

      Comentario por asm86 | abril 28, 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: