Pekomin
Juego de cacería de creaturas pixeladas de videojuegos viejos. En cada nivel será temporada de cacería de alguna creatura. Si no la cazas a tiempo, pierdes. Si cazas otra, pierdes (hay que promover el respeto a la vida!). Cuando cazas a una creatura, puede que las demás se enfurezcan y te ataquen... y si te agarran, pierdes.
El juego está desarrollado con técnicas de magia negra que datan de la época medieval, y un poco de C++. Como usamos algunas partes del lenguaje solo aptas para adultos, es necesario tener una versión relativamente reciente de GCC/libstdc++. También se necesita Ruby para poder compilar el juego; un pequeño script en Ruby genera automáticamente el Makefile. El aspecto gráfico e interactivo del juego está basado en OpenGL a través de GLUT, aunque esperamos pronto migrar todo el código de GLUT a SDL.
Para compilar el juego, se debe descomprimir el paquete de fuentes, entrar al directorio que se crea, ejecutar el script configure y luego make.
Los archivos en la carpeta games describen lo que el juego carga. "./pekomin" corre el juego con el archivo games/default; ./pekomin games/ELEFANTE cargará el archivo games/ELEFANTE.
El juego se controla, por ahora, completamente a través del teclado así:
Tecla |
Uso |
w |
Avanzar |
s |
Retroceder |
a |
Girar a la izquierda |
d |
Girar a la derecha |
espacio |
Saltar |
enter |
Disparar |
r |
Recargar |
m |
Mostrar mesh |
tab |
Cambiar cámara |
F2 |
Reiniciar |
\ |
Pausa |
ESC |
Salir |
Uno de los modos de cámara es la manual. Se controla así:
Tecla |
Uso |
i |
Avanzar |
k |
Retroceder |
j |
Mover a la izquierda |
l |
Mover a la derecha |
u |
Girar a la izquierda |
o |
Girar a la derecha |
p |
Subir |
; |
Bajar |
y |
Inclinar hacia arriba |
h |
Inclinar hacia abajo |
Primera entrega
Subimos un pequeño video a Youtube que muestra un poco del manejo de cámaras, saltos del jugador, disparos y efectos especiales. En el video se muestra lo que hace el juego con el archivo games/group: siete cajas rojas persiguen a la caja verde, que es el jugador, como en el comportamiento "follow the leader".
Acá está el paquete de fuentes. Es algo pesado por las imágenes de fondo que contiene (dos fueron generadas con POV-Ray y otra es una foto de la NASA).
Hicimos también un pequeño informe en formato de texto plano.
Segunda entrega
Por cuestiones de tiempo y de excesiva inhalación de productos de combustión incompleta de C++, no logramos implementar nada muy vistoso ni presentable para la fecha de la segunda entrega. Sin embargo, logramos hacer avances importantes en el código (llevamos más de 5000 líneas del C++ más horrible conocido por la humanidad). Estamos usando un repositorio '''Git''' en '''GitHub''' para el código del proyecto; pueden obtener la versión más reciente del código usando el comando git clone git://github.com/Targen/Pekomin.git.
El código de la segunda entrega está acá, pero no es nada muy impresionante.
...por ahora!
Segunda entrega definitiva (lo que no subimos)
Por cuestiones de descuido y olvido cuando tratamos de subir los archivos definitivos ya el wiki se encontraba bloqueado. :'-(
Acá les dejamos un pequeño Subiendo... que muestra un poco de lo que se implementó (generación del mesh, prototipo de una máquina de estado) y otras cosas que ya vieron en el video de la primera entrega.
Como los demás equipos hicieron un informe serio, para esta entrega decidimos hacer uno también informeSerio
Acá está el paquete de fuentes. Igual que la entrega anterior es algo aún más pesado.
Tercera Entrega
Para esta entrega nos enfocamos a mejorar el mesh (ahora se genera como de manera automática y si toma en cuenta los obstáculos presentes!!!), transformamos nuestras máquinas de estados a comportamientos por lo que podemos simular una estructura jerárquica bonita, hicimos que el comportamiento de seguir caminos tome en cuenta si ya algún otro ente esta utilizando un nodo que forme parte del camino para así abrir la posibilidad de utilizar otro y simular algo de táctica, creamos puntos de referencia (waypoints) modelados como entidades por lo que un ente puede buscar un punto para recargarse o cubrirse, finalmente se implementó la emisión y percepción de olores como sentido (se ve bonito
).
Para esta entrega pueden elegir el mesh antiguo y el nuevo que es más bonito. El comando para correr es: ./pekomin #mesh archivo. El #mesh puede ir de 0 a 2, el 0 y el 1 se ven casi iguales pero la técnica usada es diferente.
Otro detalle interesante, es que tratando de implementar las colisiones (mucho tiempo invertido en eso) decidimos probar una librería de colisiones. Googleando encontramos freeSOLID se veía muy bonita y se adaptó al código; sin embargo, a veces no funciona bien.
El punto es que si quieren probar nuestro trabajo tendrán que bajarla e instalarla, es muy sencillo (al menos en Ubuntu pues).
En este enlace pueden ver unos Videos que hicimos, ahí se ve lo que ocurre cuando corren el archivo games/world: hay varios entes que tienen un comportamiento de maquina de estado, uno que emite olor y otro que lo percibe, también el nivel esta delimitado por los obstáculos (cuatro de ellos tienen un comportamiento de máquina de estado asociado) y si se fijan bien pueden ver puntos de recarga de energía en el centro y puntos para cubrirse en las esquinas.
Siguiendo la filosofía del informe serio, acá les dejamos otro informeSerio++
Acá está el paquete de fuentes final (lo raro es que pesa menos que el de la entrega anterior).
Planeamos seguir jugando con todo esto que hicimos para hacer un videojuego de verdad, porque por ahora solo creamos instancias de niveles en los que podemos ver y probar lo que hayamos puesto ahí. De lograr algo bonito (y si el wiki sigue desbloqueado para ese entonces) subiremos algo.
Filosofía de desarrollo:
"La vaina no era una competencia, pero espero que todos se hayan sentido tan mal como si lo hubiera sido :D" —Cristian Caroli
Inspiración:
Nota: cualquier falta de seriedad de esta página es resultado de excesivas horas de trabajo forzado en C++ para esta materia, y debería comprenderse como demencia temporal. Precaución: puede ser contagiosa. Bueno chao.
