Génesis | Realización | Ilustración | Versiones | Re-edición  
  ANOTHER WORLD  
  Realización  
  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