Un turbo con barra de resistencia en Godot 4: impulso, umbral y segundo de gracia
Un botón que te hace ir un 45 % más deprisa a pie, nadando y en escoba, mientras dure la barra. Parecía lo más sencillo del juego y escondía trampas.

Quería un botón de correr con impulso, como el de tantos juegos de mundo abierto, pero limitado: que se notase y que se acabase. El mod turbo es eso. Pulsas TURBO (o X en el PC) y vas a ×1,45 a pie, nadando y volando en la escoba. La cámara se abre 8 grados para que se sienta la velocidad, el botón pasa a decir ¡YA! y abajo aparece una barra que se vacía en 4 segundos. Se apaga al vaciarse, al pararte o al pulsar otra vez; un segundo después la barra empieza a llenarse y tarda 7 en estar llena.
Medido con la física del jugador en las pruebas: 8,7 m/s frente a 6,0, dura 4,0 s y se puede volver a usar 3,1 s después de vaciarse.
Cómo está hecho
El turbo no mueve al jugador. Usa las bonificaciones que el juego ya ofrece a cualquier mod: speed_factors (a pie), swim_factors (nadando) y fly_factors (que lee la escoba). Pone su factor con su nombre y lo quita al apagarse, así se suma a las infusiones, los platos de la cocina y las botas sin conocerlos, y dentro de los topes de siempre (cada bonificación entre 0,5 y 1,5). La barca no usa bonificaciones, así que en la barca el turbo se apaga.
Todo el reloj está en una función que las pruebas pueden llamar directamente, sin esperar fotogramas:
func advance(delta: float) -> void:
if active:
stamina = maxf(stamina - delta / EMPTY_SECONDS, 0.0)
var moving := Vector2(world.player.velocity.x, world.player.velocity.z).length() > 0.5 or world.player.mover != null
_still = 0.0 if moving else _still + delta
if stamina <= 0.0 or _still >= STILL_SECONDS or not _moves_with_factors():
stop()
else:
_since_stop += delta
if _since_stop >= REFILL_DELAY:
stamina = minf(stamina + delta / REFILL_SECONDS, 1.0)
_paint()
La barra es un Control que se dibuja a sí mismo: ámbar si se puede usar, roja si aún no llega, más clara encendida. Solo se ve si no está llena, para no ocupar pantalla cuando no hace falta.
Lo que salió mal
- Con la barra casi vacía, parpadearía. Si se pudiera encender con cualquier resto, se encendería y se apagaría a cada paso. Por eso no se enciende por debajo del 30 %: avisa «Sin resistencia» y suena un error.
- Encendido parado, se apagaba antes de echar a correr. La regla de «parado 0,4 s, se apaga» saltaba antes de que el jugador arrancase. Lo destaparon las capturas, que van a pocos fotogramas por segundo y alargan cada paso. Ahora, si lo enciendes quieto, tienes un segundo de gracia.
- El botón tapaba al personaje. Empezó junto a él, en el centro de la pantalla. Se movió arriba a la derecha, junto a VISTA.
Las mutaciones que las pruebas vieron fallar: apagar el mod sin quitar el impulso, quitar el umbral, no apagarse parado, que el reloj corra con el menú abierto, que se encienda en la barca y rellenar sin esperar. Con el turbo, el editor de personaje y el inventario, la suite llegó a 1253 comprobaciones.
Lo que falta por comprobar
No lo he probado en el móvil, ni con el pulgar de verdad. Los números (×1,45, 4 s, 7 s, el 30 %) son una decisión mía: no sé si un jugador lo sentirá corto o demasiado generoso.