Ciclo Día-Noche
El tiempo avanza solo: cada 3 turnos pasa de mañana a mediodía, de mediodía a tarde, de tarde a noche y otra vez a mañana. Cada momento del día tiene su propio ambiente para la IA y su propia música, y el jugador siempre ve qué hora es. Se monta con comportamientos, lore condicional y reglas de música, sin código.
Lo que vas a construir
- Cuatro momentos del día: Morning → Noon → Evening → Night → Morning (mañana, mediodía, tarde y noche)
- El tiempo avanza cada 3 turnos, sin que el jugador tenga que hacer nada
- Cambia el ambiente: cada momento tiene una entrada de lore que describe la luz, la temperatura y lo que hace la gente, y a la IA solo le llega la del momento actual
- Cambia la música: pájaros por la mañana, grillos por la noche, con fundido de una a otra
- La hora está en pantalla para el jugador
Cómo funciona
Termina el turno 3
→ Se dispara el comportamiento "Morning → Noon" (Cada N turnos: 3, SOLO SI Time of day es Morning)
→ Pone Time of day en Noon y le dice a la IA que ha pasado el tiempo
→ Ahora le llega a la IA la entrada de lore "Noon" (condición: Time of day es Noon); la de "Morning" ya no
→ La regla de música de Noon coincide y la pista de Noon entra con un fundido
→ Time of day, en la pantalla del jugador, pone NoonCuando pasa el tiempo solo cambia una cosa: la variable. El lore y la música vigilan la variable, así que la siguen solos.
Paso a paso
Paso 1: Crea la variable
En la fila Puedes añadir, abajo en la carta, pulsa + Variable.
| Campo | Valor |
|---|---|
| Nombre | Time of day |
| Tipo | Texto |
| Valor inicial | Morning |
| Reglas de comportamiento | El momento del día: Morning (mañana), Noon (mediodía), Evening (tarde) o Night (noche). Describe la luz, el tiempo y la gente de acuerdo con él. |
Abre Qué hace la IA con ella y pon Acceso de la IA en Solo lectura para la IA. El reloj lo mueven los comportamientos; la IA solo lo lee.
Pulsa Mostrar en la pantalla del jugador para que la hora aparezca en la página del chat.
Una partida nueva siempre empieza desde el Valor inicial, así que el ciclo arranca por la mañana cada vez; no hace falta un comportamiento que lo reinicie.
Paso 2: Escribe cuatro entradas, una por momento
Añade una entrada de lore por cada momento del día. Luego arrastra la variable Time of day sobre cada entrada, haz clic en la línea y pon su condición: Time of day es Morning (y así con las demás). Cada entrada pasa al bloque de lore condicional y solo le llega a la IA mientras se cumple su condición.
Morning
[Momento del día: mañana]
Es primera hora de la mañana. Llévalo a las descripciones de las escenas:
- Luz suave desde el este; el aire está fresco
- El rocío de la hierba y de los pétalos brilla con la luz
- Pájaros en las ramas, un gallo a lo lejos
- La gente se está levantando; las tiendas abren una a una
- El ambiente es tranquilo y esperanzadoNoon
[Momento del día: mediodía]
Es mediodía. Llévalo a las descripciones de las escenas:
- El sol está justo encima; el suelo deslumbra de tan blanco
- El aire es pesado; lo que está lejos tiembla con el calor
- Casi todo el mundo descansa a la sombra; las calles están más tranquilas que por la mañana
- Las tabernas y las casas de comidas están a rebosar, y sale olor a comida
- El ambiente es lento y sofocanteEvening
[Momento del día: tarde]
Está atardeciendo. Llévalo a las descripciones de las escenas:
- El sol poniente tiñe el cielo de naranja y morado, con nubes ribeteadas de oro
- Los edificios y los árboles proyectan sombras largas
- Los pájaros vuelven a sus nidos; sube humo de cocina de los tejados
- La gente termina de trabajar y vuelve a casa; los niños se persiguen por la calle
- El ambiente es cálido, un poco melancólicoNight
[Momento del día: noche]
Es noche cerrada. Llévalo a las descripciones de las escenas:
- La luna y las estrellas son la única luz natural, y lo platean todo
- Casi todas las ventanas están a oscuras; aquí y allá todavía arde una vela
- Una brisa fresca trae el canto de grillos y ranas
- Las calles están casi vacías; pasa un sereno con una antorcha
- Algo puede estar esperando en la oscuridad: animales, ladrones o algo peor
- El ambiente es silencioso y alertaSi a la IA le llegaran las cuatro a la vez, no sabría cuál seguir. Las condiciones hacen que solo le llegue la del momento actual.
Paso 3: Crea los comportamientos que mueven el tiempo
Un comportamiento por cada paso del ciclo. En la fila Puedes añadir, pulsa + Comportamiento.
Morning → Noon
| Parte | Ajuste |
|---|---|
| Cuándo se dispara | Cada N turnos: 3 |
| SOLO SI | Time of day es Morning |
| Efectos | Cambiar variable: Time of day a Noon |
Decirle a la IA: Ha pasado el tiempo de la mañana al mediodía. Deja que el cambio se note con naturalidad en tu próxima descripción. |
Noon → Evening, Evening → Night, Night → Morning
Igual, con el siguiente par de valores:
| Comportamiento | SOLO SI | Cambiar variable | Decirle a la IA |
|---|---|---|---|
| Noon → Evening | Time of day es Noon | Time of day a Evening | Ha pasado el tiempo del mediodía a la tarde. |
| Evening → Night | Time of day es Evening | Time of day a Night | Ha pasado el tiempo de la tarde a la noche. |
| Night → Morning | Time of day es Night | Time of day a Morning | Se acaba la noche y empieza un nuevo día. |
Los cuatro se disparan en los mismos turnos (3, 6, 9…), pero el SOLO SI de cada uno nombra un momento distinto. El motor comprueba los cuatro con la hora que había antes de que se ejecutara ninguno, así que cada vez se dispara exactamente uno.
Decirle a la IA le pasa a la IA una frase, solo para su siguiente respuesta. El trabajo duradero lo hace la entrada de lore; esta frase solo hace que la transición se lea con naturalidad.
Paso 4 (opcional): Música para cada momento
Añade cuatro pistas de BGM en la página Audio (si la carta todavía no tiene audio, pulsa + Audio en la fila Puedes añadir): Morning, Noon, Evening y Night, cada una con Reproducir en bucle activado y 2 segundos de Fundido de entrada (s) y Fundido de salida (s).
Después abre Configuración de BGM → BGM condicional → Agregar regla condicional, una vez por momento:
| Campo | Valor |
|---|---|
| CUANDO | Condición de variable: Time of day es Morning |
| Reproducir | Morning |
| Fundido de entrada (s) / Fundido de salida (s) | 3 / 3 |
| Detener BGM anterior | Activado |
Cuando cambia la hora, la regla anterior deja de coincidir y la nueva pone su pista: una se apaga mientras la otra entra. Hay más sobre las reglas en la Guía de diseño de audio.
Paso 5 (opcional): Un reloj en pantalla
Mostrar en la pantalla del jugador (Paso 1) ya pone la hora en la página del chat. Si quieres algo con más personalidad, usa la interfaz del jugador:
- La plantilla HUD de aventura (en Pantalla completa) muestra la ubicación actual, el día, la hora y dos barras. Añade sus propias variables para el día y el momento del día; bórralas y apunta su texto a tu Time of day, o usa sus variables en lugar de las tuyas
- O añade una parte Texto a la página de la conversación y usa Insertar el valor de una variable… para mostrar
{Time of day}. Añade partes Imagen para un sol y una luna, cada una con Cuándo mostrar → Cuando una variable cumple (Time of day esNightpara la luna)
Paso 6: Pruébalo
Pulsa Jugar en la barra superior.
- Los dos primeros turnos es Morning
- Después del turno 3 es Noon, y la siguiente respuesta de la IA menciona el calor o el sol en lo alto
- Tres turnos más: Evening. Tres más: Night. Si añadiste música, cambia cada vez
- Tres más: otra vez Morning
Este turno, a la derecha de la prueba, muestra qué comportamiento se disparó y qué entradas de lore recibió la IA.
Si algo falla:
| Síntoma | Causa probable | Solución |
|---|---|---|
| La hora nunca cambia | Los valores del SOLO SI de los comportamientos no coinciden con el Valor inicial | Morning tiene que escribirse igual en la variable y en la condición |
| La hora salta dos momentos de golpe | Dos comportamientos tienen el mismo valor en SOLO SI | Cada comportamiento comprueba un momento distinto |
| El ambiente no cambia | La condición de una entrada está mal, o la entrada sigue en el bloque que se envía siempre | Revisa la condición de cada entrada y Cuándo lo ve la IA |
| La IA cambia la hora ella sola | Acceso de la IA sigue en La IA puede leer y escribir | Ponlo en Solo lectura para la IA |
| Suenan dos pistas a la vez | Detener BGM anterior está desactivado | Actívalo en la regla de cada momento |
Variante: momentos de distinta duración
Cada N turnos siempre usa el mismo intervalo. Si quieres días largos y noches cortas (por ejemplo, 4 turnos por cada momento de día y 2 para la noche), cuenta tú los turnos:
- Añade una variable de Número Turnos de este momento, con valor inicial
0y Acceso de la IA en Solo motor (oculta para la IA) - Añade un comportamiento: Cada turno, con el efecto Cambiar variable Turnos de este momento más
1 - Cambia el Cuándo se dispara de los cuatro comportamientos de la hora a Una variable cruza un umbral sobre Turnos de este momento, Sube por encima de:
3para Morning → Noon, Noon → Evening y Evening → Night, y1para Night → Morning. Deja el SOLO SI de cada uno sobre Time of day - Añade a cada uno de los cuatro Cambiar variable Turnos de este momento a
0, para que la cuenta vuelva a empezar en el momento nuevo
Tiempo real en lugar de turnos
Cada N segundos se dispara con un reloj mientras el jugador tiene la partida abierta. Con 300 en los cuatro comportamientos, pasa un día cada 20 minutos de juego, escriba el jugador o no.
Ruta con código propio: una etiqueta con la hora en el último mensaje
Si escribes tu propia interfaz, lee la variable en el código de la interfaz. Todo lo de arriba se queda igual.
Paneles → Código de frontend → abre index.tsx y sustituye el return <Chat /> que viene por defecto:
export default function MyWorld() {
const api = useYumina();
const timeOfDay = String(api.variables["Time of day"] || "Morning");
const timeConfig = {
"Morning": { icon: "☀️", color: "#fbbf24", bg: "rgba(251,191,36,0.15)" },
"Noon": { icon: "🌤️", color: "#f59e0b", bg: "rgba(245,158,11,0.15)" },
"Evening": { icon: "🌅", color: "#f97316", bg: "rgba(249,115,22,0.15)" },
"Night": { icon: "🌙", color: "#818cf8", bg: "rgba(129,140,248,0.15)" },
};
const current = timeConfig[timeOfDay] || timeConfig["Morning"];
const msgs = api.messages || [];
return (
<Chat renderBubble={(msg) => {
const isLastMsg = msg.messageIndex === msgs.length - 1;
return (
<div>
<div
style={{ color: "#e2e8f0", lineHeight: 1.7 }}
dangerouslySetInnerHTML={{ __html: msg.contentHtml }}
/>
{isLastMsg && (
<div style={{
display: "inline-flex",
alignItems: "center",
gap: "6px",
marginTop: "12px",
padding: "4px 12px",
background: current.bg,
border: `1px solid ${current.color}33`,
borderRadius: "999px",
fontSize: "13px",
color: current.color,
fontWeight: "600",
}}>
<span style={{ fontSize: "16px" }}>{current.icon}</span>
<span>{timeOfDay}</span>
</div>
)}
</div>
);
}} />
);
}Qué hace el código:
api.variables["Time of day"]lee la variable por su nombretimeConfigasigna a cada momento un icono y unos coloresisLastMsgdeja la etiqueta solo en el último mensaje. Quita esa comprobación para poner la hora en todos los mensajes
El estado que aparece junto al archivo en Paneles → Código de frontend debería ser un OK verde.
Referencia rápida
| Lo que quieres | Cómo hacerlo |
|---|---|
| Hacer algo cada N turnos | Cuándo se dispara: Cada N turnos |
| Hacer algo con un reloj en tiempo real | Cuándo se dispara: Cada N segundos |
| Ramificar según el valor actual | Varios comportamientos con el mismo disparador y distintas condiciones en SOLO SI |
| Darle a la IA el ambiente de cada momento | Una entrada de lore por momento con una condición sobre Time of day |
| Cambiar la música con el momento del día | BGM condicional, Condición de variable, Detener BGM anterior activado |
| Decirle a la IA que ha pasado el tiempo | Efecto: Decirle a la IA (solo la siguiente respuesta) |
| Que la IA no cambie la hora | Acceso de la IA: Solo lectura para la IA |
| Mostrar la hora | Mostrar en la pantalla del jugador, una parte Texto o código de interfaz |
Esta es la receta n.º 9
El mismo montaje (una variable que los comportamientos mueven con un ritmo, con lore y música que la siguen) sirve para el tiempo atmosférico, las estaciones o el humor de un PNJ. La plantilla Acciones del día de la interfaz del jugador añade un contador de días, un momento del día y unas cuantas acciones por día, para cartas de simulación de vida y de gestión.
