HispaMSX

Cómo programar un juego conversacional (1)

2004-11-30 14:27:04

--- En hispamsx(_en_)yahoogroups(_punto_)com, msx_forever <msx_forever@y...> 
escribió:
x> Deseo programar mi primer juego para MSX y he pensado en hacer 
uno
x> conversacional con una foto por pantalla y bajo ella texto 
explicativo y  
x> tambien alguna pregunta para avanzar a la siguiente pantalla.

x> En basic sería algo así?:
x> 10 cls: key off: print "primera pantalla"
x> 20 load "pantalla1.sc2"
x> 30 a$=inkey$
x> 40 if a$= "N" then 100
x> 50 if a$= "S" then 110

x> ...
x> ...

x> 100 ' carga de la nueva pantalla según S.
x> 110 ' carga de la nueva pantalla según N.


Hombre, si quieres programar una conversacional en BASIC, y encima 
con los IFs a pelo, vas a quererte morir cuando vayas por la 
pantalla 10, te vas a quedar sin memoria, y las instrucciones de la 
conversacional se te van a quedar limitadas a los IFs que metas en 
cada pantalla... o sea, NUNCA la programes así :) (aunque yo en mis 
principios hice muchas, eh?)

Me tocas la fibra, ya que a mi me gustan mucho las conversacionales, 
me hecho muchas en BASIC, me hice un parser SSP1.0, etc.. así que te 
daré unas pistas.

NOTA: Estas indicaciones son en MSXBASIC y las hago de memoria, si 
tengo algún fallo, pues lo decís :).


Introducción
------------

La idea es crear un programa donde puedas moverte por todas las 
pantallas con total comodidad y desarrollar los movimientos básicos 
de una conversacional: moverte, examinar, manipular objetos, etc... 
llamemosle Parser, ok?. Llegando a este punto, la idea será definir 
las estancias del mapa, objetos, etc... y que el ordenador lo haga 
todo evitando utilizar condicionales "a pelo". ¿Te parece?.


Papel
-----

Lo primero -y lo mejor de una conversacional- es el guión. Es lo que 
ambienta y hace que los puzzles tengan sentido (y lo que engancha al 
jugador). Si en tu guión resulta que al ENTRAR EN HABITACION, de 
pronto mueres sin saber porqué, pues tu aventura no valdrá un 
pimiento y enfurecerás al jugador, ok?.


Definir el mapa
---------------
Bueno, metamonos en faena...
Primero tienes que definir el mapa de la aventura, usease, las 
localizaciones de las pantallas. Te pongo un ejemplo, que es como lo 
hacía yo en los principios de los tiempos:

...
100 dim pa$(32),n(32),s(32),e(32),o(32)
110 for t=1 to 32:rem *pensando en limitarlo a 32 pantallas
120 read pa$(t),n(t),s(t),e(t),o(t)
130 nextt
...
1000 data "En el antiguo cuarto de estar no quedan más que un viejo 
butacón y una vieja alfombra.",1,0,0,0
1010 data "Aquí pones lo que quieras para la segunda 
pantalla.",0,1,0,0
...

Bueno, ¿que tenemos aquí?. ¡Pues las descripciones de las pantallas 
y el mapa de todo nuestro mundo definido dentro de unas arrays de 
una dimensión!. ¿Y para que sirve esto?. Pues es la base de todo, ya 
que ahora podemos tener perfecto control de todo. Bueno vamos por 
partes... por cada pantalla tenemos 5 datos: la descripción (texto), 
la pantalla a la que vamos si escribimos NORTE, la pantalla a la que 
vamos si escribimos SUR, la pantalla a la que vamos si escribimos 
ESTE, y la pantalla a la que vamos si escribimos OESTE (yo también 
metía las variables EN,SA,SU y BA para ENTRAR, SALIR, SUBIR y BAJAR, 
pero bueno...). Si, con estos datos cargados, utilizamos una 
variable para saber en que pantalla estamos (PA), lo tenemos todo 
hecho (en cuanto al mapa, eh?, que todavía nos falta MUUCHO para 
hacer la conversacional). Ahí va el primer ejemplo:

Lo tienes en la carpeta /BASIC/CONVERS/moverse1.BAS

Bien, es hiper rustico. Solo funcionan las mayúsculas y solo sirve 
para moverse, pero algo es algo!!!. Ya tenemos un mundo que podemos 
definir y movernos!. Ala, a modificar un poco el listado que os 
paso, que luego te cuento más.

Jon







<Anterior en la conversación] Conversación actual [Siguiente en la conversación>