Crea tu Propia Aventura ConversacionalCursos

Crea tu Propia Aventura Conversacional: Creando el motor

4.9
(14)

Introducción.

Bienvenidos a la primera entrega del curso para aprender a crear tu propia aventura conversacional. El curso pretende ser muy didáctico, creando paso a paso una aventura conversacional: desde el motor, hasta los escenarios, interfaz, la portada, etcétera.

Este documento va acompañado por un fichero aventura.dsk, con el programa.

Esta programa no pretende sustituir a los parsers ya existentes, ni mucho menos, se trata de un programa para aprender y mejorar nuestro BASIC, y ya de paso hacer una aventura conversacional con gráficos, objetos a recoger y usar, etcétera, y quien sabe si luego compartir con los amigos y proponerles un reto.

La historia de tu aventura conversacional.

Lo primero que debemos tener claro es la historia de nuestra aventura conversacional, desarrollarla en papel definiendo las situaciones a las que el jugador se va a enfrentar. Con esto ya tenemos la mitad del trabajo hecho, solo nos queda pasarlo al ordenador.

Define el mapa de tu aventura conversacional.

Para el mapa usaremos una matriz con el número total de habitaciones, en este caso vamos a usar 100, por tanto definiremos la matriz así:

DIM MAPA(9,9) 

Con esto 10×10=100, ya tenemos una zona de memoria reservada para indicar al programa donde debe cargar los datos de cada habitación, es decir, el programa principal será uno donde podamos realizar todas las acciones, y sin movernos de ahí (en el programa),  iremos cargando los datos de cada habitación según nos vayamos moviendo durante el juego. Con esto ahorramos memoria, ya que sería una locura poner en cada habitación todo el sistema de reconocimiento de órdenes.

Dentro de éste habrá otras subrutinas que harán el trabajo de movimiento, para cuando escribamos Norte, Sur, etcétera.

Tenemos que ver el mapa así dentro de la matriz, y dándole a cada habitación un número:

00100
00200
05340
00600
00780

Las habitaciones con un 0, son habitaciones que tenemos sin definir, las podemos añadir cuando queramos.

Más adelante cuando queramos movernos, solamente habrá que consultar esta tabla para ver si hay salida, si es un 0, entonces no hay salida hacia allí.

Introducimos los datos en la tabla:

Mapa(1,1)=1 : mapa(1,2)=2 : mapa(1,3)=3 : mapa(2,3)=4 : mapa(2,4)=6

Mapa(2,5)=7 : mapa(1,5)=5:mapa(3,5)=8

Ya tenemos el mapa con cada número de habitación, luego en el haremos una pequeña subrutina que indicará al programa donde están los datos de cada habitación, le pasaremos ese parámetro a un comando RESTORE.

Otra opción sería, al principio, cargar todo de una vez, pero indicando en que línea del programa está cada habitación, esta opción me gusta menos, ya que actualizar algo lo hace más complicado. Además, en un programa con muchas habitaciones ocuparía todavía más memoria; para empezar usaremos la  primera opción.

Posición=mapa(posicionx,posiciony)

If posición=1 then restore 10100

He dejado un borde de habitaciones a 0, alrededor de la zona de juego para evitar fallos de lectura en la subrutina  “Salidas”.

Los datos de cada habitación de tu aventura conversacional.

Usaremos líneas DATA. La primera serán datos de dibujado para los gráficos, serán las coordenadas de inicio, y luego movimientos del cursor gráfico que usaremos con la orden DRAWR: en este juego vamos a usar gráficos vectoriales. Incluso a esta orden le podemos ir cambiando la tinta a cada línea en sus parámetros. Vamos a darles a cada habitación 16 datos de dibujo, por ahora. Cuantos más pongas, mejor detalle de dibujo tendrás.

Sería algo así:

DATA 0,200,50,-10,2,2,3……

Los siguientes datos será la descripción de texto de la habitación, en este caso podemos poner 255 letras, una línea de texto en una variable. Pero podemos poner las que queramos.

DATA “te encuentras en una estancia fría y oscura….”

Define los objetos de tu aventura conversacional.

Aquí debemos distinguir entre dos tipos de objetos, los que podemos usar o llevar como una llave por ejemplo, y los que están de decorados pero que además los podemos usar o examinar, como por ejemplo un interruptor.

Los que podemos llevar:

Al principio creamos una matriz con los objetos:

DIM objeto1$(10)

Objeto1$(0)=”llave”

Objeto1$(1)=”barra”

Objeto1$(2)=”manzana”

Y ahora otra matriz con la posición donde se encuentra cada objeto:

DIM objetos2(10)

Objetos2(0)=3

Objetos2(1)=2

Cada posición en la matriz debe coincidir con la posición en la matriz objeto1$, es decir, que si la llave en la matriz objeto1$ está en la posición 0, en la matriz objetos2 nos referiremos a ella en la posición 0 también.

En objetos2 cada dato representa en qué habitación está actualmente cada objeto, así cuando el programa cargue la habitación actual, mirará si hay algún objeto en ese número de habitación, y entonces los mostrará al final de la descripción:

……. Las paredes son de piedra.

Puedes ver la llave.

Con esto podemos coger objetos en una habitación y soltarlos en otra. Cuando los llevemos encima, le daremos al objeto en la tabla objetos2, el valor 99, así cuando hagamos inventario, el programa mirará que objetos valen 99, y entonces nos dirá que los llevamos en la mochila.

Los objetos que no podemos llevar pero, si podemos usar:

