30 de mayo de 2010

Vanishing Road v0.4

Vanishing Road was created for the Experimental Gameplay Project (http://experimentalgameplay.com/), for the theme "high velocity".
The code is really ugly at times and not optimized.

Report bugs/send feedback to ninbolin + @ + gmail.com


18 de mayo de 2010

El 30 de mayo este blog cumple 3 años

Y hace casi 8 meses que no escribia nada.
Así que feliz cumpleaños, porque probablemente después me olvide o simplemente no escriba nada por los proximos n meses.

peace out

26 de septiembre de 2009

spacethingy

Ultimamente estoy obsesionado con el espacio y el contenido procedural (gracias Spelunky). Estaba aburrido y me puse a hacer esto:




Espero que en el futuro (cercano o lejano, no me importa) se convierta en algun juego de exploración espacial de algún tipo.

27 de agosto de 2009

Programmer art x_x



Gracias por existir artistas.

Ah, sí, ya se pueden cargar nuevas escenas. Es bastante fácil, se define una zona (un rectángulo) y la escena a cargar, cuando el jugador llega hasta ahí...yuttini!!! nueva escena cargada

Tengo tremendos problemas para nombrar variables y tags, espero no estar solo en el mundo.

15 de mayo de 2009

A* / pathfinding

Para el movimiento del personaje implementé un algoritmo A*.
Lo que hace es buscar el camino más corto entre dos puntos, en este caso, donde está ubicado el personaje y a donde queremos movernos. Obviamente el algoritmo se encarga de bordear los obstáculos (nodos no navegables) que puedan haber en el camino.



En la imagen de arriba el nodo verde es el origen, el rojo el destino, los blancos son los nodos navegables y los grises son los obstáculos. Los violetas representan los nodos que fueron analizados.
No voy a explicar a fondo como funciona el algoritmo ya que hay varios artículos muy buenos.

El algoritmo se basa en dos funciones, h(x) y g(x).
g(x) = distancia desde el origen hasta x
h(x) = distancia desde x hasta el objetivo

Para h(x) por lo general se usa la distancia más corta (una línea recta entre los puntos). Esta función se puede variar para encontrar caminos más reales, por ejemplo para evitar cáminos con zigzags innecesarios, entre otras cosas.
Comenzando desde el nodo inicial se agregan sus nodos adyacentes (aquellos que sean válidos) a una lista de posibles nodos a visitar. Luego de esa lista se elije el que tenga menor valor de g(x) + h(x) y a su vez para cada nodo elegido se agregarán sus adyacentes a una lista de posibles candidatos.

Como grilla, para saber que nodos se pueden navegar y cuales no, se usa la generada anteriormente.



El único problema que podríamos tener es si se clickea en una zona que no este pintada en azul, ya que ese nodo no es navegable y el algoritmo no lo tendría nunca en cuenta. Para solucionar esto, si el jugador intenta moverse a una zona no navegable primero se busca un nodo válido para usar como destino.
Por ejemplo, al clickear sobre la puerta el personaje va a moverse hasta uno de los nodos azules en el piso cercanos a la misma.

Agregué más cosas al juego en estas semanas, la más interesante (o que me resulto divertida de hacer) es la del scripting. A través del xml de las escenas se pueden scriptear distintas acciones para los elemenos del juego, ya sea actores, items, objetos, etc...

Supongo que la próxima entrada será sobre eso.

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.