jueves, 6 de marzo de 2014

Hito 2 (07/02/2014)

English version

Ya el segundo hito. Esta vez, habiendo entendido cómo funciona la arquitectura por debajo
(incluso habiendo realizado unos cuantos cambios a nuestro favor), y habiendo hecho un poco de diseño, el avance ha sido rápido y los resultados son muy visibles. Además, nuestra artista ha demostrado lo que vale con sus primeras texturas. Comentemos los avances:


Respecto a la arquitectura, hemos hecho cambios de bajo nivel, como puede ser la optimización del sistema de mensajes, y un sistema que permite indicar la frecuencia de actualización de cada componente. Un cambio muy importante es la implementación de un sistema de arquetipos para instanciar entidades, ya que en nuestro juego no tendremos un mapa fijo (al ser procedimental). Lo que necesitamos en su lugar es almacenar los valores configurables de las entidades en un mapa de arquetipos, y a partir de ahí instanciar entidades copiando dicha información. Para ello, ha sido necesario también crear un gestor automático de nombres únicos para las entidades. Respecto a los gráficos, hemos creado una malla estática a la que incorporamos las entidades gráficas que no van a modificarse (suelo, pared, techo y escalera).

En el ámbito de lógica, también tenemos novedades. La primera de ellas es un sistema de turnos dinámicos, que sustituye al provisional del que partimos en el hito anterior. Ahora se trata de una lista ordenada por un valor de "delay", que depende de la acción realizada y de la velocidad de la entidad. Se recoloca la entidad según este valor tras terminar su turno.
Otra novedad es el almacenamiento de la información de cada casilla. Cada casilla puede tener un único "actor" (enemigo o jugador), y tienen propiedades (si se puede ver a través de ella y si puede ser transitable). Finalmente, una lista de entidades no actores de la casilla (para los objetos, cofres y puertas).
También hemos establecido nuestro sistema lógico de colisiones basándonos en la información del mapa, por lo que los actores no pueden moverse a una casilla marcada como no transitable.
Finalmente, el jugador puede interactuar ya con las puertas (las cuales pasan de no transitables a transitables), y puede atacar a los enemigos y ser atacados por ellos.

Pasando al tema de la IA, disponemos de un A+ adaptado para un mapa de casillas. Se calcula una ruta a un punto dado y será seguida por el enemigo, e incluso se tiene en cuenta el coste debido a giros para dar prioridad a los desplazamientos no frontales. No hay mayor IA por ahora.

Respecto al control del jugador, se han añadido las acciones "esperar", "interactuar" y "atacar". Al desplazarse el jugador, la cámara dispone de un pequeño "traqueteo" que da mayor realismo al movimiento. A la rotación libre de la cabeza del jugador se le ha añadido el eje y, por lo que ya no estamos limitados a mirar hacia la izquierda y la derecha. Al hacer un movimiento inválido (a una casilla no transitable), no perderemos turno, y la cámara hará un movimiento de "rebote" que indicará que la acción no pudo realizarse con éxito.
Un dato a destacar es que todos los actores (jugador y enemigos) usan el mismo controlador, y la diferencia reside en quién les da las órdenes (teclado y ratón o bien la IA).

Finalmente, hemos añadido comandos útiles a nuestra consola de depuración, y de hecho su uso ya empieza a ser útil para depurar el juego:
    • Comando freebird: Activa o desactiva la cámara libre para explorar el mapa
    • Comando spawn: Instancia entidades en ejecución (Pruebas de combate)
    • Comando grid: Muestra u oculta una rejilla que indica el límite de las casillas
    • Comando spawncube/destroycube: Crea en ejecución un cubo para marcar alguna posición

Aquí tenemos el vídeo correspondiente el hito 2:



No hay comentarios:

Publicar un comentario

Share