13 de marzo de 2009

todavía existo

Después de un largo y pesado semestre en el cual holapercy estuvo abandonado, ha vuelto a la vida.
Me propuse programar algo para holapercy -por más chico que sea- todos los días. Así que llevo una listita con features y cosas que tengo que ir agregando o arreglando.
Lo primero que me puse a hacer fue un re-estructurado de casi todo, que era asqueroso y desprolijo (lo sigue siendo, pero en menor medida).

La idea, para el que no sabe, es transformar holapercy en algun tipo de aventura gráfica y que sea relativamente sencilla su creación.
Ya tengo hechas cosas básicas como cargar escenas, las cuales se definen en un xml, movimiento sencillo del personaje y poder levantar objetos del mundo. Una de las cosas que más me interesa es el tema de pathfinding, el cual todavía no estudie del todo.
Primero me faltaba algo: definir en que zonas de la escena los actores (personajes, ya sean npcs o el propio jugador) pueden moverse.

Mirando el AGS, lo que hacen ahí es "pintar" el área donde uno quiere permitir que los personajes caminen. A partir de esto decidí implementar mi solución.
Una escena consta de 2 capas (probablemente terminen siendo más al agregar nuevos features), primero la escena en si misma y luego una imagen con las areas "caminables" pintadas en azul.



(El cuarto fue dibujado por el viejo y asquerosamente pintado por mi una tarde que no tenia nada mejor que hacer)



Como estaba hasta ahora, uno podía clickear en cualquier lado del cuarto y el personaje se movía hasta ahí, sin importar que fuera el techo o que terminara sobre la cama.


Combinadas:


Luego imaginamos el layer pintado como una grilla formada por celdas de 16x16, con valores de 0 (celda sobre la cual no se puede caminar) y 1 (para las accesibles). Siendo el tamaño de la ventana 640x480 esto se puede ver como un array de 40x30 (640/16 = 40, 480/16 = 30).
Se escanea celda por celda para ver si hay a lo sumo 1 pixel de color azul y en caso de haberlo, se marca esa posición como accesible para los personajes. Es por eso que al pintar no es necesario pintar muy cerca de los objetos como la cama o el escritorio, ya que con 1 solo pixel ya podriamos estar llenando una celda que este sobre el objeto.

Dentro del juego se puede presionar f3 para ver la grilla y el área sobre la cual se puede caminar.



El próximo paso va a ser implementar un algoritmo A* para el movimiento del personaje, usando como mapa de navegación la grilla creada a partir de la capa "pintada" de las escenas.

1 comentario:

Kewl dijo...

Es muy conveniente que en el cuarto haya un celebro para pickear up.