Adventureland, la primera aventura de Scott Adams |
Se trata del mítico sistema ideado por Scott Adams, que a parte de crear o publicar una gran cantidad de aventuras para multitud de plataformas, es también uno de los iniciadores del mercado de los videojuegos para ordenador como tal.
La historia ha sido contada por él mismo y en cualquier articulo que hable de las conversacionales se le nombra, ya que fue muy importante, no solo por sus juegos, si no porque su sistema influencio a multitud de imitadores en los años iniciales de los micro-ordenadores. Así que, resumiendo un poco, Scott Adams disfruto de la Aventura Original en un mainframe de su trabajo y decidio buscar una manera de portarla a su micro. Aunque ese micro fuera un TRS-80 de 16Kb y cassette Tarea titánica donde las haya, ya que, recordemos, la Aventura Original funcionaba en disco y solo el juego ocupaba mas de 200Kb.
Scott Addams uso su ingenio para crear un sistema de aventuras re-utilizable que cupiera en 16Kb y programado en BASIC. Por supuesto, no recreo toda la aventura original, pero consiguió crear juegos muy entretenidos con tan poca memoria. Vamos a ver como se las arreglo.
Primero, simplifico las descripciones a una linea, que siempre empezaban por "Estoy en", con el consiguiente ahorro de memoria. Los "objectos" con los que se puede interactuar aparecen a continuation de un "Tambien puedo ver", en forma de lista y después de las salidas. El parser era sencillo, soportando solo frases del tipo "verbo objeto", pero mas que suficiente para interactuar con el mundo virtual de la aventura. Y, ademas, este sistema de juego con textos simplificados venia muy bien para los jovenes españoles que como yo, aun habiendo aprendido solo un poco de ingles, queria sumergirse en el mundo de las conversacionales ^__^.
El principio de Pirate Adventure |
El primer juego que lanzo fue Adventureland, una version de la Original, y a continuacion Pirate Adventure. Esta aventura, en BASIC, fue publicada en el especial de la revista BYTE sobre aventuras, por lo que se puede ver como esta hecha, o al menos su interprete. La aventura esta dividida en un programa que graba los datos de la aventura en casette y luego el interprete en si. Según el mismo articulo el juego original no usaba este cargador, sino que Addams tenia otro programa editor de aventuras (que por desgracia no llegó a publicar).
El motor es realmente sencillo, los objetos, localidades, conexiones, mensajes y demás información están organizados en arrays, usando matrices en algunos casos (como para la salidas, cada localidad tiene 6 definidas en el array RM). El tamaño de los arrays es dinamico y es leido al principio del juego en variables acabadas en L (RL seria Room Length, imagino).
Los verbos y nombres están recortados a las 3 primeras letras, haciendo que sean difíciles de reconocer en el código del juego. Las respuestas a las acciones del jugador, si vemos el código fuente son una serie de números sin sentido aparente. Gracias a interpretes y compiladores modernos del formato de Scott Addams podemos darles un poco de claridad a esta tira numerica.
En realidad utiliza un formato que se haría muy popular en juegos posteriores de establecer un esquema de condición-acción para cada entrada de "verbo nombre" definida en una lista de vocabulario (el vocabulario en el array NV$, las condiciones-acciones en el array CA, las abreviaciones son casi obvias). Así que cada bloque de 7 de esta lista corresponde a una lista de condiciones o acciones, identificadas con números para reducir espacio, indexada por una entrada en NV$ que contiene un verbo y un nombre (o solo un verbo).
Entre las condiciones tenemos las típicas de comprobar la localidad actual, si hay algún objeto presente o lo tiene el jugador, etc. Tambien contamos con unas cuantas flags (el juego que mas usa tiene unas 32) de verdadero/falso, 16 contadores y 16 registros para salvar números de localidad (aunque solo se usan en juegos mas avanzados). Luego tenemos las acciones, que tambien son las típicas de mostrar un mensaje, mover un objeto o al jugador de sitio, modificar los marcadores anteriores etc. Si cualquier condición falla, el interprete para de ejecutar ese bloque. Tenemos un máximo de 7 condiciones-acciones por bloque en la tabla, pero hay una acción especial que permite continuar en la siguiente para crear respuestas mas largas.
Por supuesto no hay que definirlo todo con estas condiciones-acciones, el engine incluye funcionalidades básicas para movernos por el escenario y los típicos mensajes de "no te entiendo" o "no puedes hacer eso".
Como veis una estructura muy sencilla y muy adaptada a lo que se puede hacer en Basic, haciendo un uso extensivo de los arrays de dos dimensiones. Aunque el código esta escrito casi sin espacios para ahorrar memoria, parece ser que mucha gente destripo esta estructura y lo uso de base para otros juegos conversacionales. No puedo confirmar es si la famosa estructura de condiciones-acciones (que luego veríamos en el Quill y el PAWS) en vez de usar IFs tiene su origen en estas primeras aventuras, pero desde luego Scott Adams consiguió crear un sistema re-utilizable para crear aventuras con unos recursos limitadísimos. Lo que daría por ver la herramienta que utilizaba para crear aventuras y seguir haciendo arqueología aventurera ^^.
Por ultimo comentar que las versiones mas populares que vimos en Europa para Spectrum y compañía eran ya versiones "re-masterizadas" programadas en código máquina y que incluían en muchos casos gráficos para las localidades.
El motor es realmente sencillo, los objetos, localidades, conexiones, mensajes y demás información están organizados en arrays, usando matrices en algunos casos (como para la salidas, cada localidad tiene 6 definidas en el array RM). El tamaño de los arrays es dinamico y es leido al principio del juego en variables acabadas en L (RL seria Room Length, imagino).
Los verbos y nombres están recortados a las 3 primeras letras, haciendo que sean difíciles de reconocer en el código del juego. Las respuestas a las acciones del jugador, si vemos el código fuente son una serie de números sin sentido aparente. Gracias a interpretes y compiladores modernos del formato de Scott Addams podemos darles un poco de claridad a esta tira numerica.
En realidad utiliza un formato que se haría muy popular en juegos posteriores de establecer un esquema de condición-acción para cada entrada de "verbo nombre" definida en una lista de vocabulario (el vocabulario en el array NV$, las condiciones-acciones en el array CA, las abreviaciones son casi obvias). Así que cada bloque de 7 de esta lista corresponde a una lista de condiciones o acciones, identificadas con números para reducir espacio, indexada por una entrada en NV$ que contiene un verbo y un nombre (o solo un verbo).
Entre las condiciones tenemos las típicas de comprobar la localidad actual, si hay algún objeto presente o lo tiene el jugador, etc. Tambien contamos con unas cuantas flags (el juego que mas usa tiene unas 32) de verdadero/falso, 16 contadores y 16 registros para salvar números de localidad (aunque solo se usan en juegos mas avanzados). Luego tenemos las acciones, que tambien son las típicas de mostrar un mensaje, mover un objeto o al jugador de sitio, modificar los marcadores anteriores etc. Si cualquier condición falla, el interprete para de ejecutar ese bloque. Tenemos un máximo de 7 condiciones-acciones por bloque en la tabla, pero hay una acción especial que permite continuar en la siguiente para crear respuestas mas largas.
The Count, otro juego de Scott Adams |
Como veis una estructura muy sencilla y muy adaptada a lo que se puede hacer en Basic, haciendo un uso extensivo de los arrays de dos dimensiones. Aunque el código esta escrito casi sin espacios para ahorrar memoria, parece ser que mucha gente destripo esta estructura y lo uso de base para otros juegos conversacionales. No puedo confirmar es si la famosa estructura de condiciones-acciones (que luego veríamos en el Quill y el PAWS) en vez de usar IFs tiene su origen en estas primeras aventuras, pero desde luego Scott Adams consiguió crear un sistema re-utilizable para crear aventuras con unos recursos limitadísimos. Lo que daría por ver la herramienta que utilizaba para crear aventuras y seguir haciendo arqueología aventurera ^^.
En la linea 1270 del interprete se DIMensionan todos los arrays/matrices importantes |
Mas información
- Compilador moderno para el formato de Scott Adams.
- Scans de la revista Byte de 1982 con el articulo de Scott Adams.
- El mismo scan para leer online.
No hay comentarios:
Publicar un comentario