› Proyecto: Una Playa Oscura › Godot: Afinando la Maquinaria
- Este debate está vacío.
-
AutorEntradas
-
-
26 de mayo de 2026 a las 16:23 #98
Drk0027
Superadministrador::Esta vez los cambios son un poco transparentes en el sentido que he cambiado muy poco de la apariencia y mucho del motor del juego. Pero marca el final del desarrollo de este, pues, ya estan contempladas todas las situaciones que se deberian programar y el resto seria solo meter la historia a los JSON.
Introduccion
He dejado atras los cambios esteticos para concentrarme en lo que deberia ser el corazon del juego. La maquinaria necesaria para soportar la historia y su manifestacion. Asi que el motor ya soporta las siguientes particularidades:
- Narrativa determinista. La historia puede ser escrita en bloques cuya unica direccion, es el siguiente bloque.
- Maquina de estados. Cada turno puede cambiar las variables del mundo segun se crea necesario.
- Disparadores de accion. Cada turno puede disparar una accion que varia la ruta determinada. Ej. atacar con hacha puede llevar a victoria o derrota en el mismo turno
- Sistema de presagios. Breves mensajes que representan la conciencia del jugador.
- Sistema de Eventos Globales. Cada turno evalua las condiciones globales y establece la probabilidad de ejecucion.
Conseguidas estas estructuras logicas, los cambios a partir de ahora deberian ser a nivel narrativo y estetico, pero el juego en si ya se encuentra en su primer loop funcional.

