Ciclo de día y noche en Godot 4 con una sola luz y noches más cortas
Un día de 16 minutos con atardeceres naranjas, luna, estrellas y pueblos con las ventanas encendidas. Una sola luz hace de sol y de luna, y la noche pasa más deprisa a propósito.

Hasta este mod, en Gotic siempre eran las ocho de la mañana. Con Día y noche el sol sale por el este, cruza el cielo por el sur y se pone por el oeste; el atardecer tiñe la isla de naranja (como en la portada, sobre Brumacosta a las 19:22) y de noche salen la luna y las estrellas. Arriba en el centro, un reloj pequeño dice el día y la hora.
Los pueblos se enteran: de noche encienden ventanas y faroles, la hoguera se aviva y los vecinos que paseaban se sientan junto al fuego.

Cómo está hecho
Un día entero dura 16 minutos de juego: 11 de luz (de 5:00 a 20:00) y 5 para el resto. La noche pasa más deprisa a propósito; la hora avanza a un ritmo u otro según el tramo:
static func rate(at: float) -> float:
if at >= LIGHT_FROM and at < LIGHT_TO:
return (LIGHT_TO - LIGHT_FROM) / DAYLIGHT_SECONDS
return (24.0 - LIGHT_TO + LIGHT_FROM) / (DAY_SECONDS - DAYLIGHT_SECONDS)
Para no saltarse un cambio de ritmo ni el cambio de día con un paso largo, el avance se parte en trozos que acaban justo en cada borde (5:00, 6:00, 20:00 y medianoche). El contador de días sube al amanecer, a las 6. Una prueba mide que de amanecer a amanecer pasan 960 ± 1 s.
El cielo lo pinta Scenery.apply_time(hora), y aquí está lo que más me interesaba: una sola luz direccional hace de sol y de luna. De día es el sol, blanco a mediodía y anaranjado cerca del horizonte; a las 20:00, cuando el sol se pone, esa misma luz pasa a ser la luna, azulada y con mucha menos energía. En el cambio, la luz está en el horizonte y con energía casi cero, así que no se nota el salto. Los colores del cielo, del horizonte, de la luz ambiente y del mar salen de una paleta por horas (amanecer, día, atardecer, noche) que se interpola suavemente.
Las estrellas son una cúpula a 700 m del jugador: más allá del terreno (440 m) y dentro del alcance de la cámara (900 m). Es un solo dibujo y solo existe de noche.
Dos decisiones pensando en el móvil:
- La noche es azul y legible, no negra. En una pantalla de móvil, una noche negra no se juega.
- Las luces de los pueblos no son luces. Ventanas y faroles son una malla con un material que brilla. En el renderer Compatibility, cada luz del motor es otra pasada por objeto, y con cuatro pueblos eso se notaría.
El cielo no se repinta en cada fotograma, sino cada medio segundo: a esa velocidad no se ve la diferencia. Y otros mods leen world.scenery.night (0 de día, 1 de noche) sin conocer este: la fauna cambia mariposas por luciérnagas, el sonido ambiente cambia pájaros por grillos y la fiesta de Brumacosta solo existe porque hay noches. Apagar el mod deja el cielo de siempre.

Lo que salió mal
El mod en sí no dio guerra, pero la noche destapó fallos en los que llegaron después: seis estilos del estudio de filtros se quedaban en negro (usaban umbrales fijos y hubo que añadirles exposición automática), y con el mod del tiempo las gotas de lluvia brillaban de noche y se veían estrellas detrás de las nubes.
Medido en el PC aquella ronda: 752 comprobaciones correctas, y capturas de día, atardecer y noche a 1280×720 y 1600×720.
Lo que falta por comprobar
Los FPS de noche en el móvil. Cuando por fin se midió el juego en un Samsung S24 Ultra, fue a 60 FPS de día, a pie y volando; de noche, sin medir. Aquella ronda tampoco se pudo exportar el APK, por un problema del entorno de exportación y no del código.