Aventura en la Tumba Azteca

Una de las primeras aventuras de texto que aparecieron en exclusiva para el C64, con el sello de los chicos de Alligata Software, fue este Aztec Tomb, una ficción interactiva en donde deberemos llevar a nuestro explorador por la selva amazónica hasta la entrada de la Tumba Azteca, nuestro objetivo final. Curiosamente fue la única aventura escrita por el prolífico Antony Crowther aunque su librería de software para el C64 fue muy amplia y variada, con juegos de todos los estilos imaginables.

Las instrucciones del juego, las que lo acompañan en la parte trasera de la cinta, son lo mas escuetas posibles: nos indican nuestro cometido, el de encontrar la tumba azteca, nos muestran las palabras básicas del vocabulario a usar y nos proponen nuestra imaginación para el resto. Más aventurero imposible.

El juego original se ha traducido a lo largo de estos años al alemán, italiano y húngaro y también se hizo una versión para el Plus4. Para la traducción al castellano todo el peso del trabajo ha ido a cargo de nuestro compañero Jeff Minter quien primero estudió las diferentes versiones que hay del mismo para llevar a cabo el proyecto.

Aquí nos deja este imperdible "making of":

El juego tenía la característica de haber sido programado en BASIC, con un parser propio, además de contar con gráficos realizados con los caracteres predefinidos de Commodore. Podría entenderse en un principio que la aventura se ejecutaría con cierta lentitud, pero para mi sorpresa, con la cantidad de lineas que tiene el juego, se comporta bastante bien, sin tener sensación de haber sido escrita en BASIC, a no ser por los gráficos.

Nunca se publicó una versión en castellano, así que Bieno, en un momento de nostalgia al haber sido su primera aventura conversacional, tomó la decisión de que ya iba siendo hora de poder disfrutar este título en castellano.

La traducción se ha realizado a partir de las tres versiones (ingles, italiano y alemán), cogiendo cachitos de una y de otra y aquí tenéis el paso a paso de como la hice:

Herramientas:

  • Para realizar estos cambios en el listado, me ayudé de la herramienta C64Studio, que permite editar listados en BASIC importados desde disco de manera muy sencilla.
  • Para emular el C64 en el PC, WinVICE.
  • El volcado de memoria a disco fue con el Action Replay 7.5
  • Para crear el Master en cinta fue el Tape Master Pro v3
  • La edición de la pantalla de carga fue con el GangEd2
  • Mover el SID (descargado de HVSC) con SIDReloc y conversion a DAT con el SIDPlay para Win.
  • El DirMaster para editar los discos .D64 donde fue moviendo archivos con los que trabajaba.

Pasos:

1.- Desprotección del programa.

El programa venía con protección en los listados, evitando que se pudiera leer adecuadamente mandando siempre el cursor al principio de la linea cada ciertas lineas:

  • Causa: un HOME (ir inicio pantalla) en ciertas lineas de REM, que provocaba que el cursor saltara arriba pisando continuamente el listado.
  • Solución: borrar todas las lineas de REM que molestan.

Además tenia un checksum de los datas, que si realizabas algún cambio, el programa se borraba:

  • Causa: si tocabas algo y el checksum de los datas era direfente a un valor que tenía, hacía un NEW.
  • Solución: borrar esa linea, no aportaba nada al programa.

Y para rematar la faena, el listado de las versiones alemanas e inglesas, estaba separado en 2 partes en BASIC en la memoria (el código principal y las pantallas), se jugaba con los punteros de inicio del programa de BASIC para acceder a un listado o al otro dependiendo si tenía que pintar una pantalla nueva o no.

  • Causa: el puntero del inicio del BASIC se manejaba con el POKE 44,64, yendo a una dirección o a otra. El motor del juego se encontraba en la posición $1000 de inicio del BASIC, mientras que las pantallas estaban situadas en la posición $4000 de memoria y se volvía al lugar de la memoria mediante POKE 44,16 ($1000) a POKE 44,64 ($4000).
  • Solución: coger el listado en italiano, que tenía todo en un unico listado (la vía fácil) y queda finalmente el listado desprotegido para realizar los cambios de traducción.

2.- Traducción de pantallas, objetos y localizaciones.

Se realiza una primera traducción a ciegas desde el italiano. Palabra por palabra literalmente. Esto provoca que algunos objetos, situaciones o respuestas no tengan sentido. Asi que a para darle un poco de sentido, cruzo también traducciones del ingles. Esta parte fue la fácil.

3.- Traducción del "parser" (analizador sintáctico y sintético).

Aquí nos encontramos un batiburrillo de letras en dos cadenas bastante largas.

En el que nos encontramos objetos que podemos recolecta ("TA"), objetos o localizaciones que interactuan con un verbo ("OL"), localizaciones del juego ("LO") y órdenes en forma de verbos ("CM"). Este batiburrillo de letras había que ir dividiendolo en partes para identificarlos y luego traducirlos. Algunas variables se me dividían en las tres primeras letras de una palabra y los comandos en las cuatro primeras letras. Aquí sí que fue un poco lío, porque con 3 letras no podía hacer traducciones literales.

