Skip to content
Baltasar García Perez-Schofield edited this page Sep 13, 2023 · 11 revisions

Miscelánea

Hay varias funciones del módulo ctrl que son interesantes desde el punto de vista del autor para la interacción con los objetos, personajes y localidades.

  • ctrl.locs.showPic(s1, s2): Muestra una imagen con path s1 en el lugar de la imagen actual. Si se pasa la cadena vacía o null, simplemente borra la imagen actual. El parámetro s2 es la alineación, que puede ser "left", "center" (por defecto), o "right". En el siguiente ejemplo, se cambia la imagen al vuelo al examinar el armario. En la siguiente redescripción de la localidad, vuelve a mostrarse la imagen de la localidad, loc.pic, pues esta no ha cambiado.
objArmario.preExamine = function() {
    let toret = objArmario.desc;

    if ( ctrl.lugares.limbo.tiene( objPantalones ) ) {
        objPantalones.moveTo( locHabitacion );
        ctrl.lugares.hazDesc();
        toret = "¡Has encontrado unos ${pantalones, coger pantalones} en el armario!";
        ctrl.lugares.showPic( "res/pantalones.jpg" );
    }

    return toret;
}
  • ctrl.locs.doDesc()/hazDesc(): Fuerza la redescripción de la localidad. En el siguiente ejemplo, al examinar el armario se encuentran los pantalones.
objArmario.preExamine = function() {
    let toret = objArmario.desc;

    if ( ctrl.lugares.limbo.tiene( objPantalones ) ) {
        objPantalones.moveTo( locHabitacion );
        ctrl.lugares.hazDesc();
        toret = "¡Has encontrado unos ${pantalones, coger pantalones} en el armario!";
    }

    return toret;
}
  • ctrl.locs.updateDesc(desc)/actualizaDesc(): Actualiza la descripción de la localidad. No borra el área de respuestas, y si se le pasa una descripción alternativa, la utiliza en lugar de emplear la propia de la localidad (ésta no se modifica). Si en el ejemplo anterior, la localidad tiene un preLook(), no va a ser disparado con hazDesc() ni con updateDesc(). Así, se puede simular de la siguiente forma:
objArmario.preExamine = function() {
    let toret = objArmario.desc;

    if ( ctrl.lugares.limbo.tiene( objPantalones ) ) {
        const loc = ctrl.lugares.getCurrentLoc();

        objPantalones.moveTo( locHabitacion );
        ctrl.lugares.updateDesc( loc, loc.preLook() );
        toret = "¡Has encontrado unos ${pantalones, coger pantalones} en el armario!";
    }

    return toret;
}
  • ctrl.locs.audio.setInfo(audioInfo): Permite indicar la información del audio a reproducir mediante un solo objeto simple JSON. Esta es tan solo una función de conveniencia que llama a la función indicada a continuación, set(), con los valores desempaquetados. Es interesante si se desea reproducir el audio de una localidad, por ejemplo por si se ha interrumpido con otro sonido: ctrl.audio.setInfo( ctrl.places.getCurrentLoc().audio ).
