Tokens de efecto#
Los tokens de efecto son los verbos que encadenas en interacciones, reglas de puzzle y
cinemáticas para cambiar el juego: activar un flag, dar un item, mover un NPC, alternar un
área caminable. Cada token se escribe como VERB:arg1|arg2 (o un VERB a secas cuando no
lleva argumento), y los editores te autowirean los argumentos.
| Token | En el editor | Qué hace | Argumentos |
|---|---|---|---|
SETFLAG |
Activar flag | Recuerda que algo pasó (enciende un interruptor). | Flag |
CLEARFLAG |
Desactivar flag | Olvida que algo pasó (apaga un interruptor). | Flag |
TOGGLEFLAG |
Alternar flag | Invierte un interruptor recordado al estado contrario. | Flag |
SETVAL |
Fijar valor | Guarda un valor como una clave o número (vacío lo borra). | Flag, Valor (vacío = limpiar) |
APPENDVAL |
Agregar al valor | Agrega un trozo a un valor guardado, como un dígito del teclado. | Flag, Anexar, Largo máx (vacío = sin tope) |
ADDVAL |
Sumar al valor | Suma a un contador (usa un negativo para restar). | Flag, Cantidad (+/-) |
RANDVAL |
Valor al azar | Saca un número al azar y lo guarda, como un dado. | Flag, Mín, Máx |
BACKSPACEVAL |
Retroceso en valor | Borra el último carácter de un valor guardado. | Flag |
CATCHTARGET |
Elegir a quién atrapa | Elige a cuál de tus personajes atrapa un perseguidor. | NPC antagonista, Personajes candidatos, Modo, Flag de salida (def caughtChar) |
PARTYTOGGLE |
Alternar en party | Agrega o quita un personaje del party elegido. | Personaje |
PICKUP |
Recoger ítem | Recoge un objeto de la escena y lo guarda en tu inventario. | Hotspot a quitar, Ítem a otorgar (vacío = mismo id) |
REMOVEITEM |
Quitar ítem | Quita un ítem de tu inventario. | Ítem |
GIVEITEM |
Dar ítem | Entrega un ítem a un personaje específico. | Ítem, Personaje objetivo |
RESTOREHOTSPOT |
Restaurar hotspot | Devuelve a la escena un objeto que se había quitado. | Id de hotspot |
WALKABLE_ON |
Activar caminable | Abre un área caminable en una sala. | Área caminable |
WALKABLE_OFF |
Desactivar caminable | Bloquea un área caminable en una sala. | Área caminable |
REGION_ON |
Activar región | Activa una zona que se dispara al pasar por encima. | Región |
REGION_OFF |
Desactivar región | Desactiva una zona que se dispara al pasar por encima. | Región |
LIGHTZONE_ON |
Encender zona de luz | Enciende una zona de luz, que ilumina o tiñe a quien esté dentro. | Zona de luz |
LIGHTZONE_OFF |
Apagar zona de luz | Apaga una zona de luz y deja el área sin iluminar. | Zona de luz |
NPCEXIT |
Enviar NPC a sala | Envía a un personaje caminando a otra sala. | NPC, Sala destino, Caminar a |
NPCWALKTO |
Mover NPC a un punto | Lleva caminando a un personaje hasta un punto y lo deja esperando ahí. | NPC, Destino, Orientación (opc), Velocidad (dur=ms | speed=px/s), Opciones |
NPCRETURN |
Traer NPC de vuelta | Trae de vuelta a un personaje desde otra sala. | NPC, Sala destino |
NPCWARPTOROOM |
Poner NPC en sala | Coloca al instante a un personaje en una sala. | NPC, Sala, En, Orientación (opc) |
FOLLOW |
Seguir a alguien | Hace que un personaje siga a otro. | NPC, Objetivo, Distancia de parada px (opc) |
UNFOLLOW |
Dejar de seguir | Hace que un personaje deje de seguir. | NPC |
DETACHCOMPANION |
Soltar compañero | Deja a un compañero en su lugar para que ya no te acompañe. | Compañero |
ATTACHCOMPANION |
Reunir compañero | Trae de vuelta a un compañero para que te acompañe. | Compañero |
NPCSTOP |
Detener NPC | Detiene a un personaje en seco. | NPC |
NPCWAIT |
Pausar NPC | Hace que un personaje espere unos segundos. | NPC, Segundos |
BEHAVIOUR |
Iniciar rutina | Inicia la rutina de un personaje mientras deambula por su cuenta. | Rutina |
STOPBEHAVIOUR |
Detener rutina | Detiene la rutina de deambular de un personaje. | NPC |
STARTTIMER |
Iniciar timer | Inicia una cuenta regresiva a la que puedes reaccionar. | Nombre del timer, Segundos |
CLEARTIMER |
Cancelar timer | Cancela una cuenta regresiva en marcha. | Nombre del timer |
CLEARWATCHER |
Rearmar vigía | Permite que una regla de una sola vez vuelva a dispararse. | Id de vigía |
SELECTVERB |
Elegir verbo | Preselecciona uno de los nueve verbos, como Usar. | Verbo |
SETCURSOR |
Controlar cursor | Toma el control del cursor del mouse: qué cursor, frame o posición, incluso visible durante una cinemática. | Overrides de cursor |
INVENTORY_UP |
Subir inventario | Desplaza el inventario una fila hacia arriba. | (ninguno: token a secas) |
INVENTORY_DOWN |
Bajar inventario | Desplaza el inventario una fila hacia abajo. | (ninguno: token a secas) |
SETSENTENCE |
Fijar línea-frase | Fija tu propio texto en la línea de acción de abajo (la barra de 'Caminar a…'). | Frase (#lid | texto, {flag}) |
CLEARSENTENCE |
Limpiar línea-frase | Quita el texto fijado de la línea de acción y vuelve a lo normal. | (ninguno: token a secas) |
SAY |
Decir línea | Hace que tu personaje o el narrador diga una frase. | Texto ({flag}) |
NPCSAY |
Decir línea de NPC | Hace que un personaje específico diga una frase. | NPC, Texto ({flag}) |
NARRATE |
Narrar texto | Muestra un texto de narrador, sin atarlo a ningún personaje. | Texto del narrador ({flag}) |
CLEARNARRATE |
Quitar narración | Quita el texto del narrador antes de tiempo. | (ninguno: token a secas) |
SETFRAME |
Cambiar sprite | Cambia la imagen de un objeto por otra. | Ruta del sprite, Texto a mostrar (opc) |
SETANIMFRAME |
Fijar fotograma | Salta una animación a un fotograma específico. | Índice de frame, Opciones |
STARTANIM |
Iniciar animación | Reproduce o reanuda una animación en un personaje u objeto. | Objetivo, Animación (opc), Orientación (opc) |
STOPANIM |
Detener animación | Detiene a un personaje u objeto a mitad de animación, en una pose fija. | Objetivo, Animación (opc), Orientación (opc) |
SHOWHOTSPOT |
Mostrar hotspot | Hace que un objeto aparezca en la escena. | Id de hotspot |
HIDEHOTSPOT |
Ocultar hotspot | Hace que un objeto desaparezca de la escena. | Id de hotspot |
ENABLEHOTSPOT |
Habilitar hotspot | Vuelve a hacer que un objeto responda a los clics. | Id de hotspot |
DISABLEHOTSPOT |
Deshabilitar hotspot | Hace que un objeto deje de responder a los clics. | Id de hotspot |
TOGGLELIGHT |
Alternar luz de sala | Enciende o apaga la luz de la sala. | Opciones (dur=ms) |
FADEOUT |
Desvanecer hotspot | Desvanece un objeto hasta que desaparece, con un texto opcional. | Leyenda |
MOVEHOTSPOT |
Mover hotspot | Desliza un objeto a un nuevo lugar de la escena. | Hotspot, Destino, Velocidad (dur=ms | speed=px/s), Opciones |
SETHOTSPOTMOTION |
Animar hotspot | Anima escala, rotación y opacidad de un objeto, cada canal loopeable (pulse, giro, fade). | Hotspot, Canales de movimiento |
PLAYMOTION |
Iniciar movimiento | Arranca o reanuda el Movimiento de un objeto hecho en el Room Editor (barrer, respirar, flotar). Se guarda con la partida. | Hotspot, Opciones |
STOPMOTION |
Detener movimiento | Congela el Movimiento de un objeto donde está, o lo regresa al reposo. | Hotspot, Opciones |
SETHOTSPOTFX |
Aplicar FX a hotspot | Reestiliza el sprite de un objeto en runtime: sombra, glow, blur, opacidad o contorno. | Hotspot, Overrides de FX |
MOVEGUI |
Mover widget | Desliza un elemento del panel en pantalla a otro lugar. | Widget de GUI (gui.widget), Destino, Velocidad (dur=ms | speed=px/s), Opciones |
MODIFYWIDGET |
Modificar widget | Reestiliza un elemento del panel en runtime: color, borde o texto. | Widget de GUI (gui.widget), Overrides |
DIALOG |
Iniciar diálogo | Inicia una conversación con ramas de diálogo. | Id de diálogo |
CUTSCENE |
Iniciar cinemática | Reproduce una cinemática dentro de la sala. | Cinemática |
WARPTOROOM |
Cambiar de sala | Lleva al jugador a otra sala. | Id de sala |
WALKTO |
Caminar a un punto | Lleva caminando a tu personaje activo hasta un punto de la sala. | Destino, Orientación (opc), Velocidad (dur=ms | speed=px/s), Opciones |
CAMERAPAN |
Mover cámara | Mueve la cámara a un punto o a un hotspot durante una cinemática, y la deja ahí hasta que termina. | Destino, Velocidad (dur=ms | speed=px/s), Opciones |
HIDEPLAYER |
Ocultar jugador | Saca de pantalla el sprite del jugador; sigue caminando y recibiendo clics. | (ninguno: token a secas) |
SHOWPLAYER |
Mostrar jugador | Vuelve a mostrar en pantalla el sprite del jugador. | (ninguno: token a secas) |
OPENGUI |
Abrir GUI | Abre un panel en pantalla. | Id de GUI, Opciones |
CLOSEGUI |
Cerrar GUI | Cierra el panel en pantalla abierto, o sólo el que nombres. | Id de GUI (vacío = el activo) |
OPENCOIN |
Abrir moneda | Hace aparecer la moneda de verbos sobre un hotspot. | Id de hotspot |
CLOSECOIN |
Cerrar moneda | Descarta la moneda de verbos. | (ninguno: token a secas) |
HIDEGUI |
Ocultar GUI | Oculta de la vista todos los paneles en pantalla. | (ninguno: token a secas) |
SHOWGUI |
Mostrar GUI | Vuelve a mostrar los paneles en pantalla. | (ninguno: token a secas) |
SETLANG |
Cambiar idioma | Cambia el idioma del juego. | Idioma |
SWITCHCHAR |
Cambiar a personaje | Cambia qué personaje controlas. | Personaje objetivo |
SWITCHPARTYSLOT |
Cambiar a slot | Pasa el control al miembro del party en ese slot. | Slot de party (desde 1) |
SAVEGAME |
Guardar partida | Guarda la partida en una ranura. | Ranura (0-5) |
LOADGAME |
Cargar partida | Carga la partida desde una ranura. | Ranura (0-5) |
SOUND |
Reproducir sonido | Reproduce un efecto de sonido puntual. | Id de sonido |
STOPSOUND |
Detener sonido | Detiene un efecto de sonido que sigue sonando. Es la forma de terminar uno puesto en bucle. | Id de sonido |
VOICE |
Reproducir voz | Reproduce una línea de voz con subtítulo. | Línea de voz |
MUSIC |
Reproducir música | Cambia la música de fondo. | Id de música |
STOPMUSIC |
Detener música | Funde y detiene la música de fondo. | (ninguno: token a secas) |
AMBIENCE |
Reproducir ambiente | Inicia un sonido de fondo en bucle, como un ventilador. | Id de ambiente |
STOPAMBIENCE |
Detener ambiente | Detiene un sonido de fondo en bucle. | Id de ambiente |
TOGGLEHOTSPOTAUDIO |
Alternar audio | Enciende o apaga el sonido en bucle de un objeto, como una radio. | Id de hotspot |
SETHOTSPOTOPEN |
Abrir o cerrar | Pone una puerta o recipiente en abierto o cerrado. | Estado de apertura |
SETHOTSPOTLOCK |
Poner o quitar llave | Cierra o abre con llave una puerta con la tarjeta Cerradura. Cerrarla con llave no la cierra. | Estado de la cerradura |
PLAYSCENE |
Reproducir escena | Reproduce un clip cinemático a pantalla completa. | Escena |
REWINDSCENE |
Rebobinar escena | Reproduce un clip cinemático al revés, como un rebobinado. | Escena (|speed=N) |
PLAYARCADE |
Iniciar arcade | Lanza un minijuego para jugar. | Etapa de arcade |
PLAYFX |
Reproducir FX | Reproduce un efecto visual, como un destello o un temblor. | Nombre del FX, Parámetros (clave=valor|…) |
ADJUST |
Filtro de pantalla | Aplica un filtro de ambiente a pantalla completa, como noche o sepia. | Preset de FX de pantalla, Parámetros del preset |
TOGGLEROOMFX |
Alternar FX de sala | Enciende o apaga un tipo de efecto de sala en la sala actual: lluvia, niebla, glitch… | Tipo de FX de sala |
SETROOMFX |
Ajustar FX de sala | Mueve las perillas de un tipo de efecto de sala en runtime: densidad de lluvia, color de niebla, intervalos del rayo… Fusiona al repetirse y sobrevive al guardado. | Tipo de FX de sala, Parámetros del FX |
UNLOCK |
Desbloquear logro | Concede un logro al jugador. | Logro |
NEXTCHAPTER |
Siguiente capítulo | Lleva la historia al siguiente capítulo. | (ninguno: token a secas) |
NEXTBLOCK |
Siguiente bloque | Lleva la historia a la siguiente parte. | (ninguno: token a secas) |
GOTOBLOCK |
Ir a bloque | Salta la historia a la parte que elijas: de vuelta al principio, o a una pantalla extra. | Bloque |
RESETGAME |
Reiniciar partida | Borra la partida en curso para que la siguiente arranque limpia. Los logros se conservan. | (ninguno: token a secas) |
WAIT |
Esperar segundos | Retiene el resto de la cadena unos segundos, para que una línea dé tiempo a leerse. | Segundos |
PARTYCOMMIT |
Confirmar party | Confirma el party elegido y continúa. | (ninguno: token a secas) |
WAITFOR |
Esperar evento | Retiene el resto de la cadena hasta que termina la línea en pantalla, sin adivinar segundos. | Evento |
QUITGAME |
Salir del juego | Cierra el juego, como corresponde en cada plataforma (ventana o app). | (ninguno: token a secas) |
SHOWTEXT |
Mostrar texto | Muestra texto libre en cualquier parte de la pantalla. | Pos, Color, Tamaño px, Fuente, Dur seg (0=fijo), Id (opc), Texto ({flag}) |
CLEARTEXT |
Quitar texto | Quita el texto en pantalla que mostraste antes. | Id (vacío=todos) |
Notas#
- En español, el editor muestra cada token con su nombre al lado (Activar flag · SETFLAG),
el mismo que ves en la columna En el editor de la tabla de arriba. Ese nombre es solo una
etiqueta: lo que se guarda en tu proyecto es el ID, que es literal y siempre en inglés
(
SETFLAG,GIVEITEM…). Por eso un proyecto se abre igual con el editor en cualquier idioma, y renombrar un ID rompería cada regla guardada. GIVEITEM:<item>|<personaje>es el único token que mueve un item entre personajes jugables.- Algunos tokens no llevan argumento y serializan como verbo a secas (p. ej.
INVENTORY_UP). - La mayoría de los argumentos son obligatorios, y dejar uno vacío es un error de autoría
del que el motor no puede avisarte:
SETFLAG:sin nombre activa el flag vacío, uno que ninguna condición puede leer jamás. Validar, en el Editor de Puzzles, ahora detecta justo eso y bloquea Guardar. Otros argumentos son opcionales a propósito y pueden ir vacíos: unPICKUPsin objeto otorga el id del propio hotspot,CLEARTEXTsin id limpia todos los textos en pantalla,SETVALsin valor vacía el buffer, y las colas despeed/options/ volumen-paneo de un token se pueden omitir por completo.
Cerrar un paso, un trigger o una luz con un puzzle#
Tres pares de tokens (WALKABLE_ON/WALKABLE_OFF, REGION_ON/REGION_OFF y
LIGHTZONE_ON/LIGHTZONE_OFF) prenden y apagan en runtime las áreas caminables, las
regiones de pisada y las zonas de luz de una sala, para que un puzzle pueda abrir un paso, armar
un trigger o prender una lámpara. Los tres comparten la misma forma: TOKEN:<id> apunta a esa
entidad en la sala actual, y TOKEN:<id>|<roomId> llega hasta otra sala (una palanca en
una sala que abre un paso, arma un trigger o prende una luz en otro lado completamente distinto).
WALKABLE_ON/WALKABLE_OFFactivan o desactivan un área caminable (un piso donde un personaje realmente puede pararse), como un pasadizo secreto que queda cerrado hasta que se acciona una palanca.REGION_ON/REGION_OFFactivan o desactivan una región de pisada: un trigger que un puzzle necesita armar o desarmar, para que una trampa no dispare antes de su cinemática, o para que un beat de introducción no vuelva a dispararse una vez que ya se reprodujo.LIGHTZONE_ON/LIGHTZONE_OFFprenden o apagan una zona de luz: una lámpara, un spotlight, un área con tinte. Es solo visual: las zonas de luz están desacopladas a propósito de las áreas caminables, así que apagar una nunca mueve el piso, y apagar un área caminable nunca atenúa una luz.
Los tres son overrides, no toggles de un solo uso: el estado se recuerda por sala, tiene prioridad sobre lo que el autor de la sala haya puesto como default, y se reaplica cada vez que el jugador vuelve a entrar a esa sala, así que un paso que abrió un puzzle, un trigger que armó, o una lámpara que apagó, queda exactamente como el jugador lo dejó a través de un cambio de sala, y sobrevive a guardar/cargar.
Para leer ese estado de vuelta, están los predicados equivalentes (isWalkableOn,
isRegionOn e isLightZoneOn) en la condición de una regla de puzzle; la lista
completa de predicados está en la página del Editor de Puzzles.
Cerrar y abrir con llave una puerta#
SETHOTSPOTLOCK:<estado> cierra o abre con llave una puerta que tiene la tarjeta
Cerradura del Editor de Salas, con <estado> igual a locked, unlocked o toggle. Sin id apunta
al hotspot dueño de la reacción, así que renombrar la puerta nunca lo rompe;
SETHOTSPOTLOCK:<hotspot>|<estado> llega a otra puerta de la misma sala. Como los tokens de
arriba, es un override: se recuerda por sala y sobrevive a guardar/cargar.
Cerrar con llave no cierra la puerta, y quitarle la llave no la abre: encadena
SETHOTSPOTOPEN al lado cuando quieras las dos cosas. Una puerta que vuelve a cerrarse con llave
sola después de un rato es un timer más SETHOTSPOTOPEN:closed y SETHOTSPOTLOCK:locked. Para
leer el estado está isLocked. La llave en sí casi nunca necesita el token: la tarjeta ya
desbloquea la puerta cuando el jugador usa el objeto correcto con ella.
Prender y apagar la luz de la sala#
TOGGLELIGHT cambia la sala entera entre iluminada y a oscuras: la llave de luz junto a
la puerta, el fusible que el jugador baja. Es el velo de oscuridad de toda la sala, así que es
otra cosa que LIGHTZONE_ON/LIGHTZONE_OFF, que prenden o apagan el resplandor de una
lámpara concreta dentro de una sala.
Qué tan oscura queda la sala lo decide su propio ajuste Oscuridad al apagarse. Qué tan
rápido llega ahí lo decide Duración del fundido, el fader justo debajo. Ponlo en 0
y la luz cambia al instante, como una llave de verdad. Ese es el ajuste al que conviene ir
primero: se autora una vez y todas las llaves de esa sala lo obedecen.
Cuando una llave puntual necesita comportarse distinto (una lámpara que se funde despacio mientras el resto de la sala cambia de golpe), dale al token su propia duración:
TOGGLELIGHT:dur=0 instantáneo, diga lo que diga la sala
TOGGLELIGHT:dur=1500 un fundido lento de un segundo y medio
TOGGLELIGHT sin opinión: usa el fader de la sala
Déjalo en blanco y decide la sala, que es lo que vas a querer casi siempre.
Caminar a un personaje hasta un punto#
Dos tokens caminan a un personaje hasta un punto del piso desde cualquier regla, reacción o
vigía, sin abrir una cinemática. WALKTO:<x>|<y> camina al jugador activo;
NPCWALKTO:<personaje>|<x>|<y> camina a un personaje concreto y lo deja parado ahí.
Ambos usan el mismo pathfinding de click-para-caminar que usa el jugador, así que el personaje
esquiva obstáculos y se detiene igual que con un click normal.
Ambos comparten la misma cola opcional, y sus partes pueden ir en cualquier orden:
- facing: una dirección (
up/down/left/right) que se aplica al llegar; mientras camina, el personaje mira hacia donde se mueve. - speed:
speed=<píxeles-por-segundo>odur=<milisegundos>para el trayecto; es un override temporal, y la velocidad normal del personaje se restaura al llegar. - block: agrega
block(oblock=true) para congelar el juego hasta que el personaje llegue, como espera un paso de cinemática. Sin eso, la caminata es fire-and-forget: el juego queda interactivo y un click del jugador puede re-apuntar al personaje activo a mitad de camino.
Por ejemplo, WALKTO:120|340|left|block camina al jugador a (120, 340), retiene el input hasta
que llega, y lo pone mirando a la izquierda al arribar.
Mover la cámara en una cinemática#
Por defecto la cámara sigue al jugador. Dentro de una cinemática, CAMERAPAN:<x>|<y> la lleva
a otro lado (a la puerta que se abre al otro lado de la sala, al NPC que acaba de entrar)
y espera a que llegue antes de pasar al siguiente paso. Después la cámara se queda en ese
punto el resto de la cinemática, así que sigue mirando la puerta mientras alguien habla de ella.
Cuando la cinemática termina, vuelve sola a seguir al jugador; no hace falta ningún token para
deshacerlo.
La cola opcional tiene la misma forma que la de WALKTO, y sus partes pueden ir en cualquier orden:
- at:
at=<hotspot>apunta a un hotspot en lugar de las coordenadas, y gana sobre ellas.at=playerlleva la cámara a donde está parado el jugador antes de que termine la cinemática; si el jugador se mueve después, la cámara no lo sigue hasta que la cinemática acaba. En el editor, las dos opciones están en el selector Hotspot, junto a 🎮 Jugador (activo). - speed:
speed=<píxeles-por-segundo>odur=<milisegundos>para el trayecto; si pones las dos, ganadur. Sin ninguna, la cámara viaja a 800 píxeles por segundo, así que un salto corto es rápido y uno largo tarda más. - easing: la curva del movimiento:
linear,inQuad,outQuad,inOutQuad(la de por defecto: arranca y frena suave),outBack,outElasticuoutBounce.
Dos paneos seguidos se encadenan sin saltos: cada uno arranca desde donde esté la cámara, no desde el jugador. La cámara nunca enseña más allá de los bordes de la sala (un punto pegado a una pared se detiene donde lo hacen los límites de cámara de la sala) y si el jugador mantiene presionado para saltar la cinemática, la cámara aterriza directo en su destino, igual que una caminata bloqueante se teletransporta.
Por ejemplo, CAMERAPAN:1500|400|dur=1200, una línea SAY y después CAMERAPAN:0|0|at=player
mira hacia el otro lado de la sala durante poco más de un segundo, deja que se diga la línea
y regresa al jugador antes de que la cinemática siga.
Dónde funciona: sólo dentro de una cinemática. Agrégalo como paso de token en el Editor de Cinemáticas. En una reacción de hotspot, una opción de diálogo o una regla de puzzle no hace nada: pon el paneo en una cinemática y dispárala con
CUTSCENE:<id>. Si el destino no se puede resolver (un hotspot que no está en la sala), el paso se salta en lugar de trabar la cinemática.
Pausar entre tokens#
Todos los tokens de una cadena se disparan en el mismo instante, que casi siempre es lo que
quieres, salvo cuando uno de ellos necesita un momento para verse. El caso más claro es una
línea hablada: SAY pone la línea en pantalla y le pasa el turno al token siguiente de
inmediato, así que un SAY seguido de un token que cambia la escena hace que la línea nunca
llegue a leerse.
WAIT:<segundos> retiene el resto de la cadena y después sigue donde había quedado. Pon uno
entre la línea y el salto (SAY:…, WAIT:2, GOTOBLOCK:creditos) y la línea se lleva sus dos
segundos antes de que el juego avance.
WAITFOR:say hace lo mismo sin que tengas que poner un número: retiene la cadena hasta que
la línea que está en pantalla desaparece, hable quien hable (el jugador, un NPC o el narrador).
Escribe SAY:…, WAITFOR:say, GOTOBLOCK:creditos y el salto cae justo cuando cae la burbuja,
aunque después reescribas la línea, o le grabes una voz y dejes que el subtítulo se estire al
audio. Úsalo siempre que el número que ibas a escribir en WAIT sea en realidad "lo que tarde esa
línea". Si no hay nada dicho, sigue de largo.
El juego se queda quieto mientras espera: el input queda bloqueado, igual que durante una cinemática, y el jugador no puede saltárselo, así que conviene que las esperas sean cortas y deliberadas. Pausar sigue funcionando, y una espera en pausa deja de correr hasta que el jugador despausa.
Dónde funciona: en cualquier cadena de tokens del juego en vivo (reacciones de hotspot y de personaje, interacciones de ítems, botones del panel, opciones de diálogo, eventos de entrada a la sala y regiones que se pisan). Las líneas de tiempo de escena no aceptan ninguno de los dos, y el editor de escenas no los ofrece: una escena ya es una línea de tiempo, así que sus tiempos se espacian moviendo los beats, no con un token. Las cinemáticas tienen su propio paso Wait que hace lo mismo. Cada espera tiene un tope de 60 segundos, y el juego se niega a guardar mientras haya una corriendo.
Sacar al jugador de pantalla#
A veces el personaje se tiene que ir sin ir a ningún lado: meterse en un portal justo antes de los créditos, salirse del cuadro para que una escena corra sobre la sala vacía, o simplemente no estar en una toma que arruinaría.
HIDEPLAYER saca de pantalla el sprite del jugador, y SHOWPLAYER lo devuelve. Los dos
son tokens a secas, sin argumento. El beat del portal se lee tal como lo dirías en voz alta:
WALKTO:588|816|up|block, HIDEPLAYER, WAIT:1, PLAYSCENE:creditos.
Dos cosas que conviene saber antes de usarlo:
- Solo esconde; no apaga al personaje. Un jugador oculto sigue caminando, sigue chocando y
sigue recibiendo clics. Si además quieres que se quede quieto, dilo con los tokens que ya hacen
eso (
WALKTOconblock, o una cinemática). Lo que sí acompaña al sprite es su sombra y su reflejo en un charco o un espejo. Se van con él, y una línea hablada deja de dibujar la burbuja en vez de colgarla de una cabeza invisible. Para una voz sin nadie en pantalla, usaNARRATE. - Se recuerda. El estado oculto entra al save, así que quien deja el juego a mitad de un puzzle y vuelve encuentra la sala tal como la dejó. Empezar una partida nueva siempre devuelve al jugador, así que no hay forma de dejar a nadie invisible para siempre.
Mostrar un panel (o la moneda de verbos) desde una cinemática#
Una cinemática esconde el HUD, pero un panel que la cinemática misma abre está para verse:
OPENGUI:<gui> en un paso de cinemática dibuja y anima su modal sobre la sala. Es un
escaparate: la cinemática conserva el input, así que un click sigue avanzando la línea en vez
de presionar un botón. Ponle detrás un WAIT y un cierre, y un recorrido guiado puede mostrar el
inventario o un teclado en vez de sólo hablar de ellos.
CLOSEGUI acepta un objetivo opcional. A secas cierra el modal que esté abierto, lo que hace
cualquier botón de cerrar. CLOSEGUI:<gui> cierra sólo si ese es el que está en pantalla, así
una cinemática ordena su propio panel sin arrebatarle un menú que el jugador abrió mientras tanto.
La moneda de verbos emergente no se puede direccionar por id (se construye fresca en cada
click, donde clickeaste), así que tiene su propio par. OPENCOIN:<hotspot> hace aparecer la
moneda real centrada en el arte de ese hotspot (no en el punto de piso al que caminarías) y
CLOSECOIN la descarta. Dentro de una cinemática es un escaparate como cualquier panel; fuera
de una queda armada, y elegir un verbo ejecuta la acción normal sobre ese hotspot.
Reestilizar un elemento del panel al vuelo#
MODIFYWIDGET:<gui>.<widget> sobrescribe el aspecto de un solo widget de GUI en runtime:
su color de fondo y opacidad, su borde (ancho y color), o su texto, sin tocar la GUI autorada.
Como los otros tokens de panel es un overlay en tiempo de dibujo, así que el descriptor y el
layout propios de la GUI nunca se mutan; pero a diferencia de un efecto visual puntual es
durable: el override viaja con save/load, así que un cambio de color o texto puede
representar estado recordado (un panel de palanca que se pone verde una vez que la tiraste). La
cola son pares clave=valor en cualquier orden, cada uno opcional, y disparar el token de nuevo
fusiona sobre el mismo override en vez de reemplazarlo. reset=true limpia el override y
restaura el aspecto autorado del widget. El override de texto tiene prioridad sobre las otras
fuentes de texto de una etiqueta y acepta un literal o un #lid (una entrada de la tabla de
strings, para que siga localizándose).
El objetivo no se limita a tus propios paneles. La barra HUD principal del juego y la moneda
de verbos emergente son GUIs normales por debajo, así que MODIFYWIDGET:mainBar.verb-look|bg=#a00
tiñe un botón de verbo y MODIFYWIDGET:verbCoin.coin-talk|text=Grita re-etiqueta una celda de
la moneda. Los editores sugieren ambos bajo sus ids reales (mainBar.*, verbCoin.*),
defaults del engine incluidos cuando el proyecto no autoró los suyos. La moneda se reconstruye
fresca en cada click, pero el override se re-aplica en cada apertura; como todo override de
widget son durables, viajan en save/load, y reset=true devuelve el widget al look default
configurado del juego. Un caveat: un botón dibujado con arte de sprite ignora los
overrides de fondo, borde y texto; aplican a botones de etiqueta de texto (la barra clásica
de nueve verbos y la moneda default son todos texto).
Cuando un panel ya lleva encima un puñado de estos, devolverlo a su sitio con un reset=true
por widget se vuelve tedioso, así que omite el widget y el reset cubre el panel entero:
MODIFYWIDGET:<gui>|reset=true tira de una sola vez todos los overrides de esa GUI. Lo mismo
está disponible en el momento en que el panel se abre, como OPENGUI:<gui>|reset=true, para el
caso común de "esta pantalla debería salir siempre limpia". Ambos son opt-in a propósito:
como los overrides de widget son durables y pueden hacer las veces de estado recordado, un
OPENGUI a secas nunca los limpia; si no, un panel que recuerda algo lo olvidaría en cada
apertura.
Reestilizar el sprite de un hotspot al vuelo#
SETHOTSPOTFX:<hotspot> es la misma idea apuntada a la room: sobrescribe los FX visuales
de un hotspot con sprite (sombra, glow, blur, opacidad y contorno de silueta) encima de lo
que autoró el room editor, sin tocar el archivo de la room. La cola son pares clave=valor en
cualquier orden (glowsize=8|glowcolor=#f0a03c, blur=3, opacity=0.5,
strokew=2|strokecolor=#fff), cada uno opcional; disparar el token de nuevo fusiona sobre
el mismo override, y es durable a través de save/load: un amuleto que conserva su glow una
vez activado, un retrato que sigue desvanecido después de la sesión de espiritismo.
reset=true restaura el aspecto autorado.
Las claves de sombra eligen entre los dos estilos del panel Sprite FX del room editor:
shadow=basic con shdx/shdy/shblur/shcolor/shalpha para una drop shadow simple, o
shadow=cast con shangle/shlen/shsoft/shalpha para la sombra de silueta real que
proyectan los personajes. Omite los números del cast y hereda la iluminación de la room, así
la sombra del hotspot apunta hacia donde apuntan las de todos los demás. shadow=off mata la
sombra por completo, la autorada incluida. Los tamaños en cero apagan el efecto (glowsize=0,
strokew=0, blur=0), igual que los knobs "0 = off" del editor. Solo los hotspots con
sprite aceptan FX: no hay nada que contornear ni hacer brillar en un polígono sin sprite.
Mover las perillas de un efecto de sala desde una regla#
SETROOMFX:<type> hace por los efectos ambientales de la sala lo que SETHOTSPOTFX hace
por un sprite: sobrescribe las perillas de todos los efectos de ese tipo en la sala actual
(lluvia, nieve, niebla, nubes, estrellas, glow, viñeta, lavado de color, relámpago, rayo,
spotlight, fuego, chorro de agua, glitch, blur) encima de lo que autoraste en el
panel de Efectos de Sala, sin tocar el archivo de la sala. La cola
es la misma lista clave=valor en cualquier orden, y las claves son los propios knobs del panel
para ese tipo (SETROOMFX:rain|count=400|speed=1.6|opacity=0.6,
SETROOMFX:fog|color=#5a6070|opacity=0.5, SETROOMFX:lightning|mingap=800|maxgap=2500),
acotadas a los mismos rangos que el panel permite; el editor arma el selector a partir del tipo
que eliges, así que no hay ninguna clave que recordar de memoria. Dispararlo de nuevo
fusiona (la tormenta que arrecia en tres pasos son tres tokens, cada uno tocando solo lo
que cambia) y el override es durable a través de save/load, así que el aguacero que estalló
al final del Acto 1 sigue cayendo después de recargar. reset=true tira el override y la sala
vuelve a su aspecto autorado.
Dos cosas que a propósito no hace. Solo mueve perillas que ya existen: un efecto que la sala no
tiene no deja nada que sobrescribir (agrégalo en el panel y contrólalo con una condición o con
TOGGLEROOMFX), y la geometría, las semillas y los assets de imagen siguen siendo asunto del
panel. Y el cambio es instantáneo: una subida lenta es un WAIT entre tokens, igual que
cualquier otra cadena marca su propio ritmo.
Animar un hotspot, no solo un personaje#
El grupo Animaciones reúne los tres tokens que controlan la reproducción, y los tres son
polimórficos: el mismo verbo apunta a un personaje o a la animación de objeto de un
hotspot, así que hay un solo STOPANIM que recordar en vez de uno por cada tipo de cosa.
STARTANIM:<target> reanuda lo que el target estuviera reproduciendo y
STOPANIM:<target> lo congela donde está: sin saltar de frame, que es justo la ergonomía
que SETANIMFRAME no tiene. Apuntado a un personaje, STARTANIM acepta además un clip y un
facing opcionales (STARTANIM:bernard|talk|left) para sostener una pose. Apuntado a un
hotspot, el clip opcional cambia qué animación toca el prop:
STARTANIM:grandfatherclock|clock_chime pasa al reloj de su loop de tictac a su campanada, y
un STARTANIM:grandfatherclock posterior sin clip lo devuelve a lo que autoró la room. El
facing es solo de personajes: un prop no tiene facing, y el editor esconde el campo en cuanto
eliges un hotspot.
El selector de clip sigue a tu target: elige un personaje y te ofrece los clips de ese
personaje por su nombre corto (talk, blink); elige un hotspot y te ofrece las animaciones
de objeto y room del proyecto por su nombre completo (grandfatherclock_ticktock). Si
nombras un clip que no existe, el prop vuelve a su animación autorada en lugar de congelarse:
un prop congelado se ve idéntico a un token que no hizo nada.
El cambio es solo de runtime: se olvida cuando el jugador sale de la room, y no se guarda. El archivo de la room sigue siendo la verdad sobre qué toca un hotspot por defecto.
Pulsar, girar y desvanecer un prop sin el editor de animaciones#
Un clip de FX horneado casi siempre ya loopea limpio desde el frame 0. Que además creciera al abrirse, pulsara mientras espera o se desvaneciera obligaba a hornear más clips, y nada de eso es animación: una rampa es una curva.
SETHOTSPOTMOTION:<hotspot>|clave=valor|… anima tres canales del sprite de un hotspot en
runtime: escala (claves sc*), rotación (rot*, grados sobre el centro del sprite) y
opacidad (op*, 0 a 1), cada uno con su propia rampa, curva y modo de bucle. La cola no
tiene orden y toda clave es opcional; un token reemplaza solo los canales que nombra, así que un
pulse de escala sigue corriendo mientras un token posterior retoca la opacidad.
SETHOTSPOTMOTION:cofre|scfrom=1|scto=1.15|scdur=400|scease=inOutQuad|scloop=pingpong
SETHOTSPOTMOTION:molino|rotspeed=180
SETHOTSPOTMOTION:fantasma|opfrom=0.4|opto=1|opdur=900|oploop=pingpong
Cada canal toma la misma familia de claves, con prefijo sc / rot / op:
Xfrom=/Xto=: los extremos de la rampa. DejaXfromvacío y la rampa arranca desde donde el canal ya esté, así que dos tokens seguidos encadenan sin saltos; escríbelo y el sprite salta ahí primero: la forma del pop-in (scfrom=0.2|scto=1).Xfromsolo, sinXto, es un set instantáneo.Xloop=loop|pingpong: sin esta clave es un one-shot que corre una vez y se congela en el destino.loopcorta en seco al inicio en cada ciclo;pingpongtoca la rampa de ida y después espejada de vuelta, que es lo que hace que un pulse desacelere en los dos extremos; usainOutQuadpara pulses.Xdur=<ms>,Xspeed=<unidades/s>y (solo escala)scframes=<n>: cuánto dura cada tramo.framessuma el tiempo real de cada frame del clip que el hotspot está tocando en ese momento, así que si re-tempeas la animación la rampa la sigue.durle gana aframesyframesaspeed.Xease=<curva>: la misma lista de curvas que usaMOVEHOTSPOT.outBackse pasa un poquito antes de asentarse, que es lo que hace que un portal se lea abriéndose y no inflándose.Xstop=true: mata ese canal y congela su valor donde está (exactamente lo que deja un one-shot terminado). Para volver a reposo con suavizado, manda un one-shot:scto=1|scdur=300.origin=bottom: mantiene el pie del sprite clavado mientras escala. Por defecto escala respecto del ancla, que está bien para lo que flota y mal para lo que se apoya en el piso, que parecería hundirse y después subir. Si el hotspot tiene un Pivote del sprite puesto en el Room Editor, manda el pivote: la escala se ancla ahí yorigin=bottomno suma nada.reset=true: los tres canales apagados y de vuelta a reposo (escala 1, rotación 0, opacidad 1).
Dos canales tienen su truco. rotspeed= sin rotto= gira para siempre a esa velocidad en
grados por segundo, la forma de hacer que un ventilador o un molino giren en su lugar. Y el
canal de opacidad multiplica la opacidad durable de SETHOTSPOTFX en vez de pisarla: la del
FX es el look base del prop ("este fantasma es 50% translúcido"), la del motion es una modulación
animada encima, y cuando el canal se resetea el look base vuelve intacto.
Una escala de 1 es el tamaño autorado del sprite, y 0 es válido: significa "todavía no está",
que es el punto de partida natural de un pop-in.
Dos cosas que conviene saber. La escala es uniforme: para un achatado permanente y no
uniforme está el panel de distorsión de sprite del editor de rooms, que es autorado y no animado.
Y el polígono del hotspot no escala: un portal dibujado al 20% se sigue pudiendo clickear en
todo su polígono autorado, la misma generosidad que ya rige con un sprite rotado. Igual que
MOVEHOTSPOT, el motion es solo de runtime: se olvida al cambiar de room y no se guarda. Para un
pulse que sobreviva la re-entrada, re-dispáralo desde una regla de entrada a la room, o dale al
hotspot un Movimiento (la sección siguiente), que corre solo y sí se guarda.
Arrancar y detener el Movimiento de un hotspot#
Un Movimiento (la tarjeta Movimiento del Room Editor) es un bucle de keyframes que un hotspot reproduce solo desde que el jugador entra a la sala: un reflector que barre, un letrero que respira, un globo que flota. Dos tokens lo manejan desde una regla.
PLAYMOTION:<hotspot> lo arranca. Nombra un movimiento para reproducir otro
(PLAYMOTION:reflector|reflector_rapido), y agrega phase=<ms>, speed=<x> o
mirror=true|false para pisar lo que dice la tarjeta; lo que no pongas sale de la tarjeta.
Nunca hace saltar al hotspot: si el movimiento es el que ya tiene, sigue desde donde está, así un
reflector congelado retoma a mitad del barrido. Un movimiento distinto arranca desde el
principio, y también uno de modo Una vez que ya terminó: una campana vuelve a sonar en cada
clic.
STOPMOTION:<hotspot> lo congela en la pose en la que esté, y un PLAYMOTION después lo
retoma. STOPMOTION:<hotspot>|reset=true en cambio lo regresa al reposo (el sprite como lo
autoraste) y lo deja detenido, aunque la tarjeta diga Arranca solo.
PLAYMOTION:reflector_izq
PLAYMOTION:letrero|speed=2
STOPMOTION:reflector_izq
STOPMOTION:letrero|reset=true
A diferencia de SETHOTSPOTMOTION, un Movimiento sí se guarda: en qué punto de su ciclo va y
si está corriendo o detenido. Sal de la sala y vuelve, o carga una partida, y el reflector sigue
donde se quedó. Los dos tokens actúan sobre los hotspots de la sala en la que está el jugador.
Los dos pueden convivir en un hotspot. Un canal de SETHOTSPOTMOTION (el giro, por ejemplo) le
gana a la pista del mismo nombre del Movimiento hasta que SETHOTSPOTMOTION:<hotspot>|reset=true
se la devuelve o el jugador sale de la sala; un MOVEHOTSPOT con spin= hace lo mismo con el
giro. Las pistas de desplazamiento del Movimiento, en cambio, se suman a MOVEHOTSPOT, así un
prop que flota sigue meciéndose mientras se desliza.
Tomar el control del cursor#
SETCURSOR sobrescribe el cursor del mouse en sí: qué cursor (y con él, qué animación)
se dibuja, en qué frame queda congelado, dónde se posa y si se muestra siquiera. La cola son
pares clave=valor en cualquier orden, todos opcionales; disparar el token de nuevo
mergea en el mismo override, y reset=true restaura el comportamiento normal. A
diferencia de sus dos hermanos de arriba, este override deliberadamente no se guarda: un
cursor forzado es presentación, no estado de puzzle, y se limpia solo en cuanto la cinemática
termina o se salta.
cursor=<id>fuerza un cursor del set del proyecto; le gana al ítem armado del inventario, al verbo seleccionado y a cualquier override de hover.frame=<n>congela un cursor animado en un frame; sin él, la animación corre normal.x=<px>|y=<px>clava el cursor en una posición del canvas (manda los dos); sin ellos sigue al mouse real.visible=showmantiene el cursor dibujado durante una cinemática, donde normalmente se oculta. El input sigue bloqueado (el jugador no puede clickear nada), así que el cursor es puramente tuyo para manejarlo desde los tokens de la propia cinemática: una "mano fantasma" de tutorial mostrando dónde clickear, un ojo siguiendo la escena.visible=hidees el espejo: oculta el cursor sprite fuera de cinemáticas.
Un beat de cinemática: SETCURSOR:cursor=eye|visible=show|x=640|y=360 muestra el cursor de ojo
clavado en el centro mientras la escena corre; en cuanto la cinemática termina, todo vuelve a
la normalidad solo.
Cambiar el aspecto de toda la pantalla#
ADJUST:<preset> pone un filtro sobre la imagen terminada: sala, personajes, paneles y
cursor juntos. Es la forma de jugar un flashback en blanco y negro, un envenenamiento en verde
enfermizo o un recuerdo como un sueño suave. ADJUST:none lo limpia. El aspecto se guarda,
así que un capítulo que arranca en blanco y negro sigue en blanco y negro después de que el
jugador cierre el juego y vuelva.
Todos los presets se pueden dosificar con una cola clave=valor en cualquier orden, y el
editor muestra las perillas del preset que elegiste, cada una parada en el valor propio de ese
preset. Si no tocas una perilla, el preset se ve exactamente como siempre; si mueves una,
cambia sólo esa parte. Los presets tonales (todos menos pixelate) comparten un mismo juego
de perillas:
brightness,contrast,saturate: el tono, con1como "sin tocar".nightarranca oscuro y un poco lavado;ADJUST:night|brightness=0.8es la misma noche, menos profunda.hue=<grados>yblur=<px>: gira los colores o suaviza la imagen entera.tint=<color>,alpha=<0..1>,blend=multiply|screen|overlay|normal: el baño de color encima: qué color, qué tan fuerte, cómo se mezcla.warm,night,poisonydreamtraen uno; los demás lo toman en cuanto nombras un tinte.scan=<0..1>ygap=<px>: las scanlines y qué tan separadas corren.crtlas trae encendidas; cualquier preset puede tomarlas prestadas.vignette=<0..1>: los bordes oscurecidos que usadream.strength=<0..1>: cuánto del aspecto completo se mezcla sobre la imagen sin tocar.0es una forma limpia de apagarlo por un momento sin perder el resto.
El gris, el sepia y el negativo son la identidad de grayscale, sepia e invert: no tienen
perilla, porque un sepia que no es sepia es simplemente otro preset. Cambiar de preset en el
editor reinicia la cola: el baño de night no significa nada para crt.
pixelate tiene su propio juego de perillas:
block=<px>: de qué tamaño es cada cuadrado. La perilla principal.levels=<n>: cuántos tonos por canal de color sobreviven. Bajarlo es lo que hace que se lea como pixel art y no como una foto borrosa con cuadraditos.strength=<0..1>: cuánto del efecto se mezcla sobre la imagen sin tocar.0es una forma limpia de apagar el aspecto por un momento sin perder el resto de la configuración.dither=none|b4|b8: dispersa los saltos de color para que las zonas planas se rompan en un patrón. Necesita los niveles bajos para hacer algo.down=area|nearest: area promedia y da un resultado más suave, nearest deja los bordes duros.scope=world|all: hasta dónde llegan los bloques. world se detiene en el borde de la sala y deja la interfaz nítida (barra de verbos, diálogos, globos, texto en pantalla, cursor). all se lleva también los paneles y sus letras, que es lo que quieres cuando la interfaz ilegible es el efecto. A diferencia de los presets tonales de arriba, que siempre cubren la pantalla entera, el pixelado es el único al que se le puede decir dónde parar.
Todas son opcionales, y lo que no pongas conserva lo que el proyecto ya usa. Así que si el
juego ya está pixelado desde Hub Config, ADJUST:pixelate|block=12 sube los bloques por un
momento y deja la paleta como está; ADJUST:none lo devuelve al aspecto propio del proyecto,
no apaga el pixelado. La cola se guarda junto con el aspecto, así que una noche dosificada
sobrevive a cerrar y volver igual que la noche a secas.
Un bloque más grande también es más barato aquí: el efecto trabaja sobre una copia más chica de la imagen, así que llevarlo más lejos pide menos, no más.
Trabajar con valores y contadores#
SETVAL, APPENDVAL y ADDVAL arman un valor dentro de un flag (una combinación, un
número marcado, un contador) que luego revisas con la condición valueEquals o compare.
SETVAL:<flag>|<valor>escribe un valor exacto y reemplaza lo que hubiera. Si dejas el valor vacío (SETVAL:codigo|) borra el flag: ese es el botón Borrar de un teclado numérico.APPENDVAL:<flag>|<texto>|<max>agrega texto al final de un flag, poco a poco: es lo que dispara cada botón de dígito de un teclado numérico. Elmaxopcional limita cuánto puede crecer el valor, así una cerradura de cuatro dígitos se queda en cuatro por más que el jugador machaque una tecla: las pulsaciones de más simplemente no hacen nada. Si no ponesmax, el valor crece sin límite. Una caja de texto donde el jugador escribe tiene su propio ajuste de largo máximo;maxes la misma idea para la entrada por botones, que nunca pasa por el camino del tecleo.ADDVAL:<flag>|<n>suma un número a un contador: el "+1" universal.npuede ser negativo para descontar (ADDVAL:intentos|-1). El resultado se guarda como texto, así quecompareyvalueEqualslo siguen leyendo; un flag ausente o no numérico cuenta como0.RANDVAL:<flag>|<min>|<max>escribe un número entero aleatorio entreminymax(inclusive) en un flag; luego ramificas concompare/valueEquals(p. ej. "di una de tres frases", una tirada de dado, un 30% de probabilidad). El azar es a propósito un efecto, nunca una condición: se tira una sola vez cuando dispara el paso, así que un vigía que lee el flag se mantiene estable. El stream está sembrado y se guarda, así que una partida es reproducible y un save/load no cambia un resultado ya tirado.
Afinar tokens de audio: volumen, paneo y loop con crossfade#
MUSIC, AMBIENCE, SOUND y VOICE aceptan una cola opcional de pares clave=valor
después de su argumento principal, para ajustar un cue puntual sin tocar la mezcla general.
Los editores lo muestran como mini-knobs, pero por debajo es texto de token normal.
|vol=<0-100>|pan=<-100..100>fija el volumen y la posición estéreo de ese cue. El volumen multiplica sobre el volumen propio del jugador (enVOICEtambién multiplica el slider de volumen de voz del jugador); el pan mueve izquierda/derecha, con0centrado. Si omites alguno, queda en su valor por defecto (volumen completo, centrado): unSOUND:door_creaka secas sigue funcionando exactamente igual que antes.|xfade=<s>|xfadeat=<s>: (solo enMUSICyAMBIENCE) convierte el loop de una pista en un crossfade suave en vez de saltar de golpe al inicio.xfadeson los segundos que se superponen la copia saliente y la entrante;xfadeates el punto donde arranca ese crossfade, y de paso define cada cuánto repite la pista (una pista de 60 segundos conxfadeat=52repite cada 52 segundos). Úsalo en música o ambiente cuyo final no cierra limpio por sí solo.
Un ejemplo con todo junto: MUSIC:theme|vol=80|pan=0|xfade=1.5|xfadeat=52.
Hacer que un efecto de sonido loopee, y pararlo#
SOUND es puntual: suena una vez y se recoge solo. Para que un sample concreto loopee no se
cambia el token; se marca el sample en el Editor de Audio, que
guarda los puntos y el modo de loop en projects/<id>/audio.json. A partir de ahí todo SOUND
que reproduzca ese sample loopea, y STOPSOUND:<id> es lo que lo termina. STOPSOUND para
todas las copias vivas de ese id, one-shots incluidos, así que también sirve como "corta ese ruido
ya" para un sample largo que aún no terminó.
Dos cosas a saber antes de apoyarte en esto: un SOUND en bucle arrancado por una regla no
sobrevive a un guardar/cargar (el ambiente de sala sí, porque la sala lo vuelve a disparar al
entrar), y un sonido de fondo que pertenece a un lugar suele expresarse mejor como AMBIENCE,
que va por clave, se superpone y se restaura solo.
Interpolación de texto en lo hablado / en pantalla#
SAY, NPCSAY, NARRATE, SETSENTENCE y SHOWTEXT sustituyen los tokens {nombreDeFlag} de su texto
con los valores actuales de los flags al mostrarse (p. ej. SAY:Tienes {coins} monedas muestra
Tienes 5 monedas). Un flag ausente queda como texto vacío (nunca un error); solo se tocan
los nombres {...} hechos de letras, dígitos y _, así que las llaves sueltas y los montos
tipo $9.99 quedan intactos. Combínalo con ADDVAL/RANDVAL para narrar contadores y
tiradas en vivo.
Algunos tokens escriben un nombre en un flag justo para esto. CATCHTARGET elige uno
de varios personajes candidatos (por priority o random) y guarda el id elegido en un
flag de salida (por defecto caughtChar), que luego consumes por interpolación, p. ej.
SWITCHCHAR:{caughtChar} o FOLLOW:monster|{caughtChar} en la misma cinemática.