Q'AECHO ESTO?

Por... Melitón Rodríguez, el de la 117

Passa tronkos, ya estamos otro mes más en la sección esta. Vayamos con lo nuestro, en el último fanzine hicimos una pequeña aventurilla; en este vamos añadirle unas cuantas cosas más. Pero antes me gustaría comentar un poco algunas de las novedades que trae la última versión 2.0.

  1. Como ya dije en el anterior fanzine (a menos que se convirtiensen todas la vocales en p.t.s puntos), la nueva versión permite mezclar letras y gráficos en casi todos los modos relevantes de la VGA. Tanto en 256 colores como en 16 colores.
  2. Pero no acaba ahí la cosa, además se ha incluido un gestor de interrupciones que permite hacer cosas mientras que se teclea, se espera o lo que sea. Esto permite múltiples cosas, quizá la más llamativa sea la posibilidad de incluir gráficos animados en tus pantallas. Estas interrupciones son de 'velocidad manejable'; el programador puede gestionar cuantas 'veces por segundo' se ejecutan.
  3. Se ha metido toda una gestión de música, tanto de sonidos para efectos especiales, como de hilo musical fijo (simultáneo al juego).
  4. Finalmente se ha reducido drásticamente los ejecutables y se han incluido ejemplos adecuados para cada una de las nuevas 'características'.

Bueno, ahora vamos a añadirle unas cuantas cosas a nuestra mini aventura del anterior fanzine. Lo que haremos será incluir, un HAZ que llamará a las acciones adecuadas. También decidiremos cuales son los verbos de movimiento. Pondremos un item, un objeto. De momento nos vale con saber que los items (objetos) se incluyen de la misma forma que las localidades excepto que no tienen salidas y el primer campo cardinal es la localidad donde están. En total quedaría:

#define MaxVerbMov 8;

\VOC
    NORTE 4 Verbo; N 4 Verbo;
    SUR 5 Verbo; S 5 Verbo;
    ESTE 6 Verbo; E 6 Verbo;
    OESTE 7 Verbo; O 7 Verbo;

    FIN 8 Verbo;
    COGER 9 Verbo;
    COGE 9 Verbo;
    DEJAR 9 Verbo;
    DEJA 9 Verbo;
    I 10 Verbo;
    INVEN 10 Verbo;
    EXAMINa 11 Verbo;
    EX 11 Verbo;

    CAAD 4 nombre;
    FANZINe 4 nombre;   /: Sólo importan las 6 primeras letras :/


\MEN 0        /: Mensajes del sistema, siempre deben esta :/
    \0 "", ""
    \1 "" y ""
    \2 "".\n""
    \3 ""\ix""
    \4 ""No sé a qué te refieres con el pronombre.\n""
    \5 ""\lx""
    \6 ""el ""
    \7 ""la ""
    \8 ""un ""
    \9 ""una ""
    \10 ""Ya tengo \ix.\n""
    \11 ""No hay se eso por aquí.\n""
    \12 ""\ix me pesa demasiado.\n""
    \13 ""No puedo coger \ix; llevo demasiadas cosas.\n""
    \14 ""He cogido \ix.\n""
    \15 ""No veo nada y sin ver no puedo hacerlo.\n""
    \16 ""Teclea el nombre del fichero:\n>> ""
    \17 ""\zbvPulse una tecla...\zbg""
    \18 ""No cabe \ix en ""
    \19 ""No tengo eso.\n""
    \20 ""He dejado \ix.\n""
    \21 ""Ya me puse \ix.\n""
    \22 ""Me he puesto \ix.\n""
    \23 ""No llevo puesto de eso.\n""
    \24 ""Me he quitado \ix.\n""
    \25 ""No se puede meter nada en \ix.\n""
    \26 ""He colocado \ix en ""
    \27 ""No puede haber nada en \ix.\n""
    \28 ""No hay de eso en \ix.\n""
    \29 ""He sacado \ix ""
    \30 ""No se puede dar nada \a.\n""
    \31 ""Le he dado \ix ""
    \32 ""No se puede pedir nada \a.\n""
    \33 ""\ix no lleva de eso.\n""
    \34 ""\ix me ha dado ""
    \35 ""\ix ha cogido ""
    \36 ""\ix se ha puesto ""
    \37 ""\ix ha dejado ""
    \38 ""\ix se ha quitado ""
    \39 ""\ix ha colocado ""
    \40 ""\ix en ""
    \41 ""\ix ha sacado ""
    \42 ""\d""
    \43 ""\ix le ha dado ""
    \44 ""\a""
    \45 ""No se puede poner ni quitar \ix.\n""
    \46 ""a ""
    \47 ""de ""
    \48 ""al ""
    \49 ""del ""
    \50 "" ""   /: Espacio necesario para imprimir los mensajes 3 y 44 ó 42 :/
    \51 ""los ""
    \52 ""las ""
    \53 ""unos ""
    \54 ""unas ""

