|
Equipamiento
Una computadora Amiga 500 con 1 MB de RAM + disco rígido de 20 Mb
Una videocámara, un genlock y una videograbadora para crear las animaciones según
la técnica rotoscópica.
Un grabador para grabar los efectos de sonido.
"Los elementos utilizados para rotoscopía…"
Programas
Aplicaciones commerciales:
Deluxe Paint, una fantástica herramienta de dibujo, usada de vez en cuando
para algunos fondos.
Devpac assembler, utilizado para programar el motor del juego y el trazado de
los polígonos.
GFA basic, usado para crear el editor específico para Another World.
Con la llegada de las computadoras de 16 bits, el lenguaje C se hizo más popular
en la industria de los videojuegos, ya que poseía muchas ventajas en comparación
al Ensamblador (portabilidad, estructuración y facilidad de comprensión). Tres
años antes de convertirme en diseñador gráfico, lo probé en la Atari ST y no obtuve
resultados favorables. El compilador era quisquilloso, ante el más mínimo error de
programación provocaba que la máquina se colgara y los tiempos de compilación eran
exasperantes. Esa experiencia francamente me desilusionó. Como siempre me gustó la
simpleza, los nuevos lenguajes que no necesitaban compilación me llamaron la atención,
así que intuitivamente me orienté hacia GFA Basic. Tan simple como un Basic estándar
y muy bien estructurado por un sistema procedural para el manejo de variables locales,
similar al C. GFA es un trabajo magistral.
Además era posible extender su funcionalidad llamando a un programa externo escrito
en Ensamblador. Y eso es lo que hice: junté lo mejor de ambos, primero, GFA para
programar rápidamente el editor del juego y segundo, Ensamblador para el motor
y las características gráficas que requerían un máximo de rendimiento.
¡Entre los dos la información del juego quedó lista para interpretar!
El editor del juego:
Quise trabajar con una herramienta funcional que me permitiera crear y testear
el juego completo sin tener que estar compilando o cambiando de aplicaciones
constantemente.
No me gusta perder tiempo con la tecnología y especialmente con lo que es
específico a un sistema operativo.
Así que estos fueron mis primeros objetivos:
- La lógica del juego debía ser programada en un lenguaje independiente de
toda plataforma, sin necesidad de compilación ni conversión de datos. Entonces
naturalmente me orienté hacia la creación de un intérprete de comandos.
Desarrollé un mini-lenguaje estructurado en 64 independientes de ejecución
independientes y 256 variables.
- Agrupación de polígonos: cada unidad visual del juego estaba compuesta
por muchos polígonos, así que resultó esencial agruparlos en un solo objeto
para facilitar su manejo. Por ejemplo, en un personaje.
- Estructura jerárquica de visualización: los grupos de polígonos debían poder
unirse para formar otro objeto. Esta estructura jerárquica evitaba la redundancia
a través de la creación de un sistema de instanciamiento. Por ejemplo formar un
grupo específico para la cabeza del héroe permitía su reutilización en todas
las fases de la animación.
Rotoscopía:
Esta técnica empleada en animación tradicional consiste en filmar actores
reales y luego copiar cada paso de su movimiento al celuloide. De esta forma
se obtienen animaciones muy realistas. Fue utilizada en Another World para
crear varias animaciones, especialmente las que poseen un mayor vínculo con la
realidad; por ejemplo el auto frenando, que fue filmado utilizando un modelo
a escala, la toma de los pies en la introducción, y también el personaje
caminando y corriendo.
En ese entonces este tipo de tecnología era muy difícil
de adquirir, así que tuve que ingeniármelas. Mi primera
idea fue usar celofán como papel carbónico. Es decir, aplicar
celofán a una pantalla de TV para calcar con un marcador los contornos
de una imagen de video pausada, para luego apoyarla en la pantalla de
la computadora y reproducir la imagen con un programa de diseño
gráfico. Este método no está del todo mal para imágenes
estáticas, como un dibujo por ejemplo. Ya lo había empleado
en el juego de Amstrad “Le Pacte”, pero utilizar este método para
una secuencia de video completa hubiera sido una locura.
La segunda idea era conectar un GenLock a una Amiga. Es un dispositivo
que les permite a las computadoras interpretar video en tiempo real, tomado
de una videocámara por ejemplo... Suena simple, pero no era el
caso, porque en ese entonces no existía el DVD y ninguna videocámara
podía congelar una imagen a la perfección. El único
dispositivo que permitía avanzar cuadro por cuadro con precisión
y sin fluctuaciones era una videograbadora VHS ITT con memoria digital.
Entonces tuve que traspasar todas las secuencias grabadas con la videocámara
analógica a cinta VHS...
En la práctica, cada imagen del video fue copiada manualmente utilizando
polígonos en el editor. Debía ser tan rápido como
pudiera ya que el reproductor de video no se mantenía en pausa
por mucho tiempo, se detenía automáticamente para cuidar
que no se estropearan las cabezas. Era como una carrera contra el tiempo.
Finalmente, la introducción del juego es la que más salió
beneficiada por el uso de esta técnica.
Dos secuencias de video utilizadas para rotoscopía en ese entonces
:
Secuencia
1 , Secuencia
2.
Descripción detallada del motor
del juego:
I. El editor de polígonos:
Haz clic en la imagen para ver la descripción de los íconos.
II. El editor de comandos:
Este juego fue programado en un lenguaje inventado, una mezcla de Basic
con Ensamblador. En la ventana superior se encuentran las funciones de
edición y en la parte inferior, el código para editar línea
por línea. El conjunto de instrucciones del lenguaje es muy reducido,
cerca de unas treinta "palabras". Mediante este editor se programó
la lógica del juego, incluyendo las instrucciones para manejo del
joystick.
Set de instrucciones:
Instrucciones relacionadas con multimedia, gráficos, sonido, paletas:
Load "número de archivo"
Carga un archivo en memoria, por ejemplo un sonido, nivel o imagen.
Play "número de archivo" nota,
volumen, canal
Reproduce el archivo de sonido en uno de los cuatro canales de audio a
la altura y volumen especificados.
Song "número de archivo" Tempo, Posición
Inicializa una canción.
Fade "número de paleta"
Cambia de paleta de colores.
Clr "número de pantalla", Color
Borra una pantalla con un color.
En el juego existen 4 buffers de pantalla.
Copy "número de pantalla A", "número de pantalla
B"
Copia el buffer de pantalla A al buffer de pantalla B.
Show "número de pantalla"
Muestra el buffer de pantalla especificado en el siguiente cuadro de video.
SetWS "número de pantalla"
Define la pantalla de trabajo, en la cual los polígonos se dibujarán
por defecto.
Spr "nombre de objeto" , x, y, z
En la pantalla de trabajo, dibuja el objeto en las coordenadas x,y según
el factor de zoom z. Un polígono, un grupo de polígonos...
Text "número de texto", x, y, color
Muestra en la pantalla de trabajo el texto especificado en las coordenadas
x,y.
Las variables y su manipulación:
Set.i variable, valor
Inicializa la variable con un valor entero entre -32768 y 32767.
Set variable1,variable2
Inicializa la variable 1 con el valor de la variable 2.
Variable1 = Variable2
Addi Variable, Valor
Variable = Variable + valor entero
Add Variable1, Variable2
Variable1 = Variable1 + Variable2
Sub Variable1, Variable2
Variable1 = Variable1 - Variable2
Andi Variable, Valor
Variable = Variable AND valor
Ori Variable, Valor
Variable = Variable OR valor
Lsl Variable, N
Lleva a cabo una rotación de N bits a la izquierda en la variable.
Llena de ceros las posiciones a la derecha.
Lsr Variable, N
Lleva a cabo una rotación de N bits a la derecha en la variable.
Instrucciones de derivación:
Jmp Dirección
Continúa la ejecución del código en la dirección
indicada.
Jsr Dirección
Ejecuta la subrutina ubicada en la dirección indicada.
Return
Fin de una subrutina.
Instrucciones condicionales:
Si (Variable) Condición (Variable o valor)
jmp dirección
Derivación condicional,
Si la comparación de las variables es correcta, la ejecución
continúa en la dirección indicada.
Dbra Variable, Dirección
Disminuye el valor de la variable, si el resultado es diferente de cero
la ejecución continúa en la dirección indicada.
Finalmente, instrucciones estructurales:
Setvec "número de canal", dirección
Inicializa un canal con una dirección de código a ejecutar.
Vec inicio, fin, tipo
Borra, congela o descongela una serie de canales.
Break
Temporalmente detiene la ejecución del canal actual y pasa al siguiente.
Bigend
Permanentemente detiene la ejecución del canal actual y pasa al
siguiente.
La ejecución del juego está estructurada en 64 canales de
ejecución independientes y 256 variables. Similar a un entorno
multitarea.
Cada canal ejecuta una parte del código especificado. Por ejemplo,
un canal se ocupará de los movimientos y la lógica del personaje,
mientras que otro se ocupa de su visualización. Otro canal mostrará
una bandada de pájaros en el fondo de pantalla, y otro disparará
una animación determinada al cumplirse cierto evento.
Los canales se ejecutan en orden, y la instrucción Break se utiliza
para pasar al próximo canal. Una vez que se alcanza el canal 64,
se muestra en pantalla el cuadro actual del juego y el ciclo se reinicia.
Cada canal puede inicilizar otro canal mediante la instrucción
Setvec. En el ejemplo a continuación, asumimos que el canal 2 se
ocupa de un personaje, éste decide disparar e inicializa en el canal 64
el código para mostrar en pantalla y gestionar un disparo del láser.
Posiciónate sobre la imagen para observar la evolución de
este proceso.
El láser se vuelve autónomo y desaparece cuando está
fuera de la pantalla o colisiona contra algo, por ejemplo una puerta,
entonces se inicializará una variable que causará el estallido
de la puerta.
El pasaje de parámetros entre los canales ocurre sólo a
través de las 254 variables globales del juego. Incluso las posiciones
del joystick fueron escritas en esas variables.
>> Página
sobre la Ilustración
|
|