let snd = {
    "src": "res/efecto_ambiente.mp3",
    "volume": 0.5,
    "loop": false
};
ctrl.audio.setInfo( snd );
  • ctrl.locs.audio.set(src [,volumen [, loop]] ): Permite reproducir un sonido no asociado a la localidad (el sonido ambiental de la localidad se interrumpirá, en ese caso será necesario volver a iniciarlo con ctrl.audio.setInfo( ctrl.places.getCurrentLoc().audio ). Si no se especifican los parámetros volumen (volumen del audio, entre 0.0 y 1.0) o loop (reproducir en bucle, true o false), entonces se asumen los valores 0.5 y false, respectivamente. Una vez se establece un audio, este se reproduce automáticamente. Puede repetirse si se desea con play(), y pararlo con stop(). Nótese que se emplean las posibilidades de audio estándar de HTML5, por lo que se recomienda proveer los sonidos en mp3, el formato que aceptan todos los navegadores.
objMurcielagos.preExamine = function() {
    ctrl.audio.set( "src/murcielagos.mp3" );

    return this.desc;
}
  • ctrl.locs.audio.playing: permite el acceso al objeto HTML5 Audio creado para el navegador. Las posibilidades más comunes como stop() o play() ya se ofrecen en el módulo ctrl.audio, pero es posible que un usuario avanzado desee tener un control más fino de la reproducción.

  • ctrl.locs.audio.play()/reproduce(): Reproduce el último audio configurado con set(). Nótese que la llamada a set() ya reproduce el sonido una vez.

  • ctrl.locs.audio.stop()/para(): Para el último audio reproducido con set() o con play().

  • ctrl.locs.audio.pause()/pausa(): Pausa el último audio reproducido con set() o con play().

  • ctrl.locs.audio.ponVolumen(f)/setVolumen(f): Cambia el volumen del audio que se configuró con set() en su momento. Los posibles valores estarán en el rango 0.0 a 1.0, siendo 1.0 el 100% de sonido. Si no se provee el argumento, entonces se asume 0.5.

  • ctrl.usesTextLinks()/usaEnlacesEnTexto(): Devuelve true o false según el juego esté utilizando enlaces en el texto.

  • ctrl.setUseTextLinks(b)/ponUsaEnlacesEnTexto(b): El valor b puede no incluirse, ser true o false. Si no se incluye o se indica true entonces se pasa a utilizar enlaces incluidos en el texto. Con false deja de hacerlo. Nótese que no se pueden controlar los enlaces que el autor incluya en los textos, solo los que automáticamente genera el fi.js.

  • ctrl.goto()/irA(): Permite llevar al jugador a otra localidad diferente de la que se encuentra, forzando una redescripción.

objTunel.preEnter = function() {
    ctrl.goto( locEntradaTunel );
    return "Te has adentrado en las profundidades...";
}
  • ctrl.isPresent()/estaPresente(): Devuelve verdadero cuando el objeto pasado por parámetro es llevado por el jugador o está en la localidad actual. No tiene en cuenta que el objeto esté dentro de un contenedor, aunque esté en la localidad actual.
objArmario.preOpen = function() {
    let toret = "No puedes abrirlo.";

    if ( ctrl.estaPresente( objLlave ) ) {
        toret = "¡Lo has abierto!";
        objCuchillo.moveTo( objArmario.owner );
    }

    return toret;
}
  • ctrl.isObjAround()/estaObjPresente(): Devuelve el objeto cuando cuando el nombre (o un sinónimo) de ese objeto pasado por parámetro es llevado por el jugador o está en la localidad actual. No tiene en cuenta que el objeto esté dentro de un contenedor, aunque esté en la localidad actual.
objArmario.preOpen = function() {
    let toret = "No puedes abrirlo.";

    if ( ctrl.estaObjPresente( "llave" ) !== null ) {
        toret = "¡Lo has abierto!";
        objCuchillo.moveTo( objArmario.owner );
    }

    return toret;
}
  • ctrl.print(s): Muestra un mensaje en el área de respuestas de la pantalla.
pnjPuma.daemon = function() {
    if ( pnjPuma.owner == ctrl.lugares.devLocActual() ) {
        ctrl.print( "Contemplas horrorizado como un puma te observa, encaramado a un gran árbol." );
    }

    return;
}
  • ctrl.clearAnswers()/eliminaRespuestas(): Limpia el área de respuestas de la pantalla.
pnjPuma.daemon = function() {
    if ( pnjPuma.owner == ctrl.lugares.devLocActual() ) {
        ctrl.clearAnswers();
        ctrl.print( "Contemplas horrorizado como un puma te observa, encaramado a un gran árbol." );
    }

    return;
}
  • ctrl.endGame(txt, pic)/terminaJuego(txt, pic): Termina el juego, mostrando un texto y una imagen.
objTesoro.preTake = function() {
    ctrl.endGame( "¡Has conseguido el tesoro!¡Has ganado!", "res/fin.jpg" );
}
Clone this wiki locally