\MEN 1
    \0 ""salida posible: ""
    \1 ""salidas posibles: ""
    \2 ""no hay salida.\n""
    \3 ""norte""
    \4 ""sur""
    \5 ""este""
    \6 ""oeste""
    \7 "" >>""
    \8 ""No puedo hacer éso.""
    \9 ""No puedes moverte en esa dirección.""
    \10 ""Aquí está \ix.""
    \11 ""Llevas \ix."
    \12 ""No llevas nada.""

\LOC
    /: Las localidades 0 y 1 están reservadas :/
    \2 _ _ """" ""Primera localidad."" < < $ Norte 0 3; Este 0 4;
    \3 _ _ """" ""Segunda localidad."" < < $ Sur 0 2;
    \4 _ _ """" ""Tercera localidad."" < < $ Oeste 0 2;


    \ITE  /: Una sección de ITEM, con un item :/
    \0 Caad _ ""CAAD"" ""Un fanzine sobre aventuras conversacionales.""
    < 2,<

\BLO
    BLOQUE [0] PrimeraAventura()
    {
    COPI 1 47;      /: Tabla donde está el Prompt :/
    COPI 7 48;      /: Mensaje del Prompt :/
    COPI 2 34;      /: Localidad inicial la 2 :/
    LIMPANT;
    DESC [34];
    NL;
    SALIDAS [34] 1 0;
    (PRESENTE 0) {ACTUAL 0; MENSAJE 1 10;}
    MIENTRAS (IGQ 0 [0])    /: Un bucle infinito :/
        {
        PREG 0;
        ANALIZA 0 1;
        (MNQ 10 MaxVerbMov) /: Comprueba si es de movimiento :/
            {
            (CAMINAR 34)    /: Intenta caminar en la dirección adecuada :/
                {
                /: Si lo consigue repetir descripción :/
                LIMPANT;
                DESC [34];
                NL;
                SALIDAS [34] 1 0;
                (PRESENTE 0) {ACTUAL 0; MENSAJE 1 10;}
                }
            SINO /: Si no lo consigue poner 'No puedes ir en esa dirección.' :/
                {
                MENSAJE 1 9;
                }
            }
        SINO
            {  /: No es de movimiento :/
            CUAL 1;
            HAZ [10]
                {
                Fin:{FIN;}
                Coge:{(COGER [0]);}
                Deja:{(DEJAR [0]);}
                I:{HazInventario;}
                Examina:{EXAM [0]; NL;}
                SINO {MENSAJE 1 8;} /: 'No puedes hacer éso' :/
                }
            }
        } /: Final del bucle infinito :/
    }

    BLOQUE [1] HazInventario()
    {
    (PRESENTE 0) { ACTUAL 0; MENSAJE 1 11;} SINO {MENSAJE 1 12;}
    }
    

Vamos a ver algunas cosillas que han salido. Primero, por primera vez se hace uso de un bloque diferente del [0]. Como se ve se define y para usarlo basta con poner su nombre como si se tratase de un condacto normal y corriente. Esta es una de las ventajas del CAECHO?, los nuevos bloques pueden usarse como si fuesen un nuevo condacto más potente o adecuado.

'CUAL 1' es equivalente al WHATO del PAWS, convierte el nombre-adverbio en un número de objeto al que le corresponde que pone en la bandera cardinal 0. Así que [0], el contenido de la bandera 0, es, tras un CUAL 1, el objeto referido por el jugador. Por lo tanto el 'COGER [0]' coge el objeto referido por el jugador.

'EXAM n' pone en pantalla la descripción del objeto (el segundo mensaje de la definición del objeto), así que EXAM [0] pone la descripción del objeto referido por el jugador.

La condición 'PRESENTE n' es VERDADERA cuando el objeto 'n' está visible por el jugador; o sea en la misma localidad del jugador, llevado, o puesto.

Tan sólo reseñar una cosa más, fijaos que COGER y DEJAR están entre paréntesis como si fuesen una condición. ¿Por qué? Porque lo son. Es decir, además de hacer lo necesario para mover el objeto a 'llevado' si es posible, o decir que no está... resulta VERDADERO si consigue coger el objeto, y FALSO si no se consigue. De esta forma, pueden hacerse diferentes cosas si se hacen o si no. Tendría que ser de la forma:

            (COGER n)
                {
                Cosas hechas si se consigue...
                }
            SINO
                {
                Cosas hechas si no se consige...
                }

Pero la mayor parte de las veces no es necesario hacer nada más allá de lo que ya hace COGER, así que lo demás sobra. Para no hacer nada, se pone en vez de lo anterior:

(COGER n);

Y ya está. Esto es lo que se ve en el listado de arriba.

Nada más, os aconsejo que cojáis el INICIAL.FUE y miréis como está hecho. En el próximo fanzine nos meteremos en como llamar a otros bloques con sus propios parámetros...