- "DOO" sé que es "DOOR" porque en los DATAs iniciales veía esa palabra.
- "BRI" sé que es "BRIDGE" por lo mismo.

La traducción de estas dos palabra son PUERTA y PUENTE, pero sus tres primeras letras es "PUE" y el parser no funcionaba adecuadamente. Así que en este caso sustituí PUENTE por PONTEJA, que es un puente de pequeño tamaño. Y "PON" solo se emplea para esta palabra.

Así sucedía con todas las traducciones, vigilando que las tres o cuatro letras iniciales no coincidieran.

Eso son "casi" todas las palabras. Pero no todas tenían fácil traducción debido a que eran comandos incorporados al parser pero no eran los principales cargados en los DATAs ni en las descripciones. Así que tuve que cruzar las traducciones del inglés, alemán e italiano para buscar algún sentido a palabras de 3 o 4 letras de las que solo conocía eso, el inicio. Mediante ensayo y error acabé encontrado casi todos los comandos. Y muchos de ellos no son necesarios para completar la aventura, pero ahi están como... "JOD"... o "MEA"... bueno, os dejo que lo descubráis.

4.- Ajuste de longitud de traducciones.

Si una palabra es demasiado larga, provoca al imprimirla en pantalla un fallo de formato. Se desplaza la pantalla, se cortan lineas, se estropea el dibujo... por lo que procedo a otro ajuste de traducciones para no superar los anchos de linea. O ajusto la traducción o el tabulado.

5.- Pantalla de título inicial.

La versión en ingles, tenía un mensaje muy escueto de "-espera-" y comenzaba la aventura. La versión en alemán, ponía "QUO VADIS" (como se llamaba ahí este juego) de una manera muy sencilla y espartana. Pero además, la versión que encontré en alemán, directamente saltaba a la primera pantalla del juego (tenía un bucle FOR en cero cuando debería de hacer una pausa de unos segundos presentando el nombre del juego). En cambio, la versión en italiano tenía pantalla de inicio en ASCII, es la que conservé para la versión en castellano. Además, esta última versión tenía los créditos "ocultos" en unos DATAs (otro truco por si cambias los créditos, el juego no funciona al no coincidir el checksum y resetearte el juego). Eliminé esa linea de protección y cambio los DATAs mediante una calculadora TEXT to ASCII.

Incorporo una pantalla de introducción del juego, que no venía en ninguna versión, en la que se explican los objetivos del juego e incluyo una pequeña pantalla de ayuda donde se listan los verbos más empleados en el juego y de esta manera, el juego tiene un inicio un poco mas resultón.

6.- Justificado de textos y gráficos en pantalla.

Resulta que la versión alemana es diferente a la versión inglesa en la presentación de la pantalla de juego. La original, los gráficos están justificados a la izquierda, con textos a la derecha, mientras que la alemana están los gráficos justificados al centro con los textos bajo la línea de comandos. Realizo los cambios en el programa para que el aspecto visual del juego sea como el alemán, con gráficos en el centro y textos debajo, tal como estamos acostumbrados con las aventuras gráficas. También reparo algún grafico que no me gustaba.

7.- Rutina de salvado del progreso.

La rutina original cargaba y salvaba en cinta con un texto sin justificar al centro. La versión en alemán empleaba la grabación en disco con un texto justificado al centro. Opté por una única versión del juego que permitiera grabar o cargar de disco o cinta, con lo que es posible emplear ambos medios para cargar y guardar los progresos.
Curiosamente, en la versión en italiano no me funcionó nunca su rutina de grabación. Tenía distintos nombres para grabación y carga, por lo que no funcionaba adecuadamente.

8.- Incorporación de música in-game.

El juego original no disponía de música in-game, así que para dar un poco de ambientación, Bieno me suguirió el poner una música para acompañar la aventura. Al ser programa en BASIC, no dispone de las instrucciones necesarias para reproducir un archivo SID, por lo que incorporé un player en código máquina en una posición libre de memoria. Aparte del player, había que cargar el SID, por lo que fue colocado en una posición libre de memoria del Commodore no accesible por el BASIC, en la $C000.

El player lo coloqué por debajo del programa BASIC, en la posición $02A7, donde dispongo de 89 bytes libres. El player del SID, en verdad está embebido en el propio SID. Únicamente lo que hace el programa situado en $02A7 es modificar el vector de la interrupción del raster en $0314 y $315, que llaman a $EA31, metiendo nuestra llamada al SID por medio, que se encuentra en $02A7 (bueno, un par de bytes mas adelante). De esta manera, cuando se produce la interrupción llama al SID para reproducirlo y devuelve el control al BASIC para continuar ejecutando el juego.

Para preparar todo el bloque, realicé un cargador inicial al juego para que me cargue en memoria el Player mediante interrupciones, el SID que voy a emplear y luego el juego. Una vez están todos los bloques en memoria, a través del cartucho Action Replay 7.5, realizo una captura de memoria para exportarlo a un único archivo PRG para poder montar el juego en cinta y disco.

