dia 3 de la jam habemus bugs


bueno finalizo el 3er día de la game jam y fue uno de planificación y organización del proyecto. Siempre teniendo en cuenta el alcance ó el "scope". Con tan solo dos semanas para trabajar en el juego quiero tratar de ahorrarme todos los contratiempos posibles, por eso trato de pensar lo mejor posible (do one´s best) todo lo que tengo que hacer y trazar un "mapa", el cual espero me lleve a realizar el videojuego que tengo pensado, todo esto, mientras trabajaba durante la mañana recorriendo el yermo... 

puede fallar pienso, mientras escucho los martillazos de aquel joven aprendiz de escapista.

así que trello, la cual es una herramienta para organizar proyectos de forma orgánica emulando a la perfección uno de esos tableros de corchos que son re útiles para colocar papelitos que ves todo el tiempo con ideas, si esos, los que me da flojera colocar en mi habitación, peeero con mas característica, ya que con trello podes editar esos papelitos y quedan mas o menos así:


como pueden ver en la pestaña "in progress" esta la tarjeta de "mecánicas de movimiento"  la cual tiene una lista de todas las mecánicas que va a tener el juego.

Ya en casa, después de pasar por el proceso de "descompresión" protocolar con el jabón blanco, me puse a trabajar en el código del personaje, si bien hice algo de "avance" ayer, fue lo mínimo y necesario para llamarse juego, que el avatar del jugador se mueva (forma de interacción básica para comunicar que es "su" avatar). hoy a la mañana 5:40 para ser exactos intentaba, sin mucho éxito desayunar, mirar un tutorial en Youtube intentar entender y aplicar lo que me decía. 

después de varios martillazos al teclado, el código se ve mas o menos así: (abstenerse gente sensible, esta lleno de horrores de ortografía).

 

En esta sección del código estaba implementando el deslizarse por las paredes, es decir si el jugador salta en hacia a una pared y sigue presionando la tecla de movimiento en dirección a la misma el avatar va a  caer mas despacio, para detectar las colisiones del avatar con el ambiente utilice "raycast2d", por primera vez. Cuando termine de darle forma a la nueva característica del juego, llego el momento de la verdad, probar si es que dicha mecánica funciona...

Spoiler alert, no lo  hizo, pero eso no me desanimo ya que como dije muchas veces mi experiencia con este motor Godot es mínima, esperaba que eso pasara, ahora era momento para lo que se llama "debuging" que seria básicamente solucionar errores. intente de todo, cambiar nombres de variables, separar el código en funciones mas pequeñas y especificas para tener todo mejor seccionado, pero nada parecía funcionar, así que busque ayuda con gente que si sabe hacer juegos y utilizar Godot, muchos me recomendaron usar una función nativa del motor que se llama "is_on_wall" la cual parecía funcionar para lo mismo que yo quería lograr y era mucho mas sencilla ya que no necesitaba utilizar los "raycast2d" y justo antes de que me de por vencido, una persona en un servidor de discord me recomienda revisar en el inspector, si los bendecidos "raycast2d" estaban activos al iniciar el juego. Bueno, resulta que no sabia que, por defecto estos vienen con sus colisiones desactivadas y que el código estaba bien desde el comienzo. Después de activarlos funciono a la perfección, después de un pequeño momento de euforia al poder solucionar mi error, seguí trabajando y tratando de implementar nuevas características, como por ejemplo: Dobles saltos (el cual funciono perfecto desde el primer momento) y el salto desde la pared, este ultimo no esta funcionando por el momento, no se "despega" de la pared simulando el impulso del salto, solo se eleva pegado a la misma. 


esta es una imagen donde se puede apreciar al avatar del jugador con sus "raycast2d" activados y funcionales.

estoy avanzando lento, pero es muchísimo para el nivel que tengo, hace 2 días no sabia ni como arrancar a plantearme un "debuging" esta jam es el motivo perfecto para aprender y eso es lo que hago, durante el resto de la semana voy a seguir trabajando en las mecánicas núcleo de mi juego y pulirlas lo mejor posible, todavia me falta implementar el sistema de seleccion de hechizos y la creación de plataformas con el mouse como en el  prototipo alfa, pero una vez tenga todo listo, espero que para este fin de semana, voy a empezar a implementar el arte, animaciones, música y efectos, para que vaya tomando una forma mas parecida al producto final 

Código del personaje:

 

extends KinematicBody2D 

#declarar variables y exportarlas para editarlas en el inspector
export var gravedad:= 600
export var velocidad_max := 200
export var salto_max := 300
export var multiplicador_caida := 2.5
export var saltobajo_multiplicador := 10

#vectores de movimiento y direccion
var distancia := Vector2()
var velocidad := Vector2()
var direccion_x := 0
var salto_restante := 2
var direccion_dash := Vector2(1,0)
var puede_dash := false
var dasheando := false

#activa en physics_ process al iniciar el nivel
func _ready():
set_physics_process(true)

#llama a todas las funciones necesarias para el movimiento.
func _physics_process(delta):
_movimiento(delta)
_jump(delta)
_gravedad(delta)

#aplica la gravedad y el movimiento al personaje.
func _movimiento(delta):

direccion_x=int(Input.is_action_pressed("derecha"))-int(Input.is_action_pressed("izquierda"))

distancia.x = velocidad_max*delta
velocidad.x = (direccion_x*distancia.x)/ delta
move_and_slide(velocidad, Vector2(0,-1))

func _gravedad(delta):
if not dasheando:
velocidad.y += gravedad* delta
if velocidad.y > gravedad:
velocidad.y = gravedad # setea la velocidad maxima de caida a 600
if colision_con_pared() and velocidad.y > 100 and direccion_x != 0:
velocidad.y = 100 * delta #se desliza por la pared si coliciona con ella 

# esto va a ser el dash lo prometo
func dash():
if is_on_floor():
puede_dash = true
 

#esto no funciona para nada (?)
func salto_pared():
#salto desde la pared
if not is_on_floor() and colision_izquierda():
velocidad.x -= 400
if not is_on_floor() and colision_derecha():
velocidad.x += 400

func _jump(delta): #salto de altitud variable y doble salto.
if colision_con_pared():
salto_restante = 1 #reinicia la cantidad de saltos restantes cuando toca una pared

#aplica una aceleracion de caida cuando el personaje esta en el aire
if velocidad.y > 0:
velocidad += Vector2.UP * (-9.81) * multiplicador_caida

elif velocidad.y < 0 and Input.is_action_just_released("saltar"):
velocidad += Vector2.UP * (-9.81) * saltobajo_multiplicador

#doble salto
if Input.is_action_just_pressed("saltar") and salto_restante > 0:
if velocidad.y > 0: velocidad.y = 0 # si esta cayendo ignora la velocidad de caida.
velocidad.y -= salto_max
salto_restante -= 1

if is_on_floor():
velocidad.y = 0
salto_restante = 2 #reinicia la cantidad de saltos restantes cuando toca el suelo 

if Input.is_action_just_pressed("saltar"):
velocidad= Vector2.UP *salto_max
salto_restante -= 1

move_and_slide(velocidad, Vector2(0,-1))

func colision_con_pared():
return colision_izquierda() or colision_derecha()

func colision_izquierda():
return $ParedIzquierdaRaycast1.is_colliding() or $ParedIzquierdaRaycast2.is_colliding()

func colision_derecha():
return $paredDerechaRaycast1.is_colliding() or $paredDerechaRaycast2.is_colliding()


mañana voy a subir la primera versión jugable del proyecto así van probando las nuevas características de movimiento.

por cierto hoy Celina, mi editora piolita colaboro con el proyecto con un cuarto de helado, muchas gracias por eso :) y perdón por tener que aguantarme.

Leave a comment

Log in with itch.io to leave a comment.