Comportamientos y automatización
La mayoría de los Mundos en la plataforma no usan reglas en absoluto, y eso está bien. Las reglas son una herramienta minoritaria: los creadores las usan cuando tienen un puñado de trabajos muy específicos donde no se puede confiar en que la IA sea consistente.
Esta guía te enseña cuándo vale la pena usar reglas, para qué son buenas y cómo construirlas. Para lo básico sobre disparadores, condiciones y acciones, consulta Para empezar: Automatización.
Cuándo vale la pena usar reglas (y cuándo no)
El error más común que cometen los nuevos creadores con las reglas es la sobreingeniería. Ven la sección de Comportamientos en el editor y piensan "debería automatizar todo". Luego construyen 30 reglas que replican lo que las Entradas bien escritas ya manejan, y el Mundo se siente mecánico en lugar de vivo.
Las reglas son para precisión. Resuelven problemas donde la inconsistencia de la IA rompería la experiencia:
| Problema | Por qué las reglas lo resuelven |
|---|---|
| "El jugador debe recibir una notificación exactamente con afinidad 75" | La IA no sabe el número exacto; el motor sí |
| "Cambia a música de batalla al entrar en la arena" | La IA olvida las Directivas de audio la mitad del tiempo |
| "Aumenta el hambre cada 3 turnos" | La IA a veces lo hará en el turno 2, a veces lo olvidará por completo |
| "La pantalla de muerte debe aparecer en el instante en que HP llega a 0" | No puedes permitirte que la IA se equivoque en esto ni una sola vez |
Las Entradas son para narrativa. Resuelven problemas donde la flexibilidad y el matiz importan:
| Problema | Por qué las Entradas lo resuelven |
|---|---|
| "Cambia cómo habla un NPC a medida que crece la confianza" | Las Entradas condicionales dan a la IA guía de comportamiento, no guiones rígidos |
| "Revela lore cuando el jugador visita una ubicación" | Las Entradas activadas por palabras clave fluyen naturalmente al contexto de la IA |
| "Cambia el tono al entrar en una mazmorra" | Una Entrada describe atmósfera; una regla solo puede inyectar una Directiva |
La regla general: si estás escribiendo un párrafo de texto narrativo en una acción inject-directive de una regla, probablemente deberías haber escrito una Entrada en su lugar. Las reglas son interruptores y diales. Las Entradas son el contenido real.
Cómo Sakura Season usa ambos
Sakura Season es el mejor ejemplo de reglas y Entradas trabajando juntas. Tiene 9 reglas: todas haciendo el mismo trabajo básico de vigilar umbrales de afinidad.
Las Entradas describen cómo se comporta cada heroína en diferentes niveles de afinidad (cautelosa, calentándose, vulnerable). Las reglas manejan los momentos precisos: una notificación a los 25 ("Parece que has llamado la atención de Hina..."), una Directiva inyectada a los 50 diciéndole a la IA que escriba un comportamiento contradictorio de empujar y atraer, y un toast de logro a los 75 que activa el arco de confesión.
Las Entradas hacen el trabajo pesado. Las reglas solo aseguran que los hitos aterricen exactamente en el momento correcto.
Tipos de disparador en profundidad
Los disparadores determinan cuándo el motor comprueba este Comportamiento. Piénsalos como diferentes tipos de despertadores.
Los que realmente usarás
Variable cruza umbral (variable-crossed) — El disparador más popular, y por buena razón. Se dispara en el momento exacto en que una Variable numérica cruza una línea específica.
Esto es diferente de comprobar "¿está la salud por debajo de 20?" cada turno. El disparador crossed se dispara una vez, cuando el valor realmente transita a través del umbral. Si la salud ya está en 10 y permanece en 10, no se disparará de nuevo.
Estableces tres cosas: qué Variable, qué umbral y en qué dirección (rises-above o drops-below).
Wandering Diary usa tres de estos para implementar el cambio de región: cuando la Variable distance cruza 50, el jugador entra en el condado; en 150, las montañas; en 200, la capital provincial. Cada umbral establece una nueva Variable region y muestra una notificación.
Estado cambiado (state-change) — El disparador más amplio. Se dispara cada vez que cualquier Variable cambia. Combínalo con condiciones para acotar lo que te importa.
Usa esto cuando quieras reaccionar a que una Variable tenga un valor específico, no a que cruce un umbral. Por ejemplo: "cada vez que cambie cualquier estado, comprueba si location es igual a dark_forest, y si es así, reproduce música tenebrosa". La regla vuelve a comprobar cada vez que algo cambia, lo que significa que detecta el cambio de location sin importar qué lo causó.
Cada N turnos (turn-count) — Se dispara en un horario. Configura everyNTurns: 3 y se dispara en los turnos 3, 6, 9, 12... O configura atTurn: 10 para un disparo único en un turno específico.
Bueno para mecánicas de supervivencia (hambre subiendo), eventos de ritmo (una advertencia en el turno 20 de que se está acabando el tiempo) o recordatorios periódicos.
Cada turno (every-turn) — Se dispara después de cada intercambio jugador/IA. Úsalo con moderación: una regla que se ejecuta cada turno y hace algo visible cada turno molestará a los jugadores. Mejor usada con condiciones que filtran la mayoría de los turnos, o para contabilidad silenciosa en segundo plano.
Inicio de sesión (session-start) — Se dispara una vez cuando comienza una nueva conversación. Buena para inicialización: establecer valores iniciales, mostrar un mensaje de bienvenida o reproducir música de apertura.
Disparadores menos comunes
Palabra clave del jugador (keyword) — Se dispara cuando el mensaje del jugador contiene una palabra específica. Las mismas opciones de coincidencia que las palabras clave del Lorebook: coincidencia opcional de palabra completa, regex (cuando la palabra clave es /.../flags) y filtrado por palabras clave secundarias (AND_ANY, AND_ALL, NOT_ANY, NOT_ALL).
Palabra clave de IA (ai-keyword) — Lo mismo que arriba, pero escanea la respuesta de la IA en su lugar. Útil para reaccionar a cosas que la IA escribe, como "cuando la IA menciona 'comienza la batalla', cambia la música".
Manual (manual) — Solo se dispara cuando se llama explícitamente por un Componente personalizado mediante api.executeAction(). Esto es para Mundos con UI personalizada donde una pulsación de botón activa la lógica del juego.
Acción (action) — Se dispara cuando se presiona un botón de acción personalizado específico.
Programar por cadencia
No hay temporizador de reloj en la sección Behaviors: el ritmo se mide en turnos, no en segundos. Para cualquier cosa periódica, usa el disparador Cada N turnos: se dispara en los turnos N, 2N, 3N… (ponlo en 5 y se dispara en los turnos 5, 10, 15). Eso cubre los pulsos de supervivencia, los costes de mantenimiento y los recordatorios recurrentes: las tareas que de otro modo haría un temporizador.
Condiciones: el chequeo ONLY IF
Las reglas usan el mismo sistema de condiciones que las Entradas: los mismos 7 operadores (eq, neq, gt, gte, lt, lte, contains) con la misma lógica combinatoria All/Any. Consulta Cómo escribir buenas entradas: Entradas dirigidas por estado para la referencia completa de operadores.
Si dejas las condiciones vacías, la regla se dispara cada vez que el disparador coincide.
Comparar una variable con otra
Por defecto, una condición compara una variable con un número o palabra fijos: «afinidad ≥ 50». Pero el lado derecho tiene un interruptor constante / variable. Cámbialo a variable y la condición comparará dos variables en vivo:
afinidad > recelo— se dispara solo mientras el afecto supera a la cautelaoro >= precio— un chequeo de «¿puede permitírselo?» sin codificar el precio
Recurre a esto cuando el propio umbral no es fijo y se mueve con el juego. Dos detalles más del mismo sistema:
- El lado izquierdo acepta una ruta con puntos hacia una variable JSON:
inventario.oro >= 100. containscoincide con la pertenencia a un arreglo además de con subcadenas, así quebanderas contains "conocí-al-rey"es verdadero cuandobanderases una lista que incluye ese elemento.
Tipos de acción: lo que pueden hacer las reglas
Una vez que pasan las condiciones, el motor ejecuta las acciones en secuencia. Una sola regla puede tener múltiples acciones, y aquí es donde las reglas se vuelven poderosas.
Modificar Variable
Cambia directamente una Variable del estado del juego. Nueve operaciones: set, add, subtract, multiply, toggle, append, merge, push, delete.
Las más comunes: set (sobrescribir un valor), add/subtract (incrementar/decrementar números) y toggle (invertir booleanos).
El operando tiene el mismo interruptor constante / variable. Cámbialo a variable para alimentar la operación con el valor actual de otra variable: salud -= fuerza, puntuación += combo, cartera += ingreso_diario. El motor lee la variable referenciada en el momento en que la regla se dispara, de modo que la cuenta siempre usa valores en vivo en lugar de un número que tendrías que mantener sincronizado a mano.
Inyectar Directiva
Añade una instrucción temporal al prompt de la IA. Esta es posiblemente la acción más poderosa porque cambia lo que se le dice a la IA que haga, lo que cambia toda la dirección narrativa.
Le das un ID único (para que puedas eliminarla después), el texto de instrucción y dónde colocarla en el prompt (top, before_char, after_char, bottom, depth o auto).
Por defecto, las Directivas inyectadas persisten a través de los turnos (persistent: true). También puedes establecer una duration para que expire automáticamente después de N turnos.
Sakura Season usa esto a los 50 de afinidad para cada heroína. Cuando Rin alcanza los 50, la regla inyecta: "La afinidad de Rin ha entrado en una etapa más profunda. El hielo se está agrietando. Dirá cosas innecesarias en las reuniones del comité, compartirá inconscientemente sus pensamientos sobre un libro en la azotea y luego de repente se quedará en silencio." La IA lee esto cada turno a partir de ese punto, cambiando su retrato naturalmente.
Eliminar Directiva
Elimina una Directiva previamente inyectada. Referenciala por el mismo directiveId que le diste.
Enviar contexto
Envía un mensaje invisible a la IA y desencadena una respuesta. El jugador no ve este mensaje, pero la IA lo lee y responde en consecuencia. Útil para forzar momentos narrativos: "¡Aparece un monstruo! Describe un encuentro aleatorio."
Activar Entrada
Habilita o deshabilita una Entrada del Lorebook por su ID. Una regla que activa toggle-entry con enabled: true puede revelar lore oculto en el momento adecuado.
Activar regla
Habilita o deshabilita otro Comportamiento. Esta es la clave para construir cadenas: la regla A se activa cuando entras en la mazmorra y activa la regla B (encuentros de monstruos cada turno). La regla C se activa cuando sales de la mazmorra y desactiva la regla B.
Notificar al jugador
Muestra una notificación toast. Cuatro estilos:
| Estilo | Apariencia | Mejor para |
|---|---|---|
info | Azul | Actualizaciones neutrales ("Has entrado en una nueva región") |
achievement | Dorado | Hitos y desbloqueos |
warning | Amarillo | Precaución ("Tus suministros se están agotando") |
danger | Rojo | Alertas críticas ("Has caído") |
Reproducir audio
Controla música de fondo y efectos de sonido. Toma un trackId (que coincide con una pista en tu configuración de audio), una action (play, stop, crossfade, volume) y ajustes opcionales de volume y fadeDuration.
Patrones reales de Mundos publicados
Umbrales de afinidad (Sakura Season)
El caso de uso clásico. Sakura Season tiene 9 reglas a través de tres heroínas, cada una siguiendo el mismo patrón de 3 niveles:
En afinidad 25 — Una notificación informativa sutil. "Parece que has llamado la atención de Hina..." más establece story_phase a "daily". Una sola vez (maxFireCount: 1).
En afinidad 50 — Una notificación de logro. "Hina está empezando a verte como alguien especial..." más inyecta una Directiva describiendo su comportamiento contradictorio de empujar y atraer, más establece story_phase a "deepening". Una sola vez.
En afinidad 75 — El disparador del clímax. Notificación de logro, Directiva para arreglar la escena de confesión, story_phase establecida a "climax". Una sola vez.
Nota el patrón: cada regla usa variable-crossed + rises-above, se dispara exactamente una vez y combina una notificación al jugador con una Directiva a la IA y una actualización de Variable de fase. Tres tipos de acción trabajando juntos para crear un único momento significativo.
Cambio de región (Wandering Diary)
Wandering Diary rastrea una Variable distance que aumenta a medida que el jugador viaja. Tres reglas variable-crossed cambian la Variable region en las distancias 50, 150 y 200, cada una mostrando una notificación: "Finalmente has dejado la naturaleza salvaje y entrado en territorio del condado", "Pasado el condado, una cordillera interminable se extiende ante ti", "El contorno de la capital provincial aparece en la distancia".
Esto crea una progresión de viaje sin costuras sin que la IA tenga que rastrear distancias o recordar los límites de las regiones.
Disparadores de muerte
Tanto Wandering Diary como las plantillas de kit de supervivencia usan el mismo patrón: variable-crossed en salud cayendo por debajo de 1, con una notificación estilo danger. Los detalles clave:
- Priority 100 — la muerte debe evaluarse antes que cualquier otra cosa
- maxFireCount: 1 — la notificación de muerte solo se dispara una vez (aunque la mayoría de los Mundos no se molestan con esto ya que no puedes ir por debajo de cero dos veces)
- A veces emparejado con un
inject-directivediciéndole a la IA que describa el fallecimiento del personaje
Cadenas de activación de mazmorra
Un patrón común en Mundos de RPG: la regla A escucha por entrar a una mazmorra (disparador de palabra clave o state-change + condición), luego usa toggle-rule para activar la regla B (encuentros de monstruos en every-turn con un cooldown). Una tercera regla escucha por salir y desactiva la regla B.
Esto mantiene los encuentros de monstruos limitados a áreas específicas sin que la IA tenga que rastrear si el jugador está en una mazmorra.
Cómo procesa el motor las reglas
Después de cada mensaje del jugador, respuesta de IA o cambio de estado, el motor recorre todos los Comportamientos en una sola pasada: ordena por prioridad (la más alta primero), luego comprueba cada uno en secuencia. Para cada Comportamiento, pregunta: ¿está habilitado? ¿Coincide el tipo de disparador con este evento? ¿Coinciden los detalles del disparador (palabra clave encontrada, umbral cruzado, etc.)? ¿Pasan las condiciones? ¿Sigue dentro del cooldown? ¿Ha excedido su conteo máximo de disparos? Si todo pasa, las acciones se recopilan. Después de comprobar todos los Comportamientos, las acciones recopiladas se ejecutan en orden. Si esas acciones modifican Variables, el motor puede reevaluar (con un límite de profundidad para evitar bucles infinitos).
Todo el proceso es invisible para el jugador: solo ve los resultados: una notificación, un cambio de música, una actualización de Variable.
Controlar cuándo se disparan las reglas
Prioridad
Los números más altos se evalúan primero. Cuando varias reglas se disparan al mismo tiempo, la prioridad decide el orden.
Guía práctica: chequeos de muerte en 100, hitos de historia en 50, efectos ambientales en 10-20. No necesitas ser preciso: solo asegúrate de que las reglas críticas se ejecuten antes que las cosas-bueno-de-tener.
Cooldown
Después de dispararse, la regla duerme este número de turnos. Una advertencia de hambre con cooldownTurns: 5 no molestará al jugador cada turno: espera al menos 5 turnos entre advertencias.
Conteo máximo de disparos
La regla puede dispararse como máximo este número de veces, jamás. maxFireCount: 1 la convierte en un evento de una sola vez: perfecto para logros, tutoriales de primera vez e hitos de la historia.
Estado habilitado/deshabilitado
Las reglas comienzan habilitadas por defecto, pero puedes establecer enabled: false para crear reglas latentes que solo se activan cuando otra regla las activa mediante toggle-rule. Esta es la base del patrón de activación de mazmorra descrito arriba.
Errores comunes
Sobreingeniería con reglas cuando bastarían las Entradas. Si te encuentras escribiendo texto narrativo largo dentro de acciones inject-directive, probablemente quieras Entradas condicionales en su lugar. Las reglas inyectan una o dos oraciones de guía. Las Entradas proporcionan párrafos de contexto.
Usar state-change cuando quieres decir variable-crossed. state-change se dispara cada vez que cualquier Variable cambia. Si quieres "notifícame cuando la salud baje de 20", usa variable-crossed: se dispara una vez en el punto de cruce. state-change + una condición que comprueba health < 20 se dispararía en cada cambio de estado subsecuente mientras la salud esté por debajo de 20, lo que probablemente no es lo que quieres.
Olvidar cooldowns en disparadores frecuentes. Una regla every-turn sin un cooldown se dispara cada turno. Si muestra una notificación, tu jugador recibe spam. Siempre pregunta: "¿Con qué frecuencia debería ver esto realmente el jugador?"
Construir 30 reglas para un Mundo que necesita 3. Mira Sakura Season: 9 reglas, 3 heroínas, 3 umbrales cada una. Ese es un Mundo con mecánicas profundas. La mayoría de los Mundos necesitan menos, y muchos populares se envían con cero. Empieza con Entradas y Variables. Añade reglas solo cuando atrapes a la IA siendo inconsistente sobre algo específico.
No probar los valores de umbral. Si tu regla se dispara en health < 10 pero tu IA nunca obtiene realmente la salud tan baja (porque tus Entradas le dicen que "describa al jugador como herido cuando la salud está por debajo de 30"), la regla nunca se disparará. Asegúrate de que tus umbrales se alineen con cómo funciona realmente tu Mundo.
Consulta también
- Cómo escribir buenas entradas — las Entradas condicionales suelen encajar mejor que las reglas para cambios narrativos
- Diseño de audio — la acción
play-audioy cuándo usar reglas vs. Directivas de IA para audio - Diseñando el estado del juego — diseñando las Variables a las que reaccionan tus reglas
Esquema completo de reglas y tubería de evaluación → Especificación del mundo: Reglas y reacciones
