Programa aventuras en tu PC para Spectrum con InPAWS
Recientemente ha sido editada una aplicación que puede hacer las delicias de
aficionados al Spectrum que gusten de crear aventuras conversacionales. Esta pequeña
maravilla ha sido bautizada por su creador con el nombre de InPAWS (muy
probablemente en contraposición a la herramienta UNPAWS, que hace una
tarea más o menos contraria a la que hace InPAWs).
Para entender InPAWS primero tendremos que entender PAWS. Para aquellos que no lo
conozcan, PAWS (Professional Adventure Writing System) es un sistema de creación de
aventuras para Spectrum, Amstrad y PC, creado por Graeme Yeandle y Tim Gilberts,
distribuido por la empresa Gilsoft. Sin duda la más famosa y usada de todas las
versiones es la de Spectrum, con la que se han realizado joyas como Jack the Ripper,
la española Abracadabra o las más recientes aventuras, también españolas, de la saga
del Dr. VanHalen.
PAWS permite programar una aventura sin tener conocimientos de programación,
implementando un lenguaje sencillo basado en condactos (condiciones y actos).
|
PAWS |
Crear aventuras hoy en día con PAWS se había vuelto más sencillo, al usar emuladores y
permitir así grabar la aventuras según la avanzábamos con un simple snapshot. Sin
embargo, con InPAWS, la facilidad es aún mayor, mucho mayor, al permitirnos escribir la
aventura en nuestro PC, con un editor de textos cualquiera.
InPAWs toma un fichero de texto en el que se especifican todos los datos de una aventura,
y genera con ello un fichero en formato .tap, que contiene la base de datos de la
aventura tal y como la graba el PAW de Spectrum, permitiendo así que la aventura se
cargue en el PAW de Spectrum como si lo hubiéramos hecho allí mismo.
Uno de los engorros de PAWS fue siempre el sistema numérico: en PAWS, cada localidad,
cada objeto, cada mensaje, etc. estaban en una lista numerada, y cuando teníamos que
hacer referencia al mismo, debíamos recordar el número que le correspondía. Esto hacía
que todo usuario de PAWS tuviera a su lado su cuaderno, o su hoja, con estas listas,
para ser capaz de acordarse. Con la llegada de InPAWS sin embargo esto ya no es
necesario, puesto que permite ponerle un nombre a una localidad al estilo Cocina o
Precipicio, y el propio InPAWS se encargará de ponerle un numero cuando exporte para
PAWS. Obviamente lo mismo se puede hacer con objetos o mensajes, de tal modo que es mas
fácil recordar el objeto barra por el nombre barra que por el número 7.
Adicionalmente, otro problema de PAWS ha sido siempre la total separación de cada tipo de
datos en su editor: teníamos por un lado los mensajes, por otro las localidades, por
otro las conexiones entre localidades, etc. Esto hacía que determinar todas las cosas
relacionadas con un lugar, con un puzzle concreto, pudiera ser complicado. InPAWS sin
embargo no marca prácticamente orden alguno, por lo que es perfectamente factible tener
los mensajes relacionados con una localidad, o con un puzzle, incluso las condiciones o
acciones a realizar en ese puzzle, juntos en el código.
Veamos algunas porciones de código tomadas de la Demo que acompaña a la primera release
de INPAWS (no se muestra el fichero completo, tan sólo porciones de código que muestran
cómo se programa con esta herramienta). Nótese que algunas líneas (largas) se han
partido para facilitar la lectura del mismo:
//--- Declaración de Flags: --------------------------------------------------
// Flags usados en la aventura
FLAG portalonAbierto; // Portalon de la entrada
FLAG aldabonQuitado; // Si el jugador ha quitado el aldabón de la puerta
FLAG visitadoRecibidor; // SET la primera vez que se visita
// para que de un bonito mensaje
//--- Declaración de localidades: ---------------------------------------------
// -- Presentación y asignación de variables globales
LOCATION Inicio 0 // La localidad de inicio debe ser siempre la cero
{
" De vuelta a casa, tras tu último trabajo en un prestigioso despacho de
abogados tomado por una horda de horribles vampiros chupasangres...es decir,
por \"otra\" horda de horribles vampiros chupasangres, recibes una llamada del
alcalde de XXX, un pueblo de los alrededores, para un nuevo trabajo.^^ Se
trata de investigar una serie de extraños sucesos y desapariciones en los
alredores de la vieja mansión junto al cementerio. Sin dudarlo aceptas el
trabajo, un nuevo reto para:^^{16}{2} LIMPIEZAS FACUNDO^ EXORCISMO
Y DESVAMPIRIZACION^ SERVICIO EN TODO EL MUNDO";
//-------- Localidad de inicio del jugador
Location Verja
{
" Te encuentras frente a la verja de entrada a la vieja mansión,
un imponente edificio de vetustos tejados ennegrecidos por el tiempo y
siniestros gabletes acechantes. La verja está abierta.";
CONNECTIONS { N to Entrada ENTRA to Entrada };
}
// Vocabulario y respuestas a comandos en esta localidad:
VOCABULARY { Noun: "VERJA"; Noun: "MANSI", "EDIFI"; Noun: "GABLE"; }
RESPONSE { EX VERJA: AT Verja MESSAGE "Oxidada." DONE;
ABRE VERJA: AT Verja MES "Ya está abierta, además
e" MESSAGE "stá demasiado oxidada para moverla." DONE;
CIERR VERJA: AT Verja MES "E" MESSAGE "stá demasiado oxidada
para moverla." DONE;
EX MANSI: AT Verja MESSAGE "Tendrás que adentrarte para
conocer sus secretos..." DONE;
EX GABLE: AT Verja MESSAGE "Puntiagudas formaciones que
te producen escalofríos." DONE;
SALIR _: AT Verja MESSAGE "Un Robledillo jamás abandona un
trabajo sin acabar." DONE;
}
//--- Localidades sencillas (descripciones y conexiones): ---------------------
Location PasilloSuperior
{
" Un estrecho pasillo comunica las habitaciones y
la escalera principal que baja al salón.";
CONNECTIONS { BAJAR to Salon SUR to PuertaPasillo Norte to FinPasillo};
}
Location FinPasillo
{
" Te encuentras al final del pasillo, frente a un enorme ventanal que
te indica el final del camino.";
CONNECTIONS { S to PasilloSuperior };
}
Location PuertaPasillo
{
" Estás frente a la puerta de una habitación al final del pasillo.
A diferencia de las otras puertas, esta parece que se conserva en
un estado aceptable, sus goznes engrasados, su madera cuidada, el
pomo intacto. La posibilidad de que alguien pueda habitar aún esta
casa te produce cierto escalofrío.";
CONNECTIONS { N to PasilloSuperior };
}
// La localidad 0 se presenta y tras esperar una tecla, saltamos a la
// localidad de nombre "Verja":
PROCESS 1
{
* _: AT Inicio PROMPT 2 ANYKEY GOTO Verja DESC;
_ _: NEWLINE PROCESS Salidas;
}
//--- Ejemplo de objetos: -----------------------------------------------------
Object abrigo
{
"Un abrigo";
INITIALLYAT WORN;
WORDS ABRIG _;
WEIGHT 1;
PROPERTY CLOTHING;
}
VOCABULARY { NOUN: "abrig"; }
|
Otra ventaja de InPAWS es que mejora la compresión: para permitir la inclusión de más
texto en los 48K del Spectrum, PAWS tenía un sistema de compresión basado en sustituir
los códigos ASCII superiores a 127 y correspondientes a los tokens del Spectrum, con
grupos de letras muy utilizados en la aventura. Para eso PAWS tenía su opción Compress
que realizaba el análisis de los textos tratando de encontrar textos repetidos y
substituía, por ejemplo la por un token, ocupando 1 byte en lugar de 2, y así con
otras coincidencias, a veces de mas letras). InPAWS por su parte se aprovecha de la
potencia de un PC para hacer lo mismo, pero consiguiendo mejoras en la compresión en la
mayoría de los casos (probablemente dado que un PC puede hacer muchísimas mas pasadas
en el mismo tiempo que un Spectrum, aunque esto, al no ser aún los fuentes públicos, es
básicamente una conjetura del que escribe estas lineas).
Como todo no podía ser perfecto, InPAWS adolece de un problema: es incapaz de definir los
gráficos de la aventura de una manera natural. Sin embargo, el propio InPAWS permite que
tras generar dichos gráficos en el PAW, se puedan importar para ser usados desde InPAWS
y así poder seguir usando InPAWS tranquilamente con esos gráficos.
La última versión de InPAWS conocida cuando escribo este artículo es la RC2, que además
cuenta con una interesante capacidad: puede generar, además del fichero .tap para
Spectrum, los ficheros fuente que usa el PAW de Amstrad (para CPM en realidad) y el PAW
de PC, con lo cual es en teoría posible hacer con un solo fuente tres versiones del
mismo juego.
El autor de InPAWS, Francisco Javier López, alias Mastodon, era hasta el momento
desconocido en el mundillo tanto de las conversacionales como del Spectrum, pero eso va
a acabar porque ha accedido a realizar una entrevista para MagazineZX, que podéis leer a
continuación.
Entrevista a Mastodon (Autor de INPAWS)
Tenemos hoy con nosotros a Mastodon, autor de la herramienta InPAWS, algo que promete
resucitar el viejo PAWS con aventuras para Spectrum (y Amstrad) hechas en nuestros PCs y
sin saber programar.
MZX> Hola Mastodon
Muy buenas.
MZX> Bueno, antes de entrar en nada más, nos gustaría que te presentaras un poco
para que te conozcan. ¿Quien es Mastodon? ¿De donde es? ¿Estudias o trabajas? ¿En
que?
Pues para empezar te diría que Mastodon es un personaje de una saga de aventuras creada
por Steve Meretzky, del que me considero un admirador, y que simplemente me pareció
gracioso como nick al darme de alta en algún foro. Si te refieres así en plan personal,
pues para ser conciso y que luego no me recorten la entrevista te diré que tengo 37
años, que actualmente vivo en un pueblo de la provincia de Madrid y que trabajo en el
sector de las telecomunicaciones (soy informático, PIM dicen algunos, je je), aunque mi
labor profesional actual no guarda relación con la programación.
MZX> Cuéntanos
¿cuando conociste el PAWS? ¿Has realizado alguna aventura con él
en otro tiempo?
Mi primer contacto con PAW fue bastante precoz. Antes siquiera de que Samudio nos hiciera
soñar con su peculiar estilo en Microhobby (que tiempos), llegó un día mi hermano por
casa con una cinta pirata y unas fotocopias borrosas en inglés (siempre traía cosas
raras, el muy cabrón). En la cinta había una versión del PAW en inglés. Yo por aquel
entonces, aunque conocía las aventuras, no sabía que existían herramientas para crearlas
ni que diablos era un parser. Cuando lo vi funcionando recuerdo que me quedé bastante
impactado, era sencillamente una maravilla. Estamos hablando posiblemente del año 1986 o
el 87. Tiempo después hice una aventura con temática Western, que sinceramente espero
que nunca vea la luz, además de algún proyecto de ciencia ficción inacabado.
MZX> ¿Y el Spectrum?¿Como llegaste al mundo del Spectrum?
Curiosamente el primer ordenador que pasó por mis manos fue un ZX81, de esos de un K y
teclado pintado, que nos había prestado un amiguete. Luego se empezó a poner de moda el
Spectrum así que terminamos pidiendo uno a los reyes. Finalmente nos trajeron un plus,
de los que tenían teclado profesional. En aquel momento casi todos nuestros amigos ya
tenían Spectrum así que en ese sentido fuimos de los rezagados.
MZX> ¿Conservas aquel Spectrum u otro? ¿Tienes algún entorno real funcionando o
sólo emuladores?
Lo conservo todo, incluso las cintas, aunque por razones prácticas sólo utilizo un
emulador.
MZX> ¿Ademas de programador has sido alguna vez jugador de aventuras?¿Tienes una
favorita? ¿Como conociste las ACs?
Sí, bueno, en el tema de las AC me considero más jugador que otra cosa. Mi primer
contacto con las aventuras vino con juegos como Yenght, La princesa, o El hobbit, aunque
por aquel entonces sólo era un granuliento jugón y para mi las aventuras eran
simplemente un género más. Luego vino el PAW y la serie de artículos de Samudio, y
entonces sí que empecé a interesarme más en serio por las aventuras, y menos por otro
tipo de juegos. Con el advenimiento de Internet tuve la oportunidad de recuperar la
afición, y desde ese momento vengo jugando con más o menos frecuencia a alguna que otra.
Tengo muchas favoritas, aunque todas de la escena inglesa, ya que la española no la
conozco mucho: Curses, Anchorhead, Sorcerer, Planetfall, Leather Goddesses of Phobos
en
el Spectrum me gustaban las de Melbourne (Hobbit, El Señor de los Anillos) y sobre todo
Level 9.
MZX> ¿Que te parecen los interpretes de Melbourne o Level 9? ¿Hay algo en ellos
que creas que el de PAW adolece?
El más completo era el de Melbourne, aunque a mí siempre me han parecido más divertidos
los juegos de Level 9. El principal problema de PAW era la falta de memoria, que
obligaba en la mayoría de los casos a trocear los juegos en varias cargas.
MZX> En cuanto a InPAWS, ¿como se te ocurrió hacer esta herramienta?
Pues tenía (y tengo) un proyecto en mente, una especie de homenaje a Level 9, de hacer
una aventura para Spectrum estilo Red Moon. Mi idea, no sé si es una locura, era que
explotando las posibilidades de PAW haciendo uso intensivo de procesos, descripciones
cortas y efectivas y puzzles sencillos de implementar, sería posible meter en 48k una
aventura de unas 200 localidades con sus objetos, descripciones, personajes, e incluso
gráficos. Lo de los gráficos no lo tenía tan claro, aunque quien haya visto los gráficos
minimalistas de Level 9 comprenderá a que me refiero.
El caso es que incluso comencé el proyecto, tecleando la aventura en el PAW original,
haciendo apuntes en un excel con los objetos, flags, etc. Cuando empecé a crear
procesos, me vi apuntándolos también en el excel con cada uno de los condactos
comentados. Total, no es difícil imaginar que me desanimé al cabo de poco tiempo.
Así que se me ocurrió que quizá podría hacer un programilla para convertir un fichero de
texto con comentarios a una aventura de PAW. Se trataba, como planteamiento inicial,
simplemente de poder comentar las líneas de PAW, nada más. Así empezó todo.
MZX> Cuéntanos un poco el desarrollo de InPAWS
¿fue mucho tiempo?¿Empezaste
alguna vez y lo dejaste o una vez que te pusiste fue todo de tirón? ¿has utilizado
alguna herramienta aparte del compilador?
Pues el desarrollo me ha llevado un par de meses aproximadamente. Varias veces estuve
tentado de hacer una pausa, pero como me conozco demasiado bien sabía que esa pausa
sería definitiva, así que me obligué a terminarlo. En algunos momentos me sentí un poco
como Sísifo. Por ejemplo, cuando cargué la primera prueba en un emulador, no funcionaba.
Todo estaba como en UNPAWS, estaba seguro, pero no funcionaba. Así que tuve que hacer mi
propia labor arqueológica comparando byte por byte los tap de InPAWS con las originales
para ver las diferencias. Algunos de los datos que se vuelcan a la memoria del tap no sé
ni para qué valen, solo sé que están en todas las aventuras y que si no los pongo no
funcionan. En otros casos tengo que volcar el número de localidades, o de objetos en
cierta dirección de memoria además de en la que dice UNPAWS que están. Al final conseguí
que las aventuras generadas por InPAWS fueran idénticas, byte a byte a las
originales.
Otro tema gracioso fue el de la compresión. Con mi moderno PC sin limitaciones de memoria
me pareció que me iba a comer literalmente al algoritmo compresor de PAW en 48k, y las
aventuras de InPAWS serían infinitamente más cortas que las de PAW. Cuando compilé mi
primera aventura con el nuevo algoritmo: ¡plof! Superada la memoria de PAW. Joder, que
golpe a la soberbia. Así que tuve que afinar mucho, y digo mucho, para que las viejas
aventuras siguieran entrando en la versión para la que fueron creadas, tras
recompilarlas con InPAWS. Sabía que si InPAWS comprimía menos que PAW, aparte de decir
muy poco de la utilidad de la herramienta, no animaría a la gente a utilizarla. Al final
InPAWS comprime un poco más que PAW. También es de justicia dar un reconocimiento al
buen hacer de Graeme Yeandle. Es un monstruo el tío.
Sobre las herramientas utilizadas, solamente he utilizado el compilador. Tampoco he
tirado de ninguna librería aparte de la estándar de C++. Está todo hecho desde cero.
MZX> ¿Qué te ha parecido cómo se ha recibido tu herramienta en los distintos
sitios donde la has presentado?
Pues creo que es algo pronto para opinar sobre eso. Me he anunciado en los foros donde
pienso que puede haber interés, y la respuesta ha sido bastante positiva, aunque algo
tímida. Soy consciente de que una herramienta de este tipo puede ser algo no muy
demandado. Sin embargo, pienso que a los que todavía se interesan por sacar cosas retro
les va a ayudar mucho. El caso es que existiendo cosas como Pasmo, BASIN, etc., está
claro que InPAWS tiene su lugar dentro del mundillo retro-informático. Hay que darle
tiempo.
MZX> ¿Tienes algún plan para el futuro con InPAWS? ¿Crees que hay más cosas que
hacer?
Sí, hay bastantes cosas. Lo primero es que permita crear aventuras de 128k para completar
su funcionalidad. También hay que mejorar el algoritmo de compresión y dar más
flexibilidad al lenguaje. Otra línea de trabajo interesante es hacer un intérprete de
aventuras PAW, al estilo del de Level 9 escrito por Glen Summers, pero con capacidades
de depuración más allá de las que ofrece PAWS: me refiero a ejecución paso a paso,
breakpoints, observación de flags (watches), etc. Lo que está claro es que para que
merezca la pena meterse en estos proyectos tiene que haber interés, y cuando digo
interés me refiero a algo más que considerar que la herramienta es útil. Me refiero a
interés real en hacer cosas con ella.
MZX> ¿Quieres decir hacer otro intérprete para Spectrum o para PC? Si es lo
primero
¿No crees que sería más sencillo, u otra opción, modificar la última versión de
PAWS para darle más capacidades? ¿Quizá algunas capacidades que tienen los parsers
herederos de PAWS como Superglus o SINTAC? ¿O a que te refieres exactamente con hacer un
intérprete de aventuras al estilo del de Level9?
No, no, tocar el PAW de Spectrum descartado, no sabría ni por donde empezar. Estaba
pensando en Level9, que es el nombre dado a un intérprete para PC escrito por Glen
Summers y David Kinder a finales de los 90. Actualmente va por la versión 4, corre en
varias plataformas y es capaz de ejecutar todas las aventuras de level9, incluyendo las
de gráficos del Spectrum, aparte de otras posibilidades.
MZX> ¿Piensas utilizar tu mismo InPAWS para crear una aventura?
Sí, quiero retomar el proyecto de Red Moon 2 (o como se termine llamando), y también
hacer alguna aventura con temática algo alejada de lo que habitualmente estamos
acostumbrados a ver en PAWS. Algo más en la línea de la moderna ficción interactiva sin
puzzles.
MZX> ¿Tienes algún otro proyecto en mente? (relacionado o no relacionado con
PAWS/Spectrum)?
Montones de directorios huérfanos en mi disco duro, je je. Y varias aventuras empezadas
con Inform.
MZX> ¿Como ves el mundillo del Spectrum a día de hoy?
Pues estoy bastante sorprendido. 25 años después de la aparición del Spectrum, y más de
15 años después de su muerte, no sólo hay hay una labor de preservación monumental con
páginas como WOS o SPA2, sino que la gente sigue sacando juegos para el Spectrum y hay
aplicaciones de desarrollo realmente sorprendentes y complejas.
MZX> ¿Y el de los conversacionales?
Creo que goza de muy buena salud, aunque a veces sufra pequeños trastornos mentales como
Inform 7, que con suerte se curarán pronto. Únicamente me da la impresión (y digo la
impresión por que no conozco demasiado el tema) que en España estamos algo rezagados en
cuanto a cantidad, de calidad seguro que no hay nada que envidiar. Es una pena, aunque
también es verdad que si tipos como yo sacaran alguna cosilla en vez de quejarse,
contribuiríamos a equilibrar la balanza.
MZX> Para terminar, si quieres añadir algo, estas líneas son tuyas:
Simplemente animar a la gente a que siga haciendo cosas para el Spectrum (sea con InPAWS
o no),para preservar la memoria de ese cacharro que tantos buenos recuerdos nos trae a
algunos.
LINKS