Minijuego de pesca de una sola pulsación en Godot 4, con diez especies
Lanzar, clavar cuando pica y mantener pulsado para que la zona verde siga al pez. Diez especies según la hondura y la hora, y un pescador que te regala una caña mejor. Así lo hice.

En el muelle de Caleta Salobre espera Abel, un viejo pescador, que te da una caña. Mirando al agua, G (PESCAR en el móvil) lanza la boya hacia donde mira la cámara. Pasa un rato, la boya se hunde, suena y vibra, y tienes 1,3 segundos para pulsar otra vez y clavar. Entonces empieza la pelea: mantienes pulsado para subir la zona verde, sueltas para dejarla caer, y mientras el pez está dentro se llena la barra de captura.

Hay diez especies y alguna bota vieja. Qué pica depende de dónde cae la boya (la orilla, el agua honda de la punta del muelle o el mar abierto, que solo se alcanza desde la barca) y de la hora: de noche salen el pulpo y el calamar. Hablando con Abel se abre el cuaderno con cada especie y su récord de peso. Con 3 especies te regala una caña mejor; con 6, un sombrero; con las 10, un trofeo en el muelle.
Cómo está hecho
Como en la granja, las reglas van en una clase sin nodos (peces.gd): cada especie es un diccionario con sus zonas, su hora, su dificultad del 1 al 5, lo que pica respecto a las demás y su peso. La zona sale solo de la hondura donde cae la boya: menos de 1,5 m es orilla y más de 12 m, mar abierto.
El minijuego es el de Stardew Valley reducido a números entre 0 y 1. El pez elige cada poco otro sitio de la barra, más lejos y más a menudo cuanto más fuerte es. Lo que decide la pelea son estas líneas:
var gain := GAIN / (1.0 + 0.15 * maxf(level - 1, 0))
fight["progress"] = float(fight["progress"]) + (gain if inside(fight) else -LOSS) * delta
if float(fight["progress"]) >= 1.0:
return "won"
if float(fight["progress"]) <= 0.0:
return "lost"
Un detalle importante: el pez nunca baja de 0,38. Sin pulsar, la zona verde se queda abajo y no lo alcanza, así que no se puede ganar sin jugar.
Como todo son cuentas, pude simularlo: 200 peleas por especie. Sin pulsar, nunca se saca un pez. Pulsando al azar, entre el 0,5 y el 16 %. Un jugador simulado que sigue al pez con 0,25 s de retraso saca 197–200 de 200, y con 0,4 s el atún baja a 184 (con la caña buena, 200). Una pelea dura de 3 a 12 s. Esto no son jugadores, son pilotos automáticos.
La pesca no conoce a la barca. Pregunta a lo que te lleve si allows_fishing(), y la barca dice que sí cuando está parada. Así cada mod prueba su lado del contrato.
Lo que salió mal
- Pescando desde la barca te ponías de pie en el banco. Las posturas de pescar eran completas (cadera, rodillas, tobillos) y pisaban la de ir sentado. Lo vio la otra sesión de Claude que hacía la barca en paralelo, en una captura. Ahora la pesca guarda la postura que había y solo cambia tronco, cabeza y brazos.
- Cargar la partida quitaba la postura de la barca, aunque no estuvieras pescando. Lo destapó una prueba con la barca guardada a bordo.
- El trofeo se veía de canto al llegar desde el pueblo, y Abel miraba al norte. Lo vio una captura de cerca; ahora los dos miran hacia el pueblo y hay prueba.
- Una prueba de «no se puede» probaba mal. «Con la caña en la mochila no se pesca» se comprobaba lejos del agua, donde tampoco se podía, y la mutación sobrevivió. Ahora se comprueba junto al muelle.
Medido en el PC: 47 comprobaciones propias (7 s). Coste de dibujo pescando en el muelle, 82–100 llamadas.
Lo que falta por comprobar
No se ha probado en un móvil: ni FPS ni mantener PESCAR con un dedo de verdad. Los sonidos (lanzar, chapoteo, picada) se generaron por código y se midieron, pero no se han escuchado. El equilibrio de la pesca está puesto con simulaciones, no con jugadores. Y pescar desde la barca solo se probó junto una vez, fuera de la suite.