Skip to content
Baltasar García Perez-Schofield edited this page Oct 29, 2023 · 7 revisions

Localidades y salidas

Localidades

Una localidad es un objeto Loc, y para crearla se utiliza la función ctrl.lugares.creaLoc(). Sus parámetros son: nombre, sinónimos, y descripción.

const locPlaya = ctrl.lugares.creaLoc( "Costa de Montecristo",
    [ "playa", "cala", "caleta" ],
    "En la costa, el mar lame los ${guijarros, ex guijarros}. \
        ${Escarpados peñascos,ex peñascos} escalan las cimas con desniveles \
        imposibles, y continúan \
        al ${este,este} en forma de ${cantiles, ex cantiles}. \
        Puedes ver también el ${bote, ex bote} en el \
        que llegaste."
);

locPlaya.pic = "res/playaGuijarros.jpg";

Una localidad lleva sinónimos porque forma parte de la misma. En el caso de que el jugador teclee "ex playa", en el ejemplo, se producirá la acción mirar, que redescribiría la localidad. Esto evita el tener que crear objetos extra que sólo sirven para redirigir la atención del jugador hacia el texto de la descripción de la localidad.

También es posible que se necesiten insertar objetos en una localidad, quizás que son escenario y que ya están incorporados a otra localidad. Para ello, se manipula el vector objs de la localidad. En concreto, se llama al método push() para introducir un elemento nuevo.

const locCantiles = ctrl.lugares.creaLoc( "Cantiles",
                    [ "cantiles", "acantilados" ],
                    "Los cantiles de grandes ${rocas, ex rocas} \
                     terminan en este punto con la breve \
                     ${playa, ex playa} a la que arribaste, al \
                     ${oeste, oeste} de aquí."
);

locCantiles.objs.push( objRocas );
locCantiles.objs.push( objMar );

Modificaciones en los textos

En todas las descripciones, bien sean de localidades, de objetos, o personajes, se pueden indicar caracteres de control que realizarán varias modificaciones en dichos textos.

  1. Incluir posibles acciones. ${<txt>, <orden>} Cuando se especifica, el texto antes de la coma txt, aparece resaltado como enlace, y dicho enlace introduce automáticamente la orden orden indicada tras la coma. Por ejemplo: "Puedes ver una ${cascada, ex cascada}." El texto cascada aparecerá resaltado como un enlace, y cuando el usuario pulse en él, se generará automáticamente la orden "ex cascada". Nótese que se producen todos los pasos de tokenización y parsing, como si la orden hubiera sido tecleada por el usuario.
  2. Indicar texto que solo se visualizará una vez.. ^{<txt>} Cuando se incluye, el texto entre llaves solo se incluye en la descripción para el jugador la primera vez que se describe esa entidad (localidad, personaje, objeto). En otro caso, se omite. Por ejemplo, ctrl.creaObj( "mesa", [], "^{Esta mesa te trae funestos recuerdos. }Su superficie está pulida como un espejo.").

Multimedia

const locPlaya = ctrl.lugares.creaLoc( "Costa de Montecristo",
    ...
);
locPlaya.pic = "res/playaGuijarros.jpg";
locPlaya.audio.src = "res/olasMar.mp3";
locPlaya.audio.loop = true;

El atributo pic (opcional), contiene el nombre de un archivo de imagen que será visualizado en el momento en el que se redescriba la localidad.

El atributo audio (opcional), tiene tres subcampos: src (el archivo a reproducir), volume (el volumen, desde 0.0 a 1.0 (100%), que por defecto tiene el valor 0.5), y loop (si se debe reproducir en bucle o no, por defecto tiene el valor true).

Salidas

Las salidas de una localidad se pueden establecer en cualquier momento, por ejemplo, cuando se crea, o cuando se produce determinada acción.

locCantiles.ponSalidaBi( "oeste", locPlaya );

ponSalidaBi() hace que la salida al oeste en locCantiles comunique con la playa, y que la salida al este de locPlaya comunique con locCantiles (es decir, que sea bidireccional). Si sólo se desea la comunicación en una dirección, entonces se debe usar ponSalida() en su lugar.

Las salidas de una localidad vienen dadas por el vector compas, y brevCompas, mediante getSalida() y uno de estos valores es posible saber a qué localidad se accede dada una salida. Es posible modificar estos vectores, de manera que en lugar de norte, sur, este y oeste, se utilice, por poner un ejemplo, adelante, atrás, derecha e izquierda. Nótese que será necesario modificar consecuentemente brevCompas.

miloc.compas = [ "adelante", "atras", "derecha", "izquierda", "arriba", "abajo" ];
miloc.brevCompas = [ "a", "s", "d", "i", "ar", "ab" ];

Ini

Puede redefinirse una función ini() que será ejecutada antes del comienzo del juego. Por defecto, esta función no hace nada.

const locPlaya = ctrl.lugares.creaLoc( "Costa de Montecristo",
    "playa",
    [ "costa" ],
    "La playa se extiende allende alcanza la vista.",
);

locPlaya.ini = function() {
    this.pic = "res/playaGuijarros.jpg";
    this.audio.src = "res/olasMar.mp3";
    this.audio.loop = true;

    this.preSwim = function() {
        return "Tienes pocas ganas de volver al agua...";
    };
};

Esta función también puede pasarse como último parámetro al crear la localidad.

const locPlaya = ctrl.lugares.creaLoc( "Costa de Montecristo",
    "playa",
    [ "costa" ],
    "La playa se extiende allende alcanza la vista.",
    function() {
        this.pic = "res/playaGuijarros.jpg";
        this.audio.src = "res/olasMar.mp3";
        this.audio.loop = true;

        this.preSwim = function() {
            return "Tienes pocas ganas de volver al agua...";
        };
    }
);
Clone this wiki locally