DevLog 4. Montones de cambios
- Sistema de Presagios Amarillo Ocre (#E6C229): Implementado un motor de renderizado de texto condicional dinámico en el JSON. Al deambular por las habitaciones, la interfaz evalúa el riesgo y actualiza los mensajes amarillos de advertencia en orden de prioridad.
- Separación de Responsabilidades: Creado el Autoload
LogicaEventos.gdpara aislar el procesamiento matemático. El scriptmain.gdahora solo maneja la interfaz visual y elGameManager.gdresguarda los datos puros. - Interruptores de Estado Global: Reemplazamos la necesidad de saturar el JSON escena por escena. El peligro ahora se controla con banderas generales como
evento_intruso_activo, protegiendo el diseño contra errores de dedo. - Intercepción de Emergencia en Flujo: Modificado
_cambiar_escenapara frenar el movimiento normal del jugador y forzar la carga de la escenaencuentro_intrusoen el instante exacto en que el riesgo llega a 100%. - Solución del Bug Nil: Corregido el paso 4 de
_cambiar_escenaenmain.gdpara que no intente cargar lineales inexistentes si la acción procesa un trigger. - Saltos de archivo seguros: Adaptado los triggers en
Gamemanager.gdusandocambiar_escena("json:id")para que el motor cargue el archivo correcto en disco antes de renderizar la interfaz. - Reset de memoria automatizado: Implementado
.duplicate()en el_ready()del manager para limpiar la RAM al iniciar una partida nueva sin arrastrar muertes ni riesgos viejos, ahorrándote duplicar código en el futuro. - Triggers de Combate Robustos: El hacha calcula el 70/30 de probabilidad sin romper el flujo de la interfaz mediante redirecciones nativas de
cambiar_escena(). - Persistencia Limpia de RAM: El Menú Principal clona la plantilla inicial mediante
.duplicate(), erradicando el bug de quedar atrapado en pantallas de muerte al reiniciar. - Intercepción por Flags de Estado: Creamos un centinela en
LogicaEventos.gdque unifica los dos disparadores (pelear con éxito o leer la nota con el hacha en mano) mandando al jugador limpiamente hacia la secuencia de la niebla enfinal/bosque.json. - Sistema de Estados de Texto para Habitaciones: Reemplazado los interruptores simples (
true/false) por strings de estado en elGameManager.hab1_estadoahora maneja"cerrada","abierta"y"reforzada", mientras quehab3_estadocontrola"abierta"y"cerrada". Esto eliminó el bug de la «viga duplicada» y protegió la escalabilidad del JSON. - Mecánica de Recuperación de Viga («Quitar Viga»): Añadido opciones dinámicas en los JSON de las habitaciones 1 y 3 para que el jugador pueda retirar la viga si se arrepiente. Esto habilitó un rompecabezas de gestión de recursos bajo presión.
- Operaciones Aritméticas Dinámicas en
set_flag: Mejorado la función_ejecutar_accionen el motor. El JSON ahora puede enviar operaciones matemáticas en formato String (como"-1","+2","*2","/2"). El motor las procesa automáticamente sobre las variables del juego. - Escudo Anti-Inventario Negativo: Implementado una protección con
max(0, nuevo_valor)en el procesador de flags. Ningún recurso (como leños o cerillos) puede bajar de cero de forma errónea. - Escena de Muerte del Bosque (
ataque_acecho_bosque): Diseñado por completo el nodo de Game Over del bosque, aplicando formato gramatical estricto, comillas españolas (« ») y efectos visuales avanzados de BBCode ([shake],[wave],[pulse]). - Fórmula de Seguridad del Refugio: Rediseñado el bloque de la casa en
procesar_eventos_accion(). El evento del intruso ahora se apaga únicamente sihab1_estado == "cerrada" AND hab3_estado == "cerrada". Romper la Habitación 1 inhabilita la condición de victoria y acelera la subida del riesgo (sube de 3 en 3). - Mecánica de Alivio Emocional (La Intuición): Implementado un reinicio parcial del
riesgo_intrusoa30en el instante en que el refugio se vuelve seguro. Esto evita que los presagios de pánico absoluto parpadeen al segundo exacto de quitar la viga, dando una ventana justa de toma de decisiones. - Unificación de Variables del Bosque: Eliminada la bandera huérfana
riesgo_bosquey unificado todo el sistema bajo la bandera real del GameManager:acecho_bosque. - Corte de Bucles y Funciones Fantasma:
-
- Eliminamos un bloque duplicado del bosque en el script que duplicaba la velocidad del peligro.
- Eliminamos una función intrusa que sumaba
+5de acecho de forma fantasma estando el jugador dentro del refugio.
-
- Sistema de Castigo por Acciones en el Bosque: Tras notar que los «turnos técnicos» de las pantallas intermedias del JSON inflaban el peligro, fue retirado el incremento automático del motor y lo inyectamos directamente en los resultados lógicos de
procesar_exploracion()(castigando con+6la oscuridad,+2la luz,+10la huida y+20el botín ruidoso). Conectar el regreso a casa limpia el medidor a0. - Resolución del Bug de Operandos (
Stringvsint): Corregido un colapso enevaluar_condicion()causado por tener la banderagema_rota_encontradainicializada por error como un String ("false") en lugar de un booleano puro (false).
Conclusiones
Me hubiese gustado hacer cambios mas visuales para llamar mas la atencion, pero trabajar en todo esto era necesario para poder llegar a eso. por supuesto, es adecuado destacar las cosas que quedan pendientes como por ejemplo.
- La exploración de la casa con luz encendida: Redactar los cambios de textos y condiciones en la Cocina, Habitación 1 y Habitación 2 para cuando
fogata_luz > 0(revelando la nota y la gema rota de forma real). - Valor a los niveles medios de luz: Configurar las penalizaciones o limitaciones lógicas si el jugador permite que la fogata caiga a nivel
1o2en lugar de mantenerla en3. - Punto final de exploración (Disparador de Escape): Definir la regla exacta (ej. tener la viga puesta, la fogata encendida y la nota leída) para cambiar
evento_escape_casa_activoatruey saltar a la secuencia final de la casa. - Acercamiento del Checkpoint: Mover la lógica del primer punto de control a la entrada de la
sala_3para mitigar la frustración del azar (RNG) en el bosque sin alterar la dificultad de supervivencia. - Fase Casa (Ciclo Intruso):
-
- Hacer funcionar el trigger del hacha: Programar el acierto (70%) o fallo (30%) dentro de
GameManager.procesar_exploracion()para el triggerespantar_intruso_hacha. - Crear la escena del Bad End: Escribir en el JSON el texto definitivo de la escena
final_malo_atrapadopara cuando el jugador falle con el hacha o elija huir. - Resolver el bug de redirección al bosque: Rastrear por qué el motor salta a
busqueda_y_batalla_bosquetras interactuar con la escena de emergencia y corregir la lectura del trigger.
- Hacer funcionar el trigger del hacha: Programar el acierto (70%) o fallo (30%) dentro de
-
- Fase Exterior (Ciclo Bosque):
-
- Diseñar el «Acecho del Bosque»: Implementar la lógica para la flag
evento_bosque_activoque castigará al jugador si decide caminar por el bosque con la fogata apagada ("fogata_luz": 0). - Temporizador letal del exterior: Crear el freno de emergencia para el bosque, simulando que andar desarmado o a oscuras demasiado tiempo activa una muerte definitiva o un encuentro con los monstruos.
- Diseñar el «Acecho del Bosque»: Implementar la lógica para la flag
-
Ah y por cierto. el sistema de debuging tambien ha crecido. ahora tambien tiene un Log por sesion que permite ver que pasos se ha tomado en cada oportunidad y claro, si presionas el boton de enviar reporte, me llega el conjunto de pasos que tomaste para llegar al bug que encontraste. No dudes en usarlo si le echas un ojo al juego.

-
-
AutorEntradas
- Debes estar registrado para responder a este debate.