Supongamos que ponemos un cofre o un interruptor. ¿Cómo sabemos si está abierto, o si el interruptor está pulsado? Pues lo mismo que antes: primero creamos una tabla con este tipo de objetos, otra con la habitación en la que están, y  otra con su estado.

DIM UTILES$(10)

Utiles$(0)=”cofre”

Utiles$(1)=”interruptor”

Ahora otra con la posición:

DIM UTIL1(10)

Util1(0)=3     ‘ponemos el cofre en la habitación 3

Otra con el estado  A :

DIM util2A(10)

Util2a(0)=0           ’se encuentra cerrado

Si queremos esconder algo dentro del cofre, como por ejemplo una joya, en la lista de objetos que se pueden llevar le damos un valor de -1, por ejemplo, para que el programa no los muestre. Cuando abramos el cofre, metemos una línea de código que le cambie el estado a la joya:

IF UTIL2A(0)=1 THEN OBJETOS2(4)=3

Al comprobar que el estado del cofre es 1, es abierto, entonces cambiamos el estado de la joya que se encuentra en la lista de objetos, a 3. Este 3 es el supuesto número de habitación donde estamos; ponemos el que corresponda, entonces en la descripción de la habitación al final saldrá:

Puedes ver la joya.

Vamos con el programa principal, la aventura conversacional.

Llegamos a la parte que hará que todas las anteriores se conecten, desde aquí iremos cargando cada habitación y recibiendo órdenes del jugador.

El programa irá analizando cada palabra y según si coinciden con las que tenga en distintas tablas hará una cosa u otra.

Primero crearemos SUBRUTINA con las direcciones, cuando el jugador teclee algo, lo primero será mirar si es una dirección, para luego comprobar si hay salida por ese lado.

Una vez comprobada la salida, si la hay, entonces borraremos la pantalla y cargaremos los datos de la siguiente habitación; y vuelta a empezar.

Si no hay salida entonces comprobamos la primera palabra de la frase en nuestra lista que vamos a crear de acciones, la llamaremos verbos.

Comprobamos que ese verbo esté en nuestra lista y si lo está, buscamos en el resto de la frase alguna palabra que coincida con nuestras listas de objetos, para actuar según sea el verbo.

Para cada verbo escribimos en el programa las acciones a realizar, por ejemplo si es el verbo COGER, pues cambiamos el estado del objeto a 99, para que ya no aparezca en la habitación y salga en el listado de nuestro inventario y así con todos, cuanto más verbos y más los especifiquemos mejor será el programa. Para empezar haremos solo las acciones básicas.

Veamos un ejemplo, el jugador recoge una llave:

>COGE LA LLAVE DEL SUELO

Como verás en el programa cada acción tiene su subrutina, donde se va analizando todo lo que se ha escrito en la frase. Con los verbos se usa el truco de reconocer las primeras letras de la palabra, por ejemplo del verbo “coger” se reconoce hasta “coge”, así sirve tanto como “coger” o “coge”. Con los demás podemos enredar la frase como queramos, que el programa funcionará igual:

“coge la dichosa llave que hay en al suelo”

El programa una vez reconocido el verbo “coger” buscará en el resto de la frase los objetos, útiles o personajes del juego, y si se encuentra en esa habitación, pues hará la acción correspondiente.

En este programa de ejemplo tenemos acciones como dar, coger, abrir, dejar, examinar, inventario, salidas..

Podemos definir una ventana con WINDOW, para  que al escribir muchas líneas no se suban los gráficos hacia arriba.

En este ejemplo no lo usaremos,  pues se trata de hacer una base lo más fácil posible para los que acaban de llegar al Basic de Amstrad.

Crea los personajes de tu aventura conversacional

Los personajes los trataremos como objetos, pero cada uno tendrá su subrutina, donde estará su repertorio de frases.

Así podemos definir su situación, en que habitación está, si se mueve de un sitio a otro, etcétera.

Ahora toca repasar el programa que acompaña este texto, AVENTURA.DSK. Una vez comprendido, ya solo queda hacer nuestro propio juego y mejorarlo todo lo que queramos.

Cuando termines el programa, se pueden juntar varias líneas en una, quitar espacios, incluso compilar el código con un compilador de Basic, hasta se puede cambiar algún método de proceso de palabras, pero el objetivo de este programa ya se ha cumplido, que es servir de base para empezar.

Espero que lo disfrutes.

El programa para su descarga lo puedes encontrar aquí: aventura.dsk

¿Te ha Resultado útil este artículo?

Ayúdanos a mejorar y danos tu opinión:

Fuente
Autor: Juan Rodriguez Ciruela
Mostrar más

2 comentarios

  1. Hola, me resulta confuso los datos de la tabla.
    Mapa (2,4)=6 ¿Significa que en la columna 2 fila 4 está la habitación 6?
    Si fuera así no me coincide con la columna donde están las habitaciones 1, 2 y 3. Y también hay otras que me des cuadran por lo que no se muy bien como se ha elaborado.
    ¿En que número empiezan las filas y las columnas? ¿En el 0 o en el 1?
    Gracias anticipadas por la respuesta

    1. Aquí la habitación 6 ,es simplemente porque yo le he puesto la 6,no quiere decir que casilla(4,2)=6
      Para el ordenador como se hace una matriz de memoria cuadrada,pues es por coordenadas, pero al dibujarla en el mapa para nosotros ,para jugar,pues se le pone números a cada habitación para orientarnos.
      En ese cuadro de dos dimensiones en la memoria, hay zonas vacías ,que se pueden ir rellenando con más habitaciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Mira también
Cerrar
Botón volver arriba