9.- Incorporación de nuevas descripciones y textos de ayuda.

El juego, en su concepto inicial, era terriblemente difícil avanzar puesto que no disponía de suficientes pistas en las descripciones para ir progresando. Había situaciones en las que dar el paso correcto era una proeza puesto que carecía de ayudas de ningún tipo. Para dar ciertas facilidades al jugador, incorporé unas cuantas lineas al código para que, mediante el EXAMINAR y MIRAR, nos desvelara el siguiente paso a realizar. Originalmente, el juego te decía "EXAMINA y PIENSA". Y ahí se quedaba tan "pichi".

Un par de ejemplos:

¿A quién se le iba a ocurrir trepar al tejado de la casa, si no aparece ninguna indicación por ningún lado de que se puede "TREPAR (CLIMB)" o que existe el "TEJADO" de la casa? Pues si uno está en la calle, fuera de la casa y "MIRA" o "EXAMINA" la casa, el programa te devuelve un mensaje que se puede "TREPAR" a la "CASA" para subir al tejado.

O la "CAPA", ¿quién en su sano juicio va a "PONER" o "VESTIR" una "CAPA" cuando es una acción que no te la esperas? Que por cierto... esta acción hay que realizarla en el "SOTANO" para que se produzca otro evento, porque el juego original podría avisarte con "SE CAE ALGO AL SUELO" y te podías pasar horas dando vueltas por la casa buscando un objeto que está en el "SOTANO" y solo es visible si vuelves a "EXAMINAR" o "MIRAR" el "SOTANO"

En fin... detalles para hacer mas amigable la aventura y que se pueda acabar sin tener mucha experiencia en aventuras conversacionales.

10.- Creación del MASTER para cinta.

Con el juego ya creado en PRG con la música in-game (ver Paso 8), nos disponemos a realizar el MASTER en cinta con la pantalla y música de carga como aquellos juegos comerciales que esperabamos a que cargaran mientras comíamos un bocata de Nocilla. Para el Master de cinta, utilicé un programa que te lo da todo mascado. Lo unico que hay que hacer es tener preparada la pantalla de carga en formato KOALA, una música en formato SID. No me extiendo en este proceso mucho con la creación del cargador ya que existe mucha literatura al respecto, y solo mencionaré algunos pasos realizados:

  • Con el TAPE MASTER PRO 3 edité un texto de carga que se muestra en pantalla y el texto del scroll horizontal. También seleccioné las rayas de carga tirando a verde acordes a la pantalla de carga.
  • Incorporé una pantalla de carga preparada por Josepzin y Bieno en formato KOALA.
  • Añadí el SID de carga, localizado en la posición $1000. Pero en SID directamente no vale y hay que convertirlo en DAT mediante el SIDPlay, exportándolo a .DAT. Se mete todo en un único disco mediante el DirMaster... (bueno, lo de preparar los archivos en el disco casi es lo primero que hay que hacer antes de meterse con el TAPE MASTER). Y con un botón, te crea el archivo que lanza la creación del MASTER para cinta. Lo mezcla todo junto... te lo graba a cinta.. (como estaba con el WinVICE, pues a .TAP).
  • ¡Y tachán! el juego dispone de un cargador con pantalla de presentación y música de carga.

Con todo esto, ya tenemos el programa funcionando con la música in-game!!!
Así fue la aventurilla de traducir un juego conversacional en BASIC.

¡¡¡A disfrutarlo!!!

EL juego salió en el disquette del fancine de Explora Commodore del 2024

Créditos:

  • Programa Original Aztec Tomb de Antony Crowther / Alligata Software (1983)
  • Traducción al castellano por Minter
  • Música Tape Loader por The Dark Realm (1995)
  • Música in-game por Wizax (1988)
  • Carátula de la cinta por Josepzin
  • Pantalla de carga de Minter & Bieno
  • Brebajes usados: Mahou & Kombucha La Valiente

Descarga:

  • Podéis descargaros el juego desde nuestro Itchio en ESTE enlace.

Publicar un comentario

4 Comentarios

  1. Seguro que ese Minter lo programó para Astra! :P

    ResponderEliminar
  2. Vaya currazo la traducción de este título, gracias por compartir el proceso.

    ResponderEliminar
  3. Increíble, el otro día leí el reportaje de la 8ª edición de la Explora Commodore y justo encima de una de las mesas veo este juego, lo busque por internet, más tarde me leo el artículo publicado en esta web sobre el mismo, y ahora aquí me lo encuentro en español. Esta claro que si hay una 9ª edición espero ir allí. Muchas gracias. Un saludo desde La Coruña.

    ResponderEliminar
  4. Tengo buenos recuerdos de Aztec Tomb porque me vino en una cinta de turbos. Nunca pude terminarlo, como bien explicáis tiene cosas que no son intuitivas. Hay una segunda parte muy difícil de encontrar (Aztec Tomb Revisited) que no se parece en nada :)

    ResponderEliminar