Cuando quise que Temet Nosce tuviera
partes de plataformas también había que definir cómo iban a
funcionar. Aquí es donde surgió una de las mecánicas medianamente
novedosas del juego, aunque no inventé nada nuevo del todo.
La primera elección es si las
plataformas son tipo montañas que ir escalando, pero siempre caes en
algo, si es desde mucha altura con salto; o del tipo abismo, donde
caes al vacío. Normalmente en los juegos de este tipo al caer al
vacío mueres, y tienes que volver a comenzar la pantalla o desde el
último checkpoint.
Eso no me convencía porque en este
juego me parecía importante sentir el agobio, esa lucha contrarreloj
contra el veneno, y volver a empezar una y otra vez desde el
principio te sacaba de la ambientación, además de romper la
continuidad. Se puede hacer que vuelvas a aparecer en el punto desde
el que has fallado el salto, pero para penalizar el fallo, y que el
que falla no esté en las mismas condiciones que el que hace el salto
bien deberíamos perder algo de vida. Pero ¿reaparecer parpadeando y
perdiendo algo de vida? La excusa me parece pobre.
Es un concepto sencillo, otra cosa es
implementarlo. El demonio está en los detalles. Lo primero es
detectar si estamos en el suelo o cayendo. De hecho saber si caes no
es tan trivial como parece. Puedes poner una distancia mínima, por
ejemplo a -60 en altura considera que te has caído al vacío y haces
el respawn. Pero no quería comprometer el diseño de escenarios, no
sabía si iba a hacer escenarios que bajasen o subieran mucho. Si
bajan mucho podría llegar a ese -60, si sube mucho puede pasar que
la caída sea mucho más larga que desde otros sitios y no queda bien
si representas un salto de tipo abismo. Así que tenía que hacer que
no fuera la altura en bruto del personaje lo que hiciera saltar las
alarmas de caída en el abismo, sino relativa respecto al suelo.
Para eso hay que saber la altura por la
que vamos andando en cada momento. Lo primero que hice fue un sistema
de raycasting, que lanzaba un rayo desde el personaje hacia abajo y
comprobaba colisión contra el suelo y me daba la altura del rayo, si
no colisionaba contra el suelo o la distancia era muy grande
consideraba que estaba en el aire, saltando, cayendo, lo que fuera,
pero si estaba en el suelo, tomaba la altura del personaje como
referencia. En mejoras posteriores vi que hay una forma de tener un
evento que directamente salta si estamos pisando el suelo, por lo que
solo tenía que almacenar la altura en estos casos.
Al igual que almaceno la altura, podría
almacenar la posición recorrida y mandar caer sobre la última con
suelo conocido, pero en ese caso quedaba justo al borde, pero justo
justo justo, de tal forma que el jugador podría volver a caer con
equivocarse un poco de tecla, una caída injusta. Incluso podría
quedar el personaje sin tocar nada con un pie fuera o algo así, feo.
Una opción era ir buscando tierra con rayos hacia el suelo desde la
posición del personaje hacia la cámara. Suponiendo que la cámara
siempre estuviera detrás, pensaba que encontraría tierra siempre.
Pero me pasó lanzarme al vacío de una forma rara, encontrar un
ángulo extraño y que el programa entrase en bucle infinito al no
encontrar nunca tierra. Un bug demasiado grave, que el juego se pueda
congelar como para poder dejarlo.
Había una versión más disimulada,
que era mover un poco el personaje tierra adentro, para que no caiga
en el borde. Pero en el caso de plataformas pequeñas, ese echar
hacia atrás una distancia prudencial puede hacer que caiga sobre el
abismo anterior. Y además siempre supongo la dirección “hacia
atrás” como hacia la cámara, pero si el jugador por alguna razón
está volviendo hacia atrás en el juego y se cae, quedaría
bonificado, ya que el juego le volvería a colocar más cerca de su
objetivo.
No conseguí un sistema automático
para esto, programarlo y olvidarme, al final opté por una solución
más apañada. Poner puntos de reinicio al principio y final de cada
zona donde haya abismos, y si nos caemos, el jugador se golpeará
contra el suelo en el punto de reinicio del trozo de tierra del que
viniera. De esta forma no cae exactamente donde se la pegó, pero si
al principio de la zona de plataformas donde cayó, lo que da a estar
zonas un aspecto de “hay que pasarlas enteras sin caerse”
interesante, pero no corta tanto la continuidad como volver a media
pantalla y volver a matar enemigos que ya habías matado o tener que
recorrer escenario ya recorrido y encima sin enemigos.
No hay comentarios :
Publicar un comentario