Desarrollo de juegos en SEGA Saturn, un ejercicio de imaginación (2 de 3)

En la primera parte de esta miniserie basada en el post de Mick West sobre su experiencia en el desarrollo para Saturn hicimos un “paseo” sobre el hardware de la máquina de SEGA y el kit de desarrollo que utilizó Neversoft para desarrollar Skeleton Warriors: el PsyQ de Psygnosys. Ahora ahondaremos un poco más y veremos como se desarrollaba y se enlazaba código para esta consola.

West explica que para el desarrollo de Skeleton Warriors se utilizó Lenguaje C, el uso de C++ es prohibitivo para este proyecto debido al enorme peso de sus ficheros objeto (.OBJ) en un hardware tan limitado como Saturn, casi siempre programar en consolas requiere optimización de código para aprovechar cada componente al máximo, aunque no siempre es asi: el mismo Skeleton Warriors solo hace uso de un microprocesador SH2 en vez de los dos que trae la consola como bien mencioné en la primera parte de esta miniserie.

Skeleton Warriors
Skeleton Warriors, un beat’em up para SEGA Saturn y Sony PlayStation

Mick comenta en su entrada que la compilación de todo el juego se realiza mediante un solo Makefile (concepto bastante familiar para los linuxeros) llamado MAKEFILE.MAK, los Makefile son pequeños scripts que toman todo el código escrito en C y mediante el compilador generan el código ejecutable (lo que leerá la consola) así se evita tener que estar tecleando todo el proceso de compilación directamente con el GNU GCC que sería una locura si estamos ante un proyecto con archivos múltiples,, todo esto mediante una herramienta llamada Make. Y hablando de archivos múltiples veamos como Skeleton Warriors esta organizado archivo por archivo:

MAIN.C: Este archivo contiene las rutinas de inicialización de hardware, la configuración de los niveles de juego y otras rutinas útiles. En el caso específico de Skeleton Warriors este archivo contiene un montón de código de pruebas que el mismo llama “basura” pero que es muy útil para probar ideas y código experimental.

GFXLIB.C: Más rutinas a nivel de hardware, especialmente enfocadas al uso de efectos gráficos, practicamente todas fueron escritas desde cero que son algo ineficientes aún, Mick comenta que de mejorar alguna rutina en este archivo seria buena idea agregarla y comentarla.

SMP_PAD.C: Rutinas asociadas con el uso del control pad de Saturn.

GLOBALS.C: Variables globales de juego (puntaje, vida, nivel) Mick comenta que el uso de variables globales es una práctica adecuada, pero en la arquitectura de Saturn es un poco lenta por varios motivos, por lo que prefiere convertir algunas en estructuras (un tipo de dato definido por el programador, más bien como una clase que sólo almacena datos).

MAN.C: Todo lo relacionado con personajes jugables, incluye colisiones, West comenta que este código esta bastante inacabado al momento de escribir sus notas.

OB.C: Maneja el movimiento y la visualización de los objetos, específicamente los objetos enemigos, como los “guerreros esqueleto”. Aquí es donde la mayor parte del juego está hecho términos de inteligencia artificial de los enemigos y movimientos básicos, la estructura de datos todavía no está finalizada (todo siempre al momento de haber escrito sus notas, en 1995), específicamente los problemas de colisión y animación no estan del todo resueltos.

DATA.S: Tablas de animación para el personaje, supongo que aquí habra montones de matrices.

LAYER.C: Manejo del scroll parallax. Actualiza el personaje principal asignado fondos y desplazándose. También realiza el efecto ondulado en los niveles donde hay niebla. Por el momento (1995) los mapas del personaje se almacenan sin comprimir. West tenía pensado comprimirlos en el formato RLE que estaba usando en la versión de Genesis.

PAL.C: Manejo de paleta de colores, hay 2048 colores a elegir, cualquier pixel en la pantalla puede ser cualquiera de estos colores. West ha dividido lógicamente las paletas en ocho paletas de 256 colores.

BUL.C: Se encarga de todo lo relacionado con el manejo de balas, siempre como objetos separados, esto incluye las colisiones con los demás elementos.

PAD.C: Código que “recuerda” la posición del control en juego en un formato que West califica como “más entendible”, hay rutinas que indican si algún botón ha sido presionado recientemente.

START.C: Aquí solo hay una línea de código: la que indica cual es el primer nivel de juego.

PANEL.C: Rutinas relacionadas con la barra de energía del personaje principal.

PATH.C: “Monstruosas” rutinas para dibujar los mapeados del juego y el manejo de colisiones de elementos contra estos mapeados.

MATH.C: Rutinas de Seno, Coseno y rotación de sprites.

PsyQ
Por no dejar, otra instantánea del kit PsyQ de Psygnosys, notése el puerto SCSI a un costado de la consola

Al momento de escribir su documento, Skeleton Warriors estaba muy verde pero se puede apreciar casi sin problemas cual era la estructura básica de los juegos en Saturn (y en cualquier consola la verdad), en la próxima entrada colocaré cual era la estructura de los datos de Skeleton Warriors que coloca Mick West en su blog, con eso completamos esta miniserie sobre lo que se vivía a mediados de los noventa cuando se desarrollaban proyectos para las consolas de la época.

Anuncios

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