DOCUMENTACIÓN DE DAP
VERSION 5.02
programado por Javier Basilio
(Jaba)
Copyright (c) 1988-1999 Definitive Software
"Mejor compañía aventurera de 1995"
(IV PREMIOS DE LA AVENTURA)
Manual NO revisado por D.Antonio Vaquero
Director de la E.S.I.
Esta versión está dedicada a todos los que dijeron de uno u otro modo
que DAP era pobre visualmente y que Jaba no sabía programar la VGA.
Gracias por picarme.
Algunas cosas que se han dicho de DAP:
"Hace incluso demasiado fácil la creación de aventuras" - Fran Morell,
ex-presidente del Year Zero Club
"¿Qué tiene este parser que no tengan los demás?...lo sencillo que resulta
usarlo" - Daniel Cárdenas, presidente de Spanish Quest, en el fanzine
CAAD.
"Definitive ha matado moscas a cañonazos con la versión 5" - Zona Zero
*********************************************************************
Este manual se divide en tres partes:
Parte I : Presentación y descripción del producto.
Parte II : Conceptos básicos y ejemplos de creación de una
aventura.
Parte III: conceptos avanzados del parser.
*********************************************************************
*********************************************************************
PARTE I: PRESENTACION DEL PRODUCTO
*********************************************************************
DISTRIBUCION -----------------------------------------------
Hasta la versión 5.01 DAP era un producto Shareware. Sin embargo,
debido al preocupante bajón que ha sufrido el mundo de la Aventura, y
tras escuchar varios consejos y recibir muchos ánimos por parte de
buenos amigos, he decidido pasar la versión 5.02 al Freeware. Esto
quiere decir que este programa es totalmente gratuito; podrás usarlo,
distribuirlo entre tus amigos,etc... sin tener que pagar nada. Incluso
podrás distribuir los juegos que crees completamente gratis, eso sí,
no estás autorizado a hacerlo comercialmente o por Shareware, tus juegos
deberán ser igualmente gratuitos. Si insistes en ganar dinero con tus
aventuras, deberás entrar en contacto conmigo para obtener una licencia
especial. DAP es, a pesar de ser Freeware, un producto registrado, pro-
tegido por la ley, y que debe permanecer inalterado y sin modificaciones.
Puedes contactar conmigo para consultas, dudas, pedidos de nuevas
versiones, insultos, donaciones en metálico o especias, etc... en la
dirección:
Apdo. de correos 166
28922 Alcorcón (Madrid)
ESPAÑA
Por Internet, en sytovos@hotmail.com
Recuerda mi página oficial, con una sección de DAP:
http:://www.oocities.org/siliconvalley/grid/2294
Además me gustaría poder ver cualquier aventura que puedas crear, y
especialmente me gustaría recibir motores gráficos creados por los usua-
rios para incluirlos en DAP.
Si tienes cualquier duda o consejo, o si símplemente te apetece
hablar, ¡ESCRIBEME!
EL AUTOR ---------------------------------------------------
Jaba(Javier Basilio) nace en Madrid, 1978. Desde pequeñito
se agenció un Spectrum y dió la paliza a todo el que le ro-
deaba con sus últimas rutinas en ensamblador. Posteriormen-
te evoluciona al Amstrad CPC y crea un horrible programa
llamado DAP. Años más tarde se une al Year Zero Club como
colaborador, y, posteriormente, como redactor, para acabar
de director y redactor jefe; mientras tanto se dedica a per-
feccionar DAP, y crea algunas aventuras, siendo la más cono-
cida "Colosal Pirámide". Actualmente estudia 4º de Ingeniería
Superior Informática en la UCM y se dedica a jugar al HEXEN2 y
a acudir a conciertos de Heavy Metal, habiendo dejado ligera-
mente de lado las aventuras para buscar retos más reales, como
la exploración en tiempo real de tumbas egipcias; a pesar de
eso sigue mimando su DAP, para completa desgracia de toda la
comunidad informática en general y aventurera en especial.
INTRODUCCION -----------------------------------------------
(= publicidad gratuita de DAP)
"En algún lugar cerca de aquí se encuentra la Caverna Colosal,
donde otros han encontrado fortunas en joyas y tesoros, aunque
algunos de los que entran jamás vuelven a ser vistos. Se dice que la
cueva es mágica [...]"
Así comienza el primer juego conversacional de la historia:
"Adventure", de Woods y Crother. Los juegos conversacionales son
especiales para muchos, han levantado pasiones y han roto cabezas.
Son únicos e inimitables. Son, con toda certeza, el más profundo
juego, el entretenimiento más perfecto, que puedas encontrar en un
ordenador de cualquier clase. Actualmente las grandes compañías nos
acosan intentado vender basura con espectaculares gráficos SVGA y
enormes enemigos, o una especie de intentos de Aventura, esas cosas
llamadas "aventuras gráficas" que insultan nuestra inteligencia y
buen gusto (tengo que excluir de aquí al Monkey Island, si me lo per-
mitís - bueno y algunas más, pero no vamos a estropear lo poético del
párrafo anterior, ¿verdad?). Una gran definición de Aventura es la
que aparecía en el glosario del manual del Amstrad CPC "Una
pasión para unos, un aburrimiento para otros".
Personalmente me encuentro entre los primeros.
Todavía hoy quedamos muchos aventureros que, contra viento y
marea, con el único apoyo de nuestra amistad, nos mantenemos unidos
en el recuerdo de este gran mundo que aun hoy tiene más fuerza que
nunca, al menos entre nosotros.
Si eres uno de esos aventureros incorruptibles, este programa
es lo que necesitas. Representa la culminación de un sueño: el parser
español. Como sabrás, un parser es una utilidad especialmente
diseñada para la generación de juegos de aventura.
La idea de DAP nació cerca de 1988, cuando la aventura se
encontraba en una gloria comercial transitoria (por aquel entonces
atraía las miradas de las grandes empresas) y el mercado estaba
indundado por parsers... en inglés: léase PAWS, GAC, ILUSTRATOR ...
Empero, estos parsers fallaban en un concepto que para mí era
fundamental: eran realmente lenguajes de programación diseñados para
fabricar aventuras. Es ahí donde yo no entendía (ni entiendo) la
postura de sus programadores. Como ejemplo, actualmente existen más
parsers de factoría nacional, pero son compiladores de lenguajes (más
o menos complicados) que se limitan a leer un fichero ASCII con las
instrucciones del programa, siguiendo el clásico modelo del
compilador. ¿Y esto para qué? Para eso puedes coger tu compilador
favorito de "C" o de Pascal y programar una aventura usando
seguramente muchos más recursos de los que te va a ofrecer ese parser
X. Tal vez el lenguaje sea algo más complicado, pero vas a poder
hacer cualquier cosa. Además, aprender "C" es seguramente más
productivo que aprender un parser, porque los conocimientos de "C" te
servirán para programar lo-que-sea, algo que no podemos decir del
parser.
Es en esto donde DAP es esencialmente diferente del resto de
parsers, tanto extranjeros, como españoles. La filosofía de DAP es
radicalmente distinta. DAP consiste en un entorno de desarrollo,
donde, a través de cómodos menús, definimos la base de nuestra
aventura, con pulsaciones y a una velocidad increíble, con un
facilidad extremadamente alta, de tiempo de aprendizaje mínimo. Para
crear tu aventura no necesitas aprender ningún extraño lenguaje de
programación.
Sin embargo,hay puntos donde programar es inevitable. Cuando
queremos expresar al DAP qué queremos que suceda, por ejemplo, si el
jugador introduce la tarjeta en el cajero, es necesario programar una
pequeña subrutina. Pero esta programación se realiza usando un
sencillo lenguaje batch, que, como comprobarás, es de tan escasa
dificultad que aun resulta irrisorio utilizar esa palabra.
Las posibilidades técnicas de DAP son únicas y no se
encuentran en otros programas de este estilo: es el primer parser que
ha sentado la norma de uso del modo TWEAK de la VGA. Es el único con
soporte de música digital y que permite realmente crear una aventura
desde menús y sin programar. Fue pionero en el uso de código de 32
bits especialmente preparado para el procesador 80386. Ahora ha sido
el primero en incorporar los nuevos opcodes del 80486.
Esta versión posee unas características gráficas extremadamente
potentes. Anteriormente DAP había recibido numerosas críticas por ser
un parser en modo texto. Con la versión 5.00 esperamos ahogarlas.
Algunas de las características gráficas de DAP, como la
versatilidad que ofrece el uso de un motor gráfico,eran inéditas
hasta ahora.
GODS OF WAR, FEEL THE POWER OF MY DAP !!!
Jaba
OTROS SISTEMAS ---------------------------------------------
Existen otros parsers españoles actualmente. Que yo sepa,
son CAECHO,SINTAC,CUTRA,PROMETEO y NMP. Cada uno es como to-
do en esta creación; tiene sus virtudes y sus defectos. Lo que
he intentado en DAP es que las virtudes se crezcan sobre los
defectos.
Todos esos parsers, excepto CUTRA, tienen el problema que
ya he mencionado, en algunos, es posible que aprender ensam-
blador sea más fácil que ponerlo en marcha (no mencionaré
cuales para no granjearme enemistades con autores que actual-
mente considero mis amigos :-D ).
CUTRA es un parser cuasi-compatible con el DAP; usa un jue-
go de instrucciones similar e incluso existen conversores de
aventuras entre DAP y CUTRA. Su autor es Alberto Salazar
Palomo. Tiene la particularidad de generar código en PASCAL
en lugar de crear directamente una aventura, lo cual tiene
algunas ventajas evidentes.
Saludos a todos los creadores de parsers. ¡La competencia es
fundamental para aumentar la calidad!
SALUDOS ----------------------------------------------------
- Fran Morell, David Miraut, Daniel Cárdenas, Ramón Fusté,
Alberto Salazar,etc...
- Al Barbutis, a Mike&Ivanof, a Mijelh, al Parleño, a Julitorr,
a David (el c*b**n que me j**d**o la noche del sábado, perro
más que perro), y con especial cariño a LaTete y al Mentor. A
cualquier otro elemento o ser de la Escuela Superior de Infor-
mática de la Universidad Complutense de Madrid, exceptuando
a Lapaca, a quien le envio una amorosa patada en el culo.
- A todos los brothers of true metal que han ardido en el
fuego del verdadero metal. Manowar forever. ¡Hail brothers!
Estamos en el viaje hacia la gloria. Death to the false ones.
REQUERIMIENTOS DE SISTEMA ----------------------------------
- Un ordenador PC basado en 80386 o superior.
- Sistema MS-DOS 5.00 o compatible (OS/2, etc.)
- Tarjeta compatible IBM VGA.
- Al menos 3096K de memoria. Ciertas partes del programa están
escritas en modo protegido y podrían no funcionar con menos memoria.
- Para el sonido, una tarjeta Sound Blaster, o Sound Blaster
Pro para sonido estéreo. Con Sound Blaster 16 y tal, deberás escuchar
la música en modo "Sound Blaster (mono)", pues el modo estéreo de la
Pro no es compatible con las nuevas tarjetas.
PROBLEMAS CONOCIDOS ----------------------------------------
- Algunas tarjetas gráficas, como la S3 VIRGE, dan problemas
con el modo gráfico del ID. Si encuentras algún probema en
la visualización de ID, ejecútalo así:
ID50 -fixvideo
- No funciona con versiones de OS/2 anteriores a WARP.
- Windows 95: en ordenadores 486 DAP no funciona correctamente.
En Pentium, sí que lo hace. Este problema sucede con muchas
aplicaciones DOS extrañas (como Duke Nukem) y no sólo con DAP.
En realidad, la explicación debe buscarse en el modo virtual 86
mejorado del Pentium.
- Windows 3.x: No way!
- Es necesario tener activo el BLOQUEO NUMERICO bajo Id.
(¡esto es importante!)
- Algunas tarjetas CIRRUS bus local Vesa tienen problemas con
la Soundblaster. Esto es debido a un problema que tienen estas
tarjetas CIRRUS, que provoca que se entrometan en las transfe-
rencias DMA a la tarjeta de sonido. Este problema también apa-
rece en muchos programas, no sólo en DAP.
- ¡UNIVESA y DAP parecen no ser buenos amigos! Esto es provo-
cado por la forma en la que DAP modifica a placer todos los
registros de la VGA.
COMPATIBILIDAD CON JUEGOS DE ANTERIORES VERSIONES ----------
Hemos realizado un gran esfuerzo para mantener la
compatibilidad con versiones antiguas, el resultado es que los
ficheros creados con DAP 2.1 y posteriores pueden ser empleados
directamente.
Si usas DAP 1.x o 2.0 , deberás pedirme un adaptador especial.
Este adaptador está también disponible en mi WEB (ver la dirección al
principio de este documento).
DAP podrá leer automáticamente ficheros de versiones 2.10 y
superiores.
Sin embargo, y en lo referente a los PSI, ahora que DAP los
maneja de distinta forma, siento decirte que al abrir un fichero
antiguo se perderá la información de las respuestas de los PSI
(un mal menor, comparado con la potencia del nuevo sistema).
FICHEROS DEL PROGRAMA --------------------------------------
EN EL DIRECTORIO C:\DAP50\ -> programa principal:
ID50.EXE-> es el creador de aventuras, el entorno de
programación.
RT50.EXE-> ejecuta las aventuras y las depura. Sintetiza los
programas de versiones anteriores RT33,DEBUG33 y
NOSB.
CREATE.EXE-> prepara un juego en el directorio GAME para su
distribución comercial.
BAT2EXEC.COM > fichero auxiliar de CREATE, de dominio público.
SHELLVT.EXE -> el reproductor MOD (C) VangeliSTeam.
Dominio público - distribución libre
DTYPE.EXE -> auxiliar de RT40.EXE
SOUNDSET.EXE-> auxiliar de CREATE.EXE
FASTDRI.EXE -> auxiliar de CREATE.EXE
MANUALES.BAT-> para ver los manuales
TEST.EXE-> auxiliar de varios módulos.
DOS4GW.EXE-> auxiliar de varios módulos.
PMINFO.EXE-> informa del rendimiento del ordenador en modo
protegido.
EL EL DIRECTORIO C:\DAP50\DRIUTIL\ -> utilidades para el
trabajo con gráficos DRI
(DAP sólo usa gráficos
DRI)
G2DRIX.EXE -> convierte un fichero GIF 320x200x256 al formato
nativo de DAP, DRI. Permite realizar algunos
efectos durante la conversión (ejecutarlo sin
parámetros para ayuda), como son la conversión
a escalas de grises o inversión de la imagen.
Además, reduce el número de colores del dibujo
de modo que no interfiere con DAP.
Varios ejemplos de gráficos GIF y sus versiones DRI.
EN EL DIRECTORIO C:\DAP50\DOC\-> documentación del paquete
DAP50.DOC-> este archivo.
ID50.DOC -> guía de referencia del lenguaje de programación.
BUG.DOC-> hoja para reportar errores en la versión Beta.
DRI.DOC-> descripción del formato gráfico DRI.
LENDO.COM-> lector de los manuales.
ENGINE.DOC -> especificación 2 de un motor gráfico DAP.
EN EL DIRECTORIO C:\DAP50\DATA\ -> los ficheros TLT y fuentes
de aventuras.
BOSQUE.-> Fuentes del Bosque Maldito
POWER1.-> Fuentes de "Search of the Power I"
BOSQUE.TLT -> Pantalla de carga del Bosque Maldito
POWER1.TLT -> Pantalla de carga de S.O.P. I
EN EL DIRECTORIO C:\DAP50\EXEC\ -> los ficheros .DAP,
aventuras compiladas.
POWER1.DAP -> Search of The Power I
BOSQUE.DAP -> El Bosque Maldito
EN EL DIRECTORIO C:\DAP50\GAME\ -> aquí se generan los juegos
comerciales creados por
CREATE.EXE
EN EL DIRECTORIO C:\DAP50\MUSIC\-> almacena aquí los ficheros
MOD y S3M que uses
EL MOTOR GRAFICO ------------------------------------------
Para comunicarse con tu tarjeta gráfica, DAP utiliza lo que en
Definitive hemos llamado "Motor Gráfico", que no es más que un
programa residente que proporciona una serie de servicios están-
dar para acceder a la tarjeta gráfica (algo así como un driver).
A través del motor gráfico, DAP imprime carácteres, pixels,
realiza cambios de color, etc...
Nosotros te proporcionamos el motor gráfico estándar de Defini-
tive, DEFGK. Este motor está diseñado para el micro 486, con ins-
trucciones específicas de éste, y es extremadamente rápido. So-
porta una resolución de 320*200 puntos y 256 colores. Debes
cargarlo antes de DAP. Está totalmente escrito en código máqui-
na, y optimizado para someter a las unidades de ejecución para-
lelas de Pentium a un bombeo continuo de instrucciones.
El uso de un motor permite a DAP cambiar de tarjeta gráfica
cambiando sólo éste. P.ej, Definitive proporcionará a sus
usuarios en breve un motor gráfico para VESA, que soportará
800*600 puntos y 256 colores. También puedes diseñar tu propio
motor gráfico DAP para tu tarjeta. Las especificaciones que
deben cumplir los motores gráficos de DAP y los servicios
que deben prestar a DAP, así como las convenciones de llamada
están disponibles para quien las desee, de modo que puedes hacer
tu propio motor gráfico ... si crees que el nuestro es lento.
La especificación completa está en ENGINE.DOC. Además, Definitive
dispone de un "Kit de Desarrollo de Motores Gráficos", por si
no te es suficiente. Si necesitas ayuda creando un motor gráfico,
no dudes en escribirnos.
El uso de tu propio motor gráfico permite además modificar la
salida para, por ejemplo, variar las fuentes, o hacer otros efec-
tos tan sólo limitados por tu imaginación.
El orgón CALLENGINE de DAP permite realizar llamadas directas
al motor gráfico, con lo cual resulta sencillo incluir tus
propias funciones para, p.ej, cambiar de fuente de texto. Las
funciones 20-30 del motor gráfico están reservadas para
funciones propias del desarrollador, y no serán ocupadas por
futuras especificaciones del motor gráfico.
Parámeros.- si tienes problemas de niebla (p.ej, en tarjetas
TRIDENT antiguas), ejecuta DEFGK con el parámetro /SLOW.
La lista completa de parámetros está en el documento DEFGK.DOC
Ultima hora.- antes de lanzar la versión final de DAP hemos
incluido un nuevo motor gráfico, 386BIOSGK.COM. Este motor
está en el directorio UTIL. Se ha diseñado para una compa-
tibilidad máxima. Usa instrucciones de 386 en lugar de
opcodes para 486, y las operaciones con la tarjeta gráfica
se realizan a través de la BIOS de la misma en lugar de
directamente. Es bastante más lento pero debe servirle a
cualquiera que tenga algún problema con el DEFGK.COM estándar.
DEMOSTRACION -----------------------------------------------
Se incluye como ejemplo una versión abreviada de la primera
parte de la aventura "Search of The Power". Para compilarla:
Ejecuta CREATE.
Introduce como nombre de aventura POWER1, y como nombre de
fichero de música, AX4.MOD.
Copia los ficheros DEFLOGO.DRI, LOWDUNES.DRI y NAVAJO.DRI al
directorio GAME desde el directorio DRI.
Recuerda cargar un motor gráfico para DAP (normalmente será
DEFGK. Incluso podrías ponerlo en tu AUTOEXEC.BAT, debido a que la
cantidad de memoria que ocupa es insignificante).
El juego está en el directorio GAME. Ejecuta SETUP para confi-
gurar el sonido. Comienza el juego con POWER1.COM
¡Buena suerte!
UN POCO DE HISTORIA ----------------------------------------
(INTO THE GLORY RIDE)
DAP 1.0 --- Primera versión para Amstrad CPC; 90 localidades y
(1988) 19 objetos.
DAP 1.0FX - Versión de lujo del DAP 1.0 para CPC. Se corrigen
(1995) todos los bugs que achacaban a la antigua versión.
DAP 1.1 --- Conversión de la v 1.00 a DOS. Correción de varios
(1991) bugs.
DAP 1.2 --- Nueva orden LOBJ que potencia enormente las
(1992) posibilidades. 13 Bugs arreglados. Inclusión de
pantalla cabecera. Ordenes INFO OBJ e INFO LOC.
Mejora general de la presentación. Inclusión de
ficheros TLT de presentación.
DAP 2.0 --- Aumento enorme de número de objetos y localidades.
(1993) Inclusión de gráficos PCX. Resolución de los
siguientes bugs:
- La orden VAL no funcionaba adecuadamente si no se
invertían los parámetros: solucionado;
- Si existían varios procedimientos con el mismo verbo, los
que no fueran el primero definido no funcionaban
correctamente: solucionado.
Se puede considerar la primera versión seria del DAP.
DAP 2.1 ---- Inclusión de las órdenes VER PAL, LIST PAL y
(1993) CHANGE PAL para editar procedimientos ya creados.
Orden VER INFO. Arreglado el BUG que sólo
permitía usar 3 objetos con el programa. Cambio
de gráficos PCX a gráficos GIF. ¡¡Inclusión de
animaciones FLI!! Juraría que había incluido save
y load en todas las versiones, pero al parecer un
pequeño despiste al adaptar la versión 1.0 a PC
hizo que no aparecieranen las 1.1, 1.2 y 2.0.
Aquí están de nuevo. Alguien se quejó de que 40
mensajes eran pocos. Espero que con 300 os sea
suficiente.Tambien de que 51 instrucciones eran
pocas. Ahora hay 80.
A partir de esta versión el DAP es distribuido
por el Sindicato del Software además de por
shareware.
ADAP 3.0 --- Como vas a ver, esta versión supone la MAYOR
(1994) reestructuración del DAP desde su creación, de
hecho estás ante un parser TOTALMENTE NUEVO.
Se incluyen las ordenes PRINT OBJ y PRINT LOC. El
lenguaje de programación incluye ahora nuevas
ordenes GOTO, SCORE, SHELL, COLOR, PRINT y
CAMTXT. He reparado el bug cuando el jugador
alcanzaba el límite de objetos al intentar coger
otro no fuera advertido de esto, solamente no se
realizaba la acción. Ya funciona bien. Además hay
un reportorio general de mejoras internas.
¡¡Por fin!! Se puden compilar los juegos a un
archivo. Soporte de ficheros MOD SB, SB-Pro, SB-
16, Adlib y DAC. Los ficheros compilados no se
pueden ni ver ni abrir.
Se ha pasado al modo gráfico VGA, preparando el
camino para integrar gráficos con texto. Medidas
de seguridad. Sólo se puede cargar un juego
grabado desde la aventura que lo grabó. ¡Por
fin, soporte de PSIs! Se puede cambiar el color
de la pantalla. Se pueden redefinir las
respuestas básicas y usar librerías de mensajes
en formato .MSG. Se ha mejorado el INPUT de
descripciones y mensajes para mostrar el espacio
disponible y el resultado final, además de
admitir tildes y eñes. Se ha incluido el entorno
prometido de desarrollo bajo menús.
Nueva orden ADDVAL, útil para mantener un
indicador de energía o una puntuación secundaria.
Nuevas órdenes LOCG y OBJG (estas tres para el
lenguaje de programación).
Nuevas órdenes VAADVAL, COPYVAL, COPYTXT, PLAY y
DRAW. ¡Integración de gráficos y texto!
Se admite nuevo parámetro en las órdenes
referentes a localidad de objetos, 998, que
significa en posesión del jugador. Se incluye una
utilidad externa para compilar aventuras.
Arreglado un bug en LOBJ.
Inclusión del debugger. Más órdenes: PSI, LPSI
y... SINOM, que sirve para crear sinónimos.
Creación de aventuras ejecutables .COM. Se pueden
poner ficheros de cabecera de gran longitud, el
DAP va haciendo las pausas necesarias. ¡Se le
pueden quitar objetos al jugador usando la orden
LOBJ! Simplemente haciendo un LOBJ a un objeto
que tenga el jugador a una localidad que no sea
998, éste se esfumará de sus manos (je,je).
Se divide el DAP en módulos (una especie de
Orverlays) para reducir los requerimientos. Gran
parte del código original y varias rutinas nuevas
están reescritas en "C", con lo cual se aceleran
bastante.
Se incluye una opción en el nuevo entorno del ID
para probar las aventuras con el debugger sin
salir de él.
Dentro del debugger se pueden cambiar o ver
valores de flags, etc. Añadido el Control Center
para Windows.
Simplifica el uso de los diferentes módulos y la
integración bajo Windows. Requiere al menos
Windows 3.0 en modo estándar. Añadida grabación
de emergencia en el ID. El ID no se cuelga al
intentar abrir una aventura que no exista.
Incluida orden PAUSE.
ADAP 3.0fx - Incluido el comodín "*" para definir
(1994) procedimientos. ¡Esto es extremadamente
interesante!. Documentada la orden PAUSE.
ADAP 3.10 - Soporte de control horario incluido. Tres nuevas
(1994) órdenes EDAP: PRINTVAL,VALMAYOR y VALMENOR. Cuatro
nuevos flags (tres de ellos de sólo lectura)
incluidos para gestionar el soporte horario.
Incluida la utilidad SOUNDSET, que modifica la
configuración del sonido automáticamente. ADAP se
ejecuta sobre NDOS y 4DOS (la v 3.00 no lo hacía).
Arreglado un bug en las rutinas de grabación y
carga de situaciaciones.
Arreglado un bug en el debugger. Prueba de fuego
para el ADAP: SOMETHING se realizó mientras se
creaba el ADAP 3.10, para corregir los errores del
sistema. El resultado es un increible depurado y
una aventura de infarto.
ADAP 3.10fx - Arreglado WINDAP. Organización en
(1994) subdirectorios. Todo el código se ha reescrito
con instrucciones del juego 286, lo cual supone:
a) mejora del rendimiento, y
b) cese de compatibilidad con los XT :-(
ADAP 3.20 - Mejoras en la presentación.
(1995) Se puede salir al "shell" desde el ID.
El cambio más significativo es el nuevo formato
gráfico DRI (explicado más adelante). Se siguen
soportando ficheros FLI a través de AAPLAY.
Fundidos opcionales al mostrar gráficos.
El entorno clásico ha sido eliminado.
No hay distorsiones en la música con los gráficos.
Preparado para el concurso de IBM.
El proceso de crear ejecutables es más sencillo y
rápido.
Menús para la definición de procedimientos.
Soporte total del MODE X (320x240x256) de la VGA.
Los GIF al convertirse al formato nativo DRI ganan
bastante calidad al aumentar de resolución.
Mejor control de los directorios.
Bugs arreglados.
El ID admite una aventura como parámetro que será
abierta automáticamente.
Scroll integrado.
Sonido al teclado.
Desaparece el módulo de DAP para Windows.
DAP 3.30 -> Versión con instrucciones de 32 bit adaptada
(1995) al procesador 80386. Bastantes mejoras internas y nuevas
opciones.
DAP 4.00 -> Una versión totalemente nueva, con un buen número
(1996) de grandes cambios que aumentan mucho más la
potencia del parser.
¡Ya! Disponibles los "glolo", programas EDAP que
se ejecutan global o localmente.
DEBUG.EXE ya no es necesario. Para depurar una
aventura, ejecutar RT40 con el parámetro -d.
Se ha incorporado un generador de números alea-
torios, accesible mediante dos nuevos flags,105 y
106. Nuevos flags que informan de la versión del
programa y localidad del jugador (hasta 111).
Se ha restructurado la gestión de memoria, y ahora
pueden almacenarse 100 procedimientos de acción
y 40 procedimientos glolo, que deberían ser más
que suficientes en mi opinión.
Nuevo "look" del creador de salidas del ID.
Mejorado el sistema SOUNDSET. Ya no existe el fi-
chero NOSB.
Pueden definirse los colores del juego con gran
facilidad. Gestión de dinero, y flag propio para
cada objeto. La compra/venta de objetos es ges-
tionada automáticamente.
Nuevo sistema de menús.
Se pueden cargar las librerías directamente desde
ID. Ha desaparecido el viejo MSG??.EXE.
Líneas superiores.
Control de dinero integrado. Se puede poner precio
a los objetos para simular la compra de los mismos
en mercados, etc.
Añadido un flag de estado a los objetos. Esto
puede servir para indicar si están llenos,
vacios... sin recurrir a los flags estándar.
El flag 107 indica el dinero que tiene el jugador.
Multitud de nuevos orgones que permiten realizar
al programador casi cualquier cosa que se le
ocurra.
Añadida la pila, una nueva y poderosa estructura
de trabajo con datos numéricos.
Nuevos orgones para trabajo con la pila.
Debugger adaptado para manejar la pila y depurar
errores con facilidad.
Arreglado el bug de paleta en el conversor
GIF->DRI.
DAP 4.00 fx -> Mejoras sustancionales en el ID.
(1996) Arreglado el problema de los colores en las
presentaciones.
Mejora del rendimiento.
DAP 5.00 -> ¡Plena potencia gráfica!
(1997) Total control simultáneo de gráficos y texto.
Posibilidad de texto RGB.
Visualización de DRI en ventanas.
Ventana de texto.
Fundidos.
Ciclos de colores (nuevos orgones).
Comunicación por la tarjeta por motores gráficos.
Nuevas rutinas de Input.
Numerosos detalles incorporados por todas partes.
Al listar un procedimiento EDAP, cuando se hace
referencia a un mensaje también se muestra el
contenido del mensaje, aumentando la legibilidad
y comocidad.
Ahora los PSI en vez de llevar asociadas unas
respuestas ctes., responden a cada frase con
un procedimiento EDAP, haciéndolos infinitamente
más potente, estando el límite sólo en la imagina-
ción.
Posibilidad de llamar a rutinas propias en ensam-
blador desde el DAP.
Arreglado un problema con LPSI.
DAP 5.00fx-> Realmente he solucionado muchos problemas que
31/12/97 aparecieron en la primera versión de DAP 5.00,
pero ... ¡no me acuerdo de ninguno!
DAP 5.01 -> Pequeño "patch" para ID50. En las tarjetas
3/3/1998 gráficas S3 Virge (muy extendidas actualmente)
el modo gráfico que utiliza ID no funciona co-
rrectamente. Si experimentas algún problema,
ejecuta ID50 con la opción -fixvideo
DAP 5.02 -> Primera versión Freeware. No hay más cambios
significativos, excepto una documentación
corregida.
POSIBILIDADES ----------------------------------------------
98 Localidades, 50 Objetos, 10 Personajes, 301 mensajes de
usuario, 100 posibilidades de léxico (verbo+nombre), artículos
castellanos y preposiciones, 111 flags que pueden contener cualquier
valor de 32 bits, lo que lleva a más de 10 millones de situaciones de
juego. Movimientos norte, sur, este y oeste por defecto. Completo
soporte horario de horas,minutos y días, con temporizador controlable
por el usario. Cada personaje tiene 20 respuestas asociadas, a cada
una le corresponde un subprograma que indica la acción a realizar.
40 procedimientos globales/locales.
Cada localidad puede tener asociada un gráfico en formato DRI
Generador de números aleatorios. Gestión automática de dinero y
compras/ventas. Pila. 40 Procedimientos globables/locales.
Sonido en formatos MOD, STM, NST, 669, S3M, etc. de hasta 36
canales. Se soportan SB y SB Pro (Obra de VangelisTeam)
Completo control gráfico. Manejo de la paleta de la VGA.
Autodetección de niebla en pantalla y corrección.
*********************************************************************
PARTE II: LA PRIMERA AVENTURA
*********************************************************************
PRINCIPIOS BASICOS -----------------------------------------
La creación de una aventura debe resumirse en los siguientes
pasos:
1- Planificación
2- Texto
3- Objetos y personajes
4- Vocabulario
5- Procedimientos globales/locales (opcionalmente)
6- Gráficos (opcionalmente)
El módulo ID50.EXE contiene el entorno de programación
integrado. Considerando a "Adventure" como el juego tradicional de
texto, tendremos, según la descripción que Tim Gilberts daba:
Un mundo imaginario. Primero se llama a una rutina que lo
describe. El estado del mundo es el estado del juego. Después se pide
una orden al jugador y, si es posible, se ejecuta. Probablemente el
estado de juego cambie y haya que volver a describirlo. Esta rutina
se divide en dos partes:
- Localidades: Son lugares visitables e inmutables; descritos
con un texto y, opcionalmente, con un gráfico. El texto puede variar
a lo largo de la aventura para reflejar cambios en el estado de las
mismas.
- Objetos: es lo que puede manipular el jugador. Básicamente,
pueden cogerse y dejarse, además de transportarse. Pueden llevar aso-
ciado un precio, en este caso es necesario que el jugador posea la
suficiente cantidad de dinero como para adquirirlo (al cogerlo
se realizará "automáticamente" la compra). Una vez adquirido, el
objeto puede volver a cogerse sin pagar por él.
- Personajes (PSI): un tipo especial de objetos que
representan el papel de otros personajes en el mundo. Puede
conversarse e interactuar con ellos.
Debe existir otro sistema que lea el mandato del jugador y lo
convierta en cambios del estado de juego. Esta rutina es a la aue se
le llama "parser" propiamente dicho ("parse" significa "analizar
sintácticamente", en inglés) y capta una línea de texto.
A las localidades, objetos y PSIs se les asigna un número de
identificación (el número de la localidad donde está el jugador en
este momento es el "here"), y un texto de descripción.
LAS BANDERAS O FLAGS.- Son un grupo de indicadores (111 en el
DAP) que informan sobre el estado de juego. Por ejemplo, el programa
debe saber si el jugador ha tocado un botón en la estancia 9 para que
el ordenador de la estancia (estancia=localidad) 38 esté encendido.
Al pulsar el botón le asignaremos al flag 6 el valor 1, y si se pulsa
muy fuerte, el valor 2 (supongamos que es un botón oxidado).
Conociendo que al resetear todos los flags están a cero, al llegar a
la localidad 38 nuestra aventura comprobará el flag 6. Si vale 0, no
pasa nada, si vale 1, el ordenador hará ruidos y si vale 2, se
encenderá. Los FLAGS del DAP son similares a las variables de
lenguajes de programación más completos, aunque bastante menosv
ersátiles. Recuerda que sólo pueden almacenar números. El DAP tiene
un tipo de variables de texto, los mensajes. Serán descritos con
posterioridad.
El flag 100 indica si el jugador murió y el 99 si acabó con
éxito la aventura. Si modificas durante el juego el valor de alguno
de estos flags para hacerlo diferente de 0, ocurrirá el efecto
descrito.
Merece la pena concretar que al comienzo de la aventura todos
los flags han sido inicializados con un valor de 0, excepto algunos
especiales que contienen valores que informan a las rutinas (ver el
fichero de referencia, IDxx.DOC)
PLANIFICACION ----------------------------------------------
Veamos un ejemplo de planificación de una aventura sencilla,
"El bosque maldito". Puedes encontrar la aventura en el disco ya
creada. De momento trabajaremos con aventuras de texto puras; si
quieres usar gráficos, lee la sección dedicada a ellos.
Se trata de una aventura extremadamente simple que nos servirá
para comprender cómo funciona DAP. Puedes encontrar en el disco otro
ejemplo llamado POWER1 que es la primera parte de la trilogía
comercial "The Search of the Power", íntegramente diseñada bajo el
DAP. En él se ilustran multitud de problemas cotidianos, como
controlar si un contenedor está lleno o vacío (una cantimplora con
agua o sin agua), apertura de puertas con llaves, o laberintos... si
le echas un vistazo podrás sacar muchos puntos interesantes de él.
Lo primero que se plantea es el argumento de nuestro pequeño
juego. Para empezar, probemos éste:
"Has apostado 1000 calas a que entras y sales vivo del famoso
bosque maldito".
Realmente es un argumento patético, pero como primer intento
puede servir muy bien. Y ahora, un desarrollo:
Antes de nada es necesario abrir la puerta del bosque.
Entraremos en el fondo del bosque y hay cuatro salidas:
- Una nos lleva a un barranco donde nos caeremos y ¡plaf!
- Otra al viejo almacen abandonado, cuya puerta abriremos sólo
si tenemos las llaves que se encuentran mirando en el suelo de la
primera localidad.
- Otra al principio.
- Y finalmente, a un río. Cruzándolo está la salida, pero no
podemos hacerlo sin una barca. La barca la encontraremos empujando la
estantería que hay en el almacen.
Es preciso destacar lo deprimente de esta aventura, por varios
motivos, pero es buena para aprender a usar el programa.
Tendremos tres objetos: las llaves (que no son visibles en
principio), la barca (tampoco) y una flor al lado del río, para
despistar. El jugador podrá llevar uno a la vez.
Ademas pondremos un personaje PSI en la localidad 1 llamado
Jacobo (en honor a un profesor mío) que nos puede ayudar.
Seguidamente hacemos el mapa de las 6 localidades del juego,
teniendo en cuenta que el jugador siempre empieza en la primera:
ALMACEN:
Empujando la
estantería,
aparece la
barca 3
Ð
Abre puerta con -->+
llaves
¤
ENCRUCIJADA Ã---Â RIO 5
COMIENZO Ã----Â 2 Cruzar Ã--> SALIDA (6)
Mirando el Ð con barca
suelo apa-
recen las ¤
llaves 1 BARRANCO 4 N
Muerte O + E
S
Objetos:
1 - Llaves (empieza en 99 para ser invisible)
2 - Barca (empieza en 99)
3 - Flor (empieza en 5)
Personajes:
1 - Jaboco (empieza en 1)
(Jacobo es un famoso profesor de física de materiales de
la Facultad de Ciencias Físicas de la Universidad Complutense
de Madrid que me imparte clase en 1º de Ingeniería Superior
Informática, para satisfacer tu curiosidad. Tiene la pecu-
lairidad de que da las clases escribiendo al revés de la pi-
zarra cuando le apetece).
Ahora es necesario crear las descripciones de todos los
escenarios:
1 - Estás en la entrada del bosque maldito. Tu pellejo y tu
apuesta están en juego.
2 - Estás dentro del bosque, en una encrucijada. Aquí está la
entrada al almacen.
3 - Estás en el almacen. Se ve una estantería.
4 - Caes por el enorme precipicio y mueres.
5 - Este río corta el paso a la salida. Imposible cruzarlo sin
barca.
6 - Ésta es la salida.
Lo que hay que hacer si usamos gráficos es poner descripciones
claras y no muy pesadas, como éstas (o tal vez un poco más largas), y
si no los usamos, unas descripciones bellas y grandes serán las más
adecuadas. En este caso, debido a que este programa carecerá de
cualquier gráfico, estas descripciones no se prestan a la tarea, pero
bueno...
LOCALIDADES Y PRIMEROS PASOS -------------------------------
Arranque el creador de aventuras (ID50), y aparecerá el menú
principal.
Navega por los menús y experimenta las opciones. Observa que
hay varios submenús: localidades, objetos, PSI's, mensajes,
procedimientos y ficheros.
También tienes opción de probar la aventura, para seguir el
desarrollo de la misma.
Vete al menú de localidades y elige "Definir localidades".
Esta orden hará que el ordenador te pregunte el número de localidades
de tu aventura. Introduce 6. El número mínimo es 1 y el máximo, 90.
Empezaremos a introducir las descripciones. Al comenzar, el
Here es 1 (también usamos Here para referirnos a la localidad que
estamos tratando). Para introducir la descripción de la localidad
here, en nuestro caso la primera, elige la orden "Descripción".
Puedes variar el HERE con '+' y '-'. Observa que en la parte
baja de la pantalla aparecen las descripciones del HERE para
ahorrarte esfuerzo. Puedes cambiar directamente a un HERE concreto
sin moverte por los demás con la opción "Cambiar Here".
Ahora hemos de informar al compilador de las salidas de cada
localidad. El sistema es complicado, aunque cuando lo domines lo
verás útil, lógico y rápido. Las salidas son definidas por un código
numérico, y cada localidad dispone de un par de códigos: el normal y
el alternativo. Primero explicaremos el diseño del código y después
la diferencia entre el normal y el alternativo.
Al pulsar la opción de "salidas", un dibujo esquemático
representa una habitación. Empezamos introduciendo la salida al
norte. Aquí debemos poner un número que indique la localidad a la que
conduce esta dirección. Si pusiésemos 0 (o simplemente lo dejamos en
blanco), significaría que ahí no hay salida.
Después de introducir las salidas, se nos preguntará por un
juego de salidas alternativo.
El código alternativo es opcional (el código principal es
obligatorio para todas las localidades) y sólo se usa en estancias
cuyas salidas pueden variar, es decir, por ejemplo, abrir una puerta
que lleve al Este.
Supongamos una habitación que conduce, por el sur, a la
localidad 20. Simplemente informamos a DAP de eso. Ahora, hay una
puerta que si la abrimos encontramos una vía al norte, a la estancia
15. El código de salidas debería reflejar esta salida. Es ese código,
con la puerta abierta, el que introducimos como alternativo.
La rutina programada para "abrir puerta" se encargará de hacer
funcionar el código alternativo o el normal, según abramos o no la
puerta.
En el caso de "El Bosque Maldito", la estancia 2 debe tener un
código alternativo que refleja la vía hacia la localidad 3 al norte.
Cuando abramos la puerta, se intercambiarán los códigos. Además, una
salida hacia el norte de 99 significa que el jugador morirá. Una
salida al sur hacia 99 significa que el jugador ganará.
Así pues, la localidad 4 tendrá una salida al norte de 99.
LOS OBJETOS ------------------------------------------------
Los objetos son la pieza más importante de una aventura de
texto. Recordemos los objetos previstos para "El Bosque Maldito":
1 - LLAVES: Sin ellas no podemos abrir la puerta. Como
inicialmente no se ven, y todos los objetos deben empezar en alguna
localidad, tenemos un problema. La solución: situarlos en una
imaginaria localidad 999 a la que el jugador nunca llegará, porque no
existe, y moverlo a la localidad 1 cuando se examine el suelo.
Existen dos localidades especiales para los objetos en DAP:
999 - objeto no visible en ningún sitio, por si ha sido
destruido o todavía no ha aparecido (el caso de las llaves). Consi-
déralo el "limbo" de los objetos.
998 - en poder del jugador , cuando el jugador coge un objeto,
se mueve a la localidad 998. Así , si la localidad de inicio de un
objeto es 998, el jugador lo tendrá en su poder al comenzar. Si mo-
vemos con un procedimiento de orgones (más adelante sabrás lo que es)
a la localidad 998, el jugador adquirirá el objeto.
2 - BARCA: Tres cuartos de lo mismo, pero la moveremos a la 2.
Sirve para cruzar el río.
3 - FLOR: Está en la localidad 3 y nos sirve para despistar al
jugador.
Básicamente, el jugador puede COGER, DEJAR objetos y hacer un
INVENTARIO de los que lleva. Acciones posteriores, como CRUZAR RIO
(con la barca) se definirán exclusivamente para un objeto
determinado.
El jugador debe tener un máximo de objetos que llevar. Si
iguala este máximo, no podrá coger más objetos a no ser que deje uno.
Éste es el objetivo de poner objetos inútiles: no sólo le
desorientarán, sino que contribuirán a llenar su límite de carga.
El menú de objetos controla todo lo referente a éstos.
Para definir los objetos,use la opción correspondiente. Se le
preguntará primero por el número de objetos de la aventura y después
por cuántos objetos podrá llevar el jugador simultaneamente. En
nuestro caso, son 3 objetos, y pongamos un límite de 1, tres objetos
son muy pocos y un límite mayor quitaría emoción, y con la poca que
tenemos, no es plan ...
Para controlar el número de objeto que editamos tenemos algo
similar al Here, el objeto actual (OAC para abreviar). Puedes variar
el OAC con '+' y '-', o con la opción a tal efecto, de forma similar
a las localidades.
Para introducir los datos de un objeto usa la opción "Datos
objeto". Se te preguntará por la descripción y localidad inicial de
un objeto. Por ejemplo, en el caso de la flor:
Descripción: una flor <enter>
Localidad Inicial: 3 <enter>
Hay dos localidades de inicio especiales, como ya he dicho:
999 -> no visible en ninguna estancia (aparecerá, por ejemplo,
al examinar el suelo).
998 -> está en posesión del jugador (en nuestro caso, hará que
el jugador tenga el objeto al comienzo. Una vez jugando, mover un
objeto a 998 hará que el jugador lo adquiera).
También se te preguntará por el precio del objeto. Si ponemos
un precio diferente de 0, el jugador necesitará tener suficiente
dinero (el dinero del jugador está en el flag 107) para poder
comprarlo. Una vez comprado, si el jugador deja el objeto y lo vuelve
a coger, no es necesario volver a pagar por él. El dinero con el que
el jugador empieza puede especificarse en la opción "Parámetros
generales" del menú principal, y puede modificarse durante el juego.
Como en las localidades, hay información del OAC en la
pantalla, y está disponible una opción para obtener información más
detallada.
LOS PERSONAJES ---------------------------------------------
Los controlamos desde el menú "PSIs"
on la opción "DEFINIR PSIs" definimos el número de personajes
(1 en nuestro caso).
Con "DATOS PSI" podemos definir la descripción de cada
personaje y la localidad donde está , aunque aquí no hay un here como
en los objetos y localidades, sino que se nos preguntará el PSI a
modificar cuando elijamos esta opción.
El jugador hablará con los PSIs a través de la orden DECIR o
HABLAR (predefinida).
Con la opción "Respuestas PSI" puedes editar la tabla de
respuestas de un PSI. Cada PSI puede tener 20 respuestas diferentes.
Esta tabla configura la "inteligencia" de nuestro PSI.
Cada respuesta se provoca si se encuentra una de las 20
palabras asociadas a las respuestas. Por ejemplo, si hacemos:
1- hola
El PSI reaccionará de la forma 1 a órdenes tales como:
decir hola
decir hola, ¿cómo te llamas?
decir buenos días y hola
Si la pregunta no tiene respuesta en la tabla se ejecuta en
todo caso la respuesta 20.
Cada respuesta lleva asociado un procedimiento EDAP de orgones,
que indica lo que hará el jugador ante la palabra: desde una simple
contestación a abrirte la cabeza con un hacha, pasando por darte un
objeto. Más adelante hablaremos de los procedimientos EDAP.
Por ejemplo, nuestra tabla puede ser:
1- hola: "PRINT 10" (mensaje 10-hola)
20- cosa: "PRINT 11" (mensaje 20-qué dices)
(el resto de respuestas no han sido definidas)
Ejemplos de respuestas:
Insistamos en que no es necesario programar la orden
"decir/hablar", ya que ha sido predefinida (al igual que los
movimientos, save y load).
GRABACION DE AVENTURAS -------------------------------------
Ya hemos definido nuestra aventura, y sólo falta la parte más
importante: el lenguaje. Antes de meternos con lo más complicado del
diseño, veremos cómo grabar y cargar aventuras. El menú "DISCO"
controla lo referente a estos aspectos.
"Grabar aventura" graba la aventura para su posterior edición
o continuación. Las aventuras grabadas así no pueden ser ejecutadas.
La opción "Cargar aventura" lee aventuras grabadas en formato datos.
Las aventuras en formato datos se graban en el directorio
\DATA y no tienen extensión (para mantener la compatibilidad con las
versiones anteriores a la 3.00 del DAP, en las que sólo existía este
formato).
La opción "Compilar" compila la aventura y genera un fichero
con extensión ".DAP" en el directorio \EXEC. Estos ficheros no pueden
volver a abrirse. Pueden ser ejecutados por el módulo "Run-Time", y
son los que se usan para producir un ejecutable ".COM" del juego.
Para ejecutar las aventuras se usa el programa RT50. Su
sintaxis es:
RT50 -x nombre (sin extensión)
Donde -x puede ser:
-g -> ejecuta la aventura en modo comercial (no debe ser
usado)
-d -> ejecuta la aventura en modo debug. Ver más adelante.
Para ejecutar un módulo ".DAP", simplemente teclea "RT50
nombre". El RT50 buscará el módulo en el directorio \EXEC y lo
ejecutará. Los gráficos serán buscados en el directorio "DRI"
Dentro de RT50, además de los comandos de la aventura, pueden
darse algunas órdenes especiales:
AYUDA -> ayuda del RT50
STATUS -> estado del juego y del programa
END -> sale al DOS inmediatamente.
SAVE -> guarda el juego
LOAD -> recupera un juego guardado
Para generar un ejecutable de la aventura, use el programa
"CREATE". Se te pedirán el nombre del módulo y del fichero de música.
Si vas a ponerla, debe hallarse en el directorio \MUSIC; cuando acabe
todo el proceso tendrás a tu disposición tu aventura en el directorio
\GAME. Todos los ficheros que haya son necesarios. Ahora copia este
directorio a un disco y tendrás tu aventura distribuible.
Existirán dos ejecutables: uno, la aventura ("nombre.com"), y
otro, el programa SETUP.EXE, que permite configurar el sonido al
usuario final.
Lo único que no procesa (por ahora) CREATE son los archivos
gráficos; los archivos gráficos debes moverlos al directorio GAME.
También si ejecutas programas externos desde tu aventura debes
procurar añadirlos al directorio \GAME.
La música que admite el DAP puede estar en los siguientes
formatos digitales: MOD,S3M,STM y NST. El "player" que toca la música
no ha sido creado por Definitive Software, sino por Iguana.
El fichero de compilación externa COMxx.EXE presente en
anteriores ediciones del DAP ha sido eliminado.
Debes recordar a tus usuarios que deben cargar un motor grá-
fico antes de ejecutar el juego. El motor gráfico que incluye DAP,
DEFGK, es de dominio público y puedes incluirlo líbremente.
PARSER -----------------------------------------------------
El parser esla parte deljuego encargada de tomarun INPUT del
jugador y convertirlo encambios del estado del juego, es decir, de
analizar una orden, comprobarla con una tabla de órdenes en memoria,
y si está, ejecutar la rutina asociada a la órden. Si no, devolverá
al jugador el mensaje "No entiendo".
El de el DAP se compone de la forma VERBO+ARTICULO+NOMBRE,
donde artículo y nombre son opcionales. Al crear una orden para la
tabla no es necesario dar el artículo. Si la orden en la tabla es
MIRAR MESA, concordarán tanto un MIRAR MESA del jugador como un MIRAR
LA MESA o MIRAR UNA MESA. O sea, que antes de ser comprobada la orden
se eliminan artículos.
Mientras que el nombre debe ser exactamente igual en el input
que en el de la tabla, el verbo de la tabla sólo debe de estar
contenido en el del input, y esto posibilita un lenguaje mucho más
natural. Me explicaré: si la orden en memoria es MIR MESA, como se
comprueba si el verbo está contenido en el input, valdrían como
Inputs tanto MIRAR LA MESA como MIRA LA MESA o MIRE MESA o MIREMOS
UNA MESA, etc. Algunas órdenes como INVENTARIO no necesitan nombre,
mientras que al definir COGER y DEJAR, el ordenador se encargará del
nombre él solito.
Pero, ¿por qué la complicación de crear nuestro lenguaje,
cuando podía estar definido de serie? Bien. Otros parsers, como el
excelente GACS, de dominio público, optan por esta opción, pero el
precio de no tener un lenguaje custom y prediseñado se paga con una
drástica reducción de la complejidad de los juegos. Tener un lenguaje
custom no sólo significa crear el lenguaje apropiado para cada
aventura, y poder hacer aventuras en todos los idiomas sin necesidad
de nuevas versiones del software, sino programar lo que hará cada
orden mediante un pequeño pero útil lenguaje de programación, con el
que podremos variar todo lo que queramos la aventura, así como
comprobar si el jugador posee objetos, está en una localidad
determinada, etc. Por ejemplo, la orden CRUZ RIO (de cruzar rio)
deberá comprobar si tenemos la barca, si estamos en la localidad 5, y
una vez hecho esto mover al jugador a la localidad 6, imprimiendo un
mensaje que informe de nuestra exitosa navegación. Cada una de estas
acciones es una orden de la rutina asociada a la orden CRUZ RIO.
Por supuesto, tampoco queremos complicar mucho la vida y he
definido las seis famosas órdenes que nunca varían y siempre están
para que te ahorres programarlas: norte (N), sur(S), este (E), oeste
(O), grabar y cargar (para grabar situaciones de juego) y decir (para
hablar con los PSI).
DEFINICION DE PROCEDIMIENTOS -------------------------------
Existe un modo especial del ID para crear el vocabulario que
entenderá el programa. Lo primero que debemos hacer es definir la
palabra y luego crear la rutina que se ejecutará cuando el jugador dé
esa orden. Además, si la orden consta de una sola acción simple y sin
comprobaciones, como dar un inventario, lista de salidas o dejar un
objeto, no hará falta una rutina. Veremos esto más adelante.
Puedes pasar al menú de procedimientos con la opción
"Procedimientos". Hay dos tipos de procedimientos, las acciones del
jugador, que son de los que hemos estado tratando, y los
globales/locales. Elige "Acciones del jugador". Para definir una
nueva acción, usa la opción "Definir palabra". Puedes definir hasta
100 acciones.
Introduce ahora el comando. Por ejemplo, para ABRIR PUERTA,
ABR PUERTA, o para COGER, COG, tal y como explicamos antes.
Existe un nombre especial, y es "*". Si usas, por ejemplo, EX
*, la orden se ejecutará con EX PUERTA, EX RIO, o EX LO_QUE_SEA.
Actúa, pues, como comodín. Esto es útil para repuestas por defecto.
Por ejemplo, supongamos que sólo hemos hecho una descripción para el
chupete (msg.1), y en el msg.2 tenemos una descripción comodín, "No
ves nada especial":
EX CHUPETE -> PRINT 1
RET
EX * -> PRINT 2
RET
(el pseudolenguaje de orgones se explica ahora)
El DAP comprueba en orden secuencial las acciones y cuando
encuentra una correspondencia no sigue buscando, así que las órdenes
de nombre "*" por defecto deben estar después que las de su mismo
verbo.
Ahora introduce la rutina que ejecutará esta acción, con un
máximo de 15 órdenes. La sintaxis del DAP es sencilla, introduce la
orden uno, y cuando acabes, otra orden.
Ejemplo: (tal vez necesites consultar la Guía de referencia en
el fichero IDxx.DOC). Cada instrucción del lenguaje de programación,
llamado EDAP, se denomina orgón.
Orden: usa teletransportador (valdría "usar teletransporta-
dor", "usa el teletransportador", etc.). Un transportador en la
localidad 3 que funciona con una llave (7).
?LOC 3 5
?OBJ 7 2
?CAMSIT 10 18
?RET
(Pulsando <enter> al final de cada línea)
Ahora, si listamos la orden desde el menú:
LOC 3 M5
OBJ 7 M2
CAMSIT 10 M18
RET
Observa las M que han aparecido antes de algunos parámetros.
Estas M son "imaginarias" y sirven para indicarnos que estos
parámetros se refieren a un número de mensaje. Un @ en lugar de la M
indica que nos referimos a un número de flag. Estos valores no DEBEN
introducirse al crear un programa, sólo están para AYUDAR a
depurarlos.
Consulta todos los orgones disponibles en el fichero IDxx.DOC.
Allí se hace una descripción exhaustiva de cada una junto con
ejemplos ilustrativos. De momento, te daré una pequeña descripción de
este pequeño programa:
LOC 3 5 (se introduce por separado)
Comprueba si el jugador está en la localidad 5, y si no está,
imprime el mensaje 5 y acaba el programa.
OBJ 7 2
Hace algo similar, pero comprueba si el jugador tiene el
objeto 7.
CAMSIT 10 18
Cambia el HERE a 10 y escribe el mensaje 18.
RET
Acaba
Imaginemos los mensajes:
18 -> Te teletransportas a otra habitación.
2 -> No tienes la llave
5 -> No hay teletransportadores aquí.
Una vez creada la rutina para una orden, puede verse o
modificarse desde el menú.
Cuando listes, los parámetros que se refieran a un mensaje
irán precidos por M y los que se refieran a una variable por @, para
facilitar su distinción.
Por ejemplo, para definir la palabra "COG" (coger, coge...):
>cog <enter>
1:coger <enter>
2:ret
Otro orgón interesante es PRINT, su parámetro es un número de
mensaje, que será imprimido en pantalla. Cuando se produce un cambio
en el estado del juego, es necesario dar al jugador un mensaje
informándote de dicho cambio. Los mensajes en el DAP son "custom", es
decir, tú los defines. Tienes un máximo de 300 mensajes para definir.
Muchos orgones del microlenguaje necesitan un número de mensaje para
funcionar. Esta orden imprimirá el mensaje asociado al número que des
al compilador. Es muy útil para comandos del tipo"examinar". Por
ejemplo, si el mensaje 29 contiene "es grueso y alto":
Además los mensajes se pueden usar como parámetro de texto
para algunos comandos internos, como SHELL o PLAY.
Los mensajes se pueden modificar y definir en el menú
destinado a ello. Al principio del juego, todos los mensajes
contienen la cadena nula ("").
Nota importante: El mensaje 39 aparece si el jugador muere y
el 40 si acaba su aventura con éxito.
Una serie importante de mensajes son los del 286 al 300. Estos
mensajes son las respuestas básicas del parser a opciones tales como
coger un objeto. Debes crear estos mensajes según tus gustos. La
opción "cargar librería" puede ahorrarte mucho trabajo: su función es
cargar una librería predefinida de mensajes estándar en memoria.
Estos ficheros están en un formato especial. Se incluye una
cabecera y los mensajes, todo en formato ASCII. Puedes crear tus
propios .MSG con tus mensajes habituales, o en tu lengua materna, por
ejemplo, en vasco, sólo sigue el modelo de algunos de los .MSG
incluidos de muestra, y, eso sí, no modifiques la cabecera.
También es muy usado el orgón CAMSIT. Sus parámetros son un
nuevo Here y un número de mensaje a imprimir.
Por ejemplo, supongamos (recordando a "Adventure") que
diciendo la palabra mágica XYZZY seremos teletransportados a un
recolector de tesoros (localidad 10)
Para coger objetos, se usa el orgón COGER. El DAP hará que el
jugador recoja el objeto que haya especificado en el nombre del
mandato. El propio DAP hará las comprobaciones pertinentes e
informará al jugador de si ya tiene el objeto, si no está, etc.
P.ej., creemos la orden TOMAR:
"toma *"
COGER <enter>
RET <enter>
Así, si el jugador da la orden TOMA LA LINTERNA, y el objeto
Linterna está en esa localidad, y eljugador todavía puede coger
objetos, el objeto será cogido. El orgón "dejar" puede resumirse en
lo mismo pero al contrario.
La orden "salidas" informa al jugadorde lassalidas de una
localidad. Las órdenes del jugador que suelen asocairse a este
mandato son SALIDAS y X. Un ejemplo de juego en "El Bosque Maldito",
teniendo esta orden ya definida:
Estás en la entrada del bosque maldito. El suelo es muy
curioso.
>salidas
Las salidas posibles son: ESTE.
"Inventario" informa al jugador de los objetos que posee.
"Redescribir" resdescribe la localidad (util para acciones del
tipo "mira *")
Hay facilidades para editar, ver y trabajar con comandos ya
creados, para más información consulta el IDxx.DOC.
Un tipo especial de programa son los GLOLOS. Estos programas
no se ejecutan ante un mandanto del jugador, sino que se ejecutan
siempre que el jugador esté en una localidad, continuamente. También
pueden asociarse a la localidad 0, con lo que se ejecutan siempre,
durante el juego. El menú "Globales/localeS" permite definirlos.
Así también como ya se ha dicho, cada respuesta de un PSI lleva
también asociado un procedimiento EDAP.
Existen muchos más orgones (unos 60), algunas para tareas extre-
madamente retorcidas; sin embargo, con los orgones que aquí he descrito
será suficiente en el 90% de los casos. La guía completa de referencia
de orgones está en IDxx.DOC.
FICHEROS DE TITULO -----------------------------------------
Cada aventura deberá tener un fichero con su mismo nombre pero
con extensión .TLT. Me explico, si el fichero de la aventura es
BOSQUE (los archivos de aventura no tienen extensión), deberás crear
un fichero BOSQUE.TLT.
Este fichero contendrá una pantalla de presentación para el
juego en ASCII, que puede contener el nombre del autor o las
instrucciones de uso. Se mostrará al jugador mientras se lee la
aventura.
Estos ficheros deben almacenarse en \DATA.
Creando laberintos -----------------------------------------
Lo que parecen milesde localidades son enrealidad cinco o seis
con un pequeño truco en sus salidas. Veamos un ejemplo: si la
localidad 11 fuera un pequeño laberinto (ella sola, ¡sí!), sus
salidas serían:
Norte - 11
Sur - 11
Oeste -11
Este - 12
y todas las salidas menos el este llevarían a la misma,
confundiendo al jugador (ya que si la descripción es: "Estás en un
laberinto", no distinguirá si son diferentes localidades, a no ser
que use un pequeño truco que sólo los grandes expertos en juegos de
texto conocemos). Lo que se hace es crear 5 ó seis localidades con
las salidas así entrelazadas.
ENTRAR Y SALIR, SUBIR Y BAJAR ------------------------------
Supongamos que para salir de una nave hay que teclear SALIR.
Se usa una rutina en micro lenguaje que compruebe si se está en la
salida y luego se usa la orden CAMSIT. Subir, bajar y entrar se hacen
de manera parecida.
Por último, recuerda poner objetos inútiles para confundir al
jugador, y si haces un programa, te ruego que me la mandes por correo
para verla y disfrutarla.
*********************************************************************
PARTE III: TÉCNICAS AVANZADAS
*********************************************************************
USO DE GRAFICOS EN LAS AVENTURAS ---------------------------
Puedes incluir desde tus creaciones hasta digitalizaciones,
con una resolución máxima de 320x200x256. Sólo tienes que tener un
archivo DRI con el dibujo de la localidad (los gráficos se muestran
antes de la descripción). Ahora, convierte la localidad que quieras
dotar de gráfico en here y use la opción "gráfico" del menú
localidad.
El ID te pedirá el nombre del fichero DRI (sin extensión). Si
quieres cambiar el gráfico a una localidad usa esta orden de nuevo.
Si quieres quitar el gráfico teclea "$" como nombre.
Puedes añadir "-f " al principio del nombre del gráfico para
mostrarlo con un elegante fundido.
Y... ¿qué demonios es el formato DRI?
Como ya habrás notado, DAP ha pasado por varios formatos
gráficos durante su historia. Primero, con la versión 2.10, fueron
los ficheros PCX. Pero el control sobre éstos era muy rudimentario.
El Advanced DAP representó una gran mejora con el soporte del forma
to GIF, pero aun así no era suficiente. El DAP no tenía control
absoluto sobre el fichero y los jugadores de las aventuras podían
observar los gráficos con cualquier visor.
Por eso hemos creado nuestro propio formato, el DRI. El DRI es
un nuevo formato gráfico. Dispone de una cabezera estándar con
información para el DAP y soporta trabajos en el fascinante modo X
(320x240x256 colores) - que yo sepa, es el primer formato que puede
almacenar imágenes en modo X.
Te encontrarás el problema de no tener ninguna aplicación que
soporte DRI. Por eso hemos incluido un conversor de GIF estándar de
320x200x256 a DRI.
La pantalla de la aventura, una vez estés jugando, se divide
en dos partes; una ventana de texto donde transcurre la aventura, y
una ventana de gráficos donde se muestran las imágenes DRI que hayas
definido.
El tamaño de la ventana de texto puede elegirse, junto a los
valores rgb de los colores de DAP y el dinero inicial del jugador en
la opción "Valores Generales" del menú principal de ID. En ningún ca-
so el texto se mezclará con los gráficos. "Valores Generales" también
te permite variar los valores RGB de los colores del texto, fondo y
parser.
Cuando se entre en localidades sin gráfico asignado, DAP auto-
máticamente se reajustará para utilizar toda la pantalla para texto.
DAP utiliza una paleta de 256 colores. Cada uno de estos colo-
res tendrá unos valores rgb de 0 a 63. Los colores 0 a 2 están reser-
vados para el uso de DAP, y se utilizan así:
0 - color del fondo
1 - color del texto
2 - color de la entrada del jugador
(DAP hará uso de más colores automáticamente si lo considera oportuno)
Cada color se compone de un parámetro rgb referente al nivel de
rojo,verde y azul.
Si en la aventura quieres cambiar uno de estos colores pue-
des hacerlo con PUTPAL.
Por eso, tus gráficos no deben usar estos colores para no
interferir con DAP. Si aun así intentas convertir a DRI un GIF que
use los colores 0,1 ó 2, el conversor automáticamente los sustituirá
por los colores más parecidos posibles (esto generalmente funciona
bien, pero no siempre ... si no hay ningún color parecido). En caso
de que G2DRIX haga un destrozo a tu pobre gráfico, te queda un úl-
timo recurso (a parte de reducir colores con una utilidad externa):
convertirlo a escala de grises con "-g". En este caso, DAP siempre
encontrará un tono de gris similar al sustituido, de modo que el
cambio prácticamente pasará desapercibido. Generalmente, G2DRIX se
muestra más respetuoso con imágenes en tonos de gris que en color.
(nuestro algoritmo de búsqueda de colores cercanos aún no parece muy
perfeccionado, pero lo mejoraremos).
En cualquier caso, si estás realizando el gráfico, procu-
ra no utilizar ningún color de la paleta por debajo del 3 y no ten-
drás ningún problema.
Unas palabras sobre los ciclos;
Otra novedad en la versión 5 de DAP son los ciclos de colores, que
permiten crear efectos bastante espectaculares. Por ejemplo, imagina
que estás en un submarino en alerta rojo. Podemos crear un ciclo de
colores cuyo efecto sea ir iluminando el fondo hasta ponerlo rojo, y
luego ir apagándolo otra vez, así sucesivamente, simulando la alerta
roja.
Para crear los ciclos se usa el orgón NUEVOCICLO x y z
donde
x - número del color al que se aplicará el ciclo
y - valor rgb al que afectará el ciclo (únicamente a uno)
0 - rojo
1 - verde
2 - azul
(otros valores se ignoran)
z - valor máximo (0<z<=63) que puede alcanzar el color.
Para detener un ciclo, se usa FINCICLO x, donde x es el color.
Sólo puede haber un ciclo por color; esto da un máximo de 256 ciclos
simultáneos, uno para cada color de la paleta.
En nuestro ejemplo, la orden más adecuada sería NUEVOCICLO 0 0 63.
EL DEPURADOR -----------------------------------------------
Está pensado para poder depurar las aventuras y encontrar
los fallos, así como ejecutarlas durante su creación para ir viendo
las repercusiones de nuestros actos en su estructura.
El uso es:
RT50 -d nombre.
Al contrario que en versiones anteriores del parser, la
aventura debe estar compilada. La aventura se coge de \EXEC y los
gráficos de \DRI. El debugger nos proporciona información acerca de
todo lo que sucede dentro de nuestra aventura. Puedes salir del
debugger con "END".
Además, el depurador tiene algunas funciones especiales:
VFLAG x : muestra el valor de la bandera número x.
CFLAG x : pregunta un nuevo valor para la bandera número x.
GO x : va a la localidad x.
VERGLOLOC: muestra los glolos
VER x : muestra los valores rgb del color x
El depurador tambien puede invocarse desde el ID para probar
la aventura que se está editando. Ésta es la forma en la que
normalmente trabajarás.
El depurador también tiene algunas órdenes para trabajar
fácilmente con la pila del sistema. Se explican en el apartado "La
pila". También puede manejar los ciclos (utilizar la propia ayuda del
depurador para más información a este respecto).
CONTROL HORARIO --------------------------------------------
El DAP te permite mantener un completo control horario para
ofrecer un soporte más realista a tus aventuras.
La hora es actualizada automáticamente. Los siguientes datos
horarios se actualizan automáticamente en estos flags:
Flag Descripción
------- -----------------------------------------------
101 Hora del día (00-23)
102 Minuto de la hora (00-59)
103 Temporizador (ver más adelante)
104 Número de día (00-...)
Lógicamente, tu programa puede modificar estas variables, por
ejemplo así
ORDEN: DORMIR *
Mensaje 7: "Duermes profundamente"
ADDVAL 101,5
PRINT 7
RET
Así al DORMIR, el jugador avanzaría cinco horas.
Uso del temporizador
--------------------
El temporizador indica la velocidad del paso del tiempo. Por
defecto es 1 , que es lo más lento. Cuanto más grande sea, más
deprisa pasará el tiempo (un valor de 60 provocará que por cada
acción del jugador pasen 60 minutos, un valor de 15 que pasen 15
minutos, etc.)
RECURSOS Y GESTION DE MEMORIA ------------------------------
El ID indica, en el menú principal, el porcentaje de recursos
del sistema empleados.
Los recursos del sistema empleados se evaluan en base a los
que están empleados actualmente y al máximo permitido por el sistema.
El conjunto de recursos de una aventura comprende los procedimientos,
localidades, objetos y PSI's. El resto de información es ajeno a los
recursos. Los mensajes siempre están definidos y ocupando memoria, así
que da igual si los has introducido o no. Un mensaje en blanco ocupa
igual que uno lleno (256 bytes).
DAP permite que los recursos ocupen un máximo de 64kb en con-
junto.Esto teniendo en cuenta que los orgones se codifican a una pa-
palabra.
NUMEROS ALEATORIOS -----------------------------------------
El DAP dispone de un generador de números aleatorios
disponible al programador a través de los flags 106 y 105.
El flag 105 contiene un número aleatorio que varia cada paso
del programa. Este número es elegido del rango 0 al valor
especificado en el flag 106. La utilidad de este generador, p.ej,
para crear eventos aleatorios, es evidente.
Existen otros flags de propósito especial. En el fichero
ID50.DOC hay una tabla con la utilidad de todos los flags especiales.
LA PILA ----------------------------------------------------
La pila (stack, en inglés) es una nueva y poderosa estructura
de datos que ha sido incluida por primera vez en la versión 4 del
DAP. Esta pila funciona de manera muy similar a la de la CPU del
ordenador y a la de otros parsers como NMP.
Sus principales utilidades serán el almacenamiento de datos
durante procesos EDAP y, especialmente, la comunicación interproceso,
que se puede realizar de forma mucho más eficaz mediante la pila que
mediante flags.
CARACTERISTICAS DE LA PILA.- La pila no es más que un buffer
de tipo FILO (First In Last Out, el primero en entrar, último en
salir).
Si introducimos (empujamos, push) un valor en la pila, la
siguiente orden que pida un valor de ésta (sacar, pop) recuperará
siempre el *último* valor introducido. Una vez hecho el pop, el dato
se desecha.
Los orgones para el control de la pila son:
PUSH a : introduce el valor 'a' en la pila.
PUSHV a : introduce el valor del flag 'a'.
POPV a : saca un valor de la pila hasta el flag 'a'.
FLUSH : vacía la pila.
GETSTACKST a: introduce en el flag 'a' el número de elementos
disponibles en la pila.
STACKMODE a : selecciona el modo de funcionamiento de la pila.
0- modo limitado.
1- modo rotatorio.
La capacidad máxima de la pila es de 50 elementos en esta
versión, lo cual debería ser más que suficiente. El DAP chequea
automáticamente todas las operaciones realizadas en la pila, en caso
de producirse un desbordamiento, el RT50 informará al jugador con el
mensaje:
! Error fatal: Pila reventada.
También se producirá un error fatal si se intentan leer datos
con la pila vacía. En cualquier caso, la aventura seguirá
ejecutándose. Este es el modo de funcionamiento "limitado", el que se
elige por defecto. Con el orgón STACKMODE puede cambiarse al modo 1 ,
"rotatorio", en el que la pila se comporta de una forma distinta. Si
estando la pila saturada, se introduce un valor, éste se mete en el
elemento 1 de la pila. Así, si la pila está vacia (elemento 0) y se
hace un POPV, se tomará el último valor de la pila. De esta forma, la
pila va rotando.
Si se está funcionando en modo "limitado" y se intenta leer un
dato con la pila vacía, se devuelve -1.
Cuando se hace un "FLUSH", únicamente se posiciona el puntero
de la pila al principio de ésta, pero NO SE LIMPIAN LOS VALORES. Esto
no tiene absolutamente ninguna trascendencia en el modo limitado,
pero en el modo rotatorio puede llevarle a más de un aprieto si no lo
tiene en cuenta.
Ejemplos de uso:
programa contenido de la pila contenido del flag 1
-------- --------------------- --------------------
FLUSH 0 ?
PUSH 1111 ?
PUSH 2011, 20 ?
PUSH 1011,20,10 ?
POPV 1 11, 20 10
POPV 1 112 0
PUSHV 111, 20 20
FLUSH 0 20
RET
El debugger ha sido preparado para facilitarle al máximo la
depuración de programas que utilicen la pila (los cuales suelen estar
repletos de pequeños bugs).
Las ordenes especiales son una réplica de los orgones:
PUSH x : introduce 'x' en la pila.
POP : saca una valor de la pila (e imprime su valor)
FLUSH : vacía la pila
VERPILA : muestra la pila entera. Un código de colores
indica los valores 'asignados': en color azul,
valores asignados, en color rosa, valores no
'asignados'.
STACKMODE x: selecciona el modo de la pila.
PARA LA PROXIMA VERSION ------------------------------------
Para la próxima versión tengo previsto incluir el soporte de
alta resolución VESA intrínsecamente, mejorar el soporte de sonido
y soportar más de una ventana de texto en la pantalla. También es
posible que se incluya soporte para distintas fuentes. Quién sabe.
(puedes trabajar en tu propio soporte de fuentes con tu propio mo-
tor gráfico). Además, el texto de formateará automáticamente.
Quizás, algún día, DAP migré a Windows.
CRÉDITOS ---------------------------------------------------
Se reconoce la propiedad de sus respectivas marcas sobre todos
los productos registrados nombrados en este manual. Pero antes, yo
mismo debo perder muchos prejuicios.
--------------------------[ FIN DEL MANUAL ]-------------------------