Ignitor Docs ← getignitor.com
🇺🇸 EN 🇪🇸 ES

Timers y watchers#

Algunos de los mejores momentos de una aventura gráfica pasan con retraso: el jugador toca un timbre, se va a pasear, y diez segundos después alguien en el piso de arriba murmura "¡el timbre!" y baja a abrir — esté donde esté el jugador para entonces. Ignitor construye esto con dos piezas pequeñas, timers y watchers, y esta guía te enseña a cablearlas en un ciclo que funciona siempre, no solo la primera vez.

Las tres piezas, en palabras llanas#

  • Un timer es un temporizador de cocina. Le das cuerda con un nombre y unos segundos (STARTTIMER:doorbell_timer|10), te alejas, y suena solo. No pasa nada cuando suena — se queda ahí, sonado, hasta que algo lo revise.
  • Un watcher es una trampa de alambre. Vigila una condición en cada frame ("¿ya sonó doorbell_timer?") y en el momento en que la condición es verdadera dispara sus efectos — una sola vez. Después de disparar queda desarmado: no volverá a disparar hasta que algo lo re-arme.
  • Un behaviour es una rutina que un personaje ejecuta por su cuenta — camina aquí, abre aquello, pasea por este pasillo — sin que el jugador intervenga.

Encadena las tres y tienes la escena del timbre: el click arranca el timer, el timer activa la trampa, el watcher lanza la reacción.

El ciclo, dibujado#

Este es el montaje real de nuestro demo tributo a Maniac Mansion — Weird Ed, arriba en su cuarto, reaccionando al timbre de la puerta principal:

El ciclo del timbre: timer, watcher, cutscene, re-arme Diagrama de flujo de un ciclo repetible. El jugador toca el timbre, que arranca un timer de diez segundos. Al expirar, un watcher dispara una sola vez y queda desarmado. Sus efectos limpian el timer y corren una cutscene donde Weird Ed va hacia la puerta. El último paso de la cutscene re-arma el watcher con CLEARWATCHER, cerrando el ciclo para el siguiente timbrazo. El jugador toca el timbre una reacción "use" del hotspot STARTTIMER:doorbell_timer|10 El timer cuenta en el fondo el juego sigue normal mientras tanto doorbell_timer · 10 s expira a los 10 segundos El watcher dispara — una sola vez y queda desarmado when: timerExpired · doorbell_timer corren sus efectos Cutscene: Ed va hacia la puerta limpia el timer y corre su rutina CLEARTIMER + CUTSCENE + BEHAVIOUR el último paso de la cutscene Re-armar el watcher cierra el ciclo CLEARWATCHER:weird_ed_reacts_to_doorbell re-armado — listo para el siguiente timbrazo
Una vuelta completa al ciclo del timbre. La flecha morada de retorno es lo que lo hace repetible.

El ejemplo, pieza por pieza#

Tres editores, una pieza cada uno:

1. El hotspot del timbre (Room Editor) — la reacción use toca un campaneo y le da cuerda al timer. Eso es todo lo que el hotspot sabe; no tiene idea de que Ed existe.

SOUND:assets/audio/sfx/doorbell_chime.ogg
STARTTIMER:doorbell_timer|10

2. El watcher (Puzzle Editor, pestaña 🌐 Global Watchers) — global, porque lo más probable es que el jugador ya se haya ido a otra sala cuando el timer suene, y un watcher global escucha en todas partes:

id:   weird_ed_reacts_to_doorbell
when: timerExpired · doorbell_timer
do:   CLEARTIMER:doorbell_timer
      CUTSCENE:weird_ed_hears_doorbell

3. La cutscene (Cutscene Editor, bucket 🌐 Global) — Ed reacciona, camina hasta su puerta y devuelve el control. Ahí entra su behaviour: una rutina que lo lleva escaleras abajo, sala por sala, hasta abrir la puerta principal. El paso final es el que hace todo repetible:

SWITCHCHAR:weird_ed
SAY:weird_ed|"¡Ah! ¡El timbre!"
WAIT:1
SAY:weird_ed|"¡A lo mejor es mi paquete!"
WALKNPCTO:weird_ed|1348|358
SWITCHCHAR:{_prevChar}
BEHAVIOUR:weird_ed|weird_ed_notices_doorbell
CLEARWATCHER:weird_ed_reacts_to_doorbell

Toca el timbre otra vez cuando Ed ya volvió a su cuarto, y la misma mecha de diez segundos arde hacia la misma reacción. Cada vuelta del ciclo se reinicia sola.

Las dos reglas de oro#

Las dos nos mordieron construyendo el demo, así que son sabiduría ganada a pulso:

Un timer expirado se queda "expirado" hasta que lo limpies. Al sonar, el timer no desaparece — se queda en su estado de sonado, y una condición timerExpired sigue respondiendo para siempre. Haz que CLEARTIMER sea el primer efecto del watcher que lo escucha, o la condición de ese watcher queda verdadera permanentemente.

Un watcher no puede re-armarse desde sus propios efectos. El motor marca al watcher como disparado después de correr su lista de efectos, así que un CLEARWATCHER apuntándose a sí mismo dentro de su propio do des-marca algo que todavía no está marcado — un no-op, y el watcher queda muerto. Pon el CLEARWATCHER al final de la cutscene (o cadena de efectos) que el watcher lanzó. Efecto secundario bonito: mientras la reacción sigue corriendo, el watcher sigue desarmado, así que machacar el timbre no puede apilar cinco Eds.

Un timer como puerta de cooldown#

Un timer no es solo la mecha de un watcher — también puedes preguntar si sigue corriendo y usar eso como puerta. Dos condiciones leen el mismo timer desde extremos opuestos:

  • timerExpired — verdadera solo después de que el timer sonó (y se queda verdadera hasta que lo limpies con CLEARTIMER, según la primera regla de oro de arriba).
  • timerRunning — verdadera mientras el timer sigue contando, y falsa en el instante en que se acaba — o antes de que siquiera arranque.

Eso convierte un cooldown en una sola línea. Arranca un timer como ventana de "enfriamiento", luego protege la acción con timerRunning:

  • Mientras timerRunning → no hagas nada (o di "todavía no"). La ventana sigue abierta.
  • De lo contrario → haz la cosa, y arranca el timer de nuevo. Eso reabre la ventana y bloquea una repetición hasta que se consuma.

Sin flag compañero, sin watcher que se re-arme — el timer mismo es la memoria de "hecho hace poco". Usa timerExpired cuando quieras un disparo diferido de una sola vez (el timbre); usa timerRunning cuando quieras suprimir algo durante una ventana — un botón que no se puede machacar, un NPC que no repite una línea por un rato.

Cuando algo no dispara#

  • "Mi watcher solo funciona una vez." Disparó y se desarmó solo — así es el diseño. Agrega un CLEARWATCHER:<id> al final de la reacción que lanza (ver regla dos).
  • "Mi reacción se repite cada frame." El watcher se está re-armando mientras su condición sigue siendo verdadera — casi siempre un timerExpired sin CLEARTIMER. Limpia el timer en los efectos del propio watcher (ver regla uno).
  • "El segundo timbrazo no hace nada." El timer está arrancando de nuevo (STARTTIMER siempre lo rebobina) — el que sigue desarmado es el watcher. Revisa que el paso CLEARWATCHER de verdad corra: debe estar en un camino que la reacción siempre alcance, como el último paso de la cutscene.
  • "El timer no suena nunca." Revisa que su STARTTIMER lleve de verdad una duración. Segundos arranca vacío y nada te obliga a rellenarlo, así que es fácil dejar un timer con nombre y sin número. Un STARTTIMER sin duración se ignora: no arranca ningún timer, así que timerExpired nunca se vuelve cierto y nada de lo que cuelga de él corre.

A dónde ir después#

  • Puzzle Editor — donde se autorean watchers y global watchers, con el catálogo completo de condiciones.
  • Cutscene Editor — el autoreo de las listas de pasos que lanzan reacciones como esta.
  • Effect tokens — la tabla de referencia de STARTTIMER, CLEARTIMER, CLEARWATCHER, BEHAVIOUR y todo lo demás que ofrece el widget de efectos.