↓
iaen.es Diario de desarrollo Read in English

Gotic · 3 min de lectura

Fiesta nocturna con baile al ritmo y fuegos artificiales en Godot 4

Las noches pares, Brumacosta cuelga farolillos, suena la música y se baila alrededor de la hoguera al ritmo del tambor. A medianoche, fuegos artificiales que tuve que rehacer porque no se dibujaban.

#minijuegos#pueblos#sonido#fallos#godot

Fiesta nocturna con baile al ritmo y fuegos artificiales en Godot 4

Con el día y la noche ya funcionando, Brumacosta se merecía una fiesta. Las noches de los días pares, de 21:00 a 01:00, el pueblo cuelga tres guirnaldas de farolillos de colores sobre la calle, seis bailarines giran en corro alrededor de la hoguera y, a menos de 70 m, suena la música de la fiesta en lugar de la de siempre. A medianoche, fuegos artificiales.

Junto al fuego, R (USAR en el móvil) te une al baile. Un aro se va cerrando sobre un círculo y suena el tambor: pulsa SALTAR cuando se cierre. Son dieciséis pasos. A tiempo justo valen 2 puntos y casi a tiempo, 1. Con 20 de 32 los vecinos te regalan un pañuelo; con 28, además, se lanzan tres cohetes. La primera fiesta es la noche del día 2, unos 28 minutos de juego, así que el cartel del arco dice cuándo es y deja esperarla adelantando el reloj.

Cómo está hecho

Cuándo hay fiesta es una función de dos líneas, sin nodos, fácil de probar:

static func is_fiesta(day: int, hour: float) -> bool:
	return day % 2 == 0 and (hour >= FROM or hour < TO)

Mientras bailas, la fiesta hace de mover del jugador, como la barca o la escoba: no andas, y mover el joystick te saca del baile. La música va a 100 pulsos por minuto y cada paso cae a 0,6 s del anterior. Al pulsar, se busca el paso sin juzgar que esté más cerca de ahora:

if nearest < 0 or gap > GOOD:
	feedback.text = "fuera de ritmo"
	return
if gap <= PERFECT:
	judged[nearest] = "perfecto"
	score += 2
	feedback.text = "¡PERFECTO!"
else:
	judged[nearest] = "bien"
	score += 1
	feedback.text = "BIEN"

PERFECT son 0,1 s y GOOD, 0,2. Un paso que pasa sin pulsar se marca como fallo.

Los bailarines no son los vecinos: el pueblo ya los sienta junto al fuego de noche, así que puse seis personas nuevas. Los fuegos van de 00:00 a 00:30, un cohete cada 1 a 2,4 s.

Un cohete estalla en rojo sobre Brumacosta en una noche estrellada
Los fuegos de medianoche: cada palmera es un MultiMesh animado a mano

Lo que salió mal

  • Los fuegos artificiales no se veían. Las palmeras eran un CPUParticles3D de un solo disparo (one_shot, explosiveness 1). En una escena aparte se dibujaban; con emisión continua, también; dentro del juego, no. Ahora cada palmera es un MultiMesh animado por el propio mod, con su caja de dibujo (custom_aabb), y una prueba comprueba que esa caja abarca hasta la última chispa. La pista para la próxima vez: si algo no aparece, mira el número de objetos dibujados en la captura; si no sube, el motor ni lo intenta.
  • El indicador del ritmo tapaba al personaje. Lo vio una captura; ahora va a su derecha.
  • Una prueba de otra parte del juego falló una vez: la del terreno, que espera a los hilos de carga, con la máquina cargada por otras sesiones. Sola y en la pasada siguiente, bien. Antes de buscar el fallo en tu cambio, mira la carga.

Mutaciones vistas fallar: olvidar que pasada la medianoche sigue la fiesta, puntuar todo como perfecto, no salir del baile con el joystick, y que la música de siempre no vuelva. Con la fiesta, la suite llegó a 1073 comprobaciones correctas.

Lo que falta por comprobar

Nada en el móvil: ni el coste de la fiesta (seis bailarines más) y los fuegos, ni pulsar SALTAR al ritmo con un dedo de verdad. La música, el tambor y los cohetes se generaron por código y se midieron, pero no se han escuchado. Y el ritmo del baile está puesto con cuentas, no con jugadores.

Más de Gotic →