jueves, septiembre 30, 2010

Aprendiendo de otros: FreedroidRPG

Este es uno de los pocos RPG libres que han tenido la suerte de mantenerse activos. Y además han sido bendecidos con su inclusión en el programa Google Summer of Code. Cada 2 años más o menos le echo un vistazo y me complace ver que siempre hay nuevos detalles, tal vez no todos los que uno esperaría de dos años, pero siendo yo mismo un desarrollador aficionado, comprendo lo difícil que es mantener un proyecto, por no mencionar cambios innovativos.
Este año le tocaba, sobre todo porque algunas cosas interesantes se acometieron como parte del GSoC. El juego es bueno, sigue estable como siempre, y el único detalle molesto es el que siempre ha estado ahí: FreedroidRPG es muy lento. Me ha llevado toda una mañana completar un par de misiones iniciales. Luego de tres horas de juego en Mass Effect o Fallout tienes como mínimo 4 o 5 misiones completadas y una idea de qué va la historia.
Cualquier misión trivial (ve y consigue esto, ve y mata tal cosa) que tome más de 20 minutos debería ser rediseñada. Esta es una lección que debemos tener en cuenta.

martes, septiembre 28, 2010

Splatting resuelto

Gracias a esta respuesta en el foro de Ogre, ayer logré solucionar el asunto del splatting con el nuevo sistema de terrenos.De paso, descubrí un nuevo detalle que me obliga a replantearme el diseño de los escenarios: el tamaño del terreno no puede ser muy grande o los parches de las capas adicionales se ven pixelados. Eso es porque cada punto del mapa alfa tiene que mapearse a una extensión muy grande. En mi caso, un mapa de 512x512 no es suficiente para un mundo de más de 8000x8000, y apostaría que 1024x1024 tampoco. Por tanto, debo usar escenarios más chicos o enredarme con el paginado de terrenos (y usar páginas chicas).
Otra cosa que me estoy planteando es rediseñar  la ventana de información de personaje y en vez de pestañas usar diálogos independientes.En general, pienso simplificar el interfaz de usuario y utilizar solo widgets básicos, así es más fácil migrarlo a un skin nuevo de ser necesario.

También logré actualizar Bullet a la 2.76 para MinGW y de paso compilar OgreBullet, también con gcc. Ya casi tengo a punto el proyecto para Code::Blocks nuevamente. Para el proyecto de Visual C, compilé ogg y vorbis, que aún no se han integrado.
Todo eso entre la noche de ayer y la mañana de hoy, mientras llenaba de agua los depósitos y mi casa se inundaba poco a poco por la lluvia.  Parece que la humedad propicia la productividad, supongo que tendré que pensar en programar en una piscina.

lunes, septiembre 27, 2010

Edición de video, según Linux

La semana pasada me correspondía un round más con la edición de video en Linux. Era hora de darle otra oportunidad a Cinelerra, que nunca me ha funcionado, y algún otro software. Cinelerra se mantuvo firme en su empeño de no funcionar, explotando cada vez que cargaba un clip, no importa el formato. Me fui por la variante Pitivi, que está en el portage, y para variar esta sí funciona.
Pitivi es un editor de video no lineal bastante sencillo, de hecho, demasiado sencillo. Su guía es el manual de usabilidad de Gnome, y ya sabemos cómo se las gastan los de Gnome. Así que no debe sorprender que la interfaz de Pitivi sea bastante escueta y ni siquiera tenga un menú contextual en lugares tan importantes como la pista de video/audio. No obstante me las arreglé para luego de unos minutos descubrir cómo cortar un pedazo de video y supongo que para algún trabajo de poca complejidad este software sea suficiente.
Una opción que debería probar también es OpenShot, sin embargo no está en el portage.

domingo, septiembre 26, 2010

Mass Effect 2

Luego de un maratón que duró todo el día de ayer (casi todo el día, más exactamente), terminé Mass Effect 2. Hay algunos guiños curiosos al mundo de la informática que recuerdo: en tus mensajes puedes recibir spam e incluso llegué a recibir una variante de estafa. Hay un arma que no se puede duplicar porque está protegida por tecnología FRM (no les suena a DRM?) y en la base de los geth herejes, cuando ordenas a Legión que tome control de las torretas, en una de ellas el mensaje fue "Ejecutando sudo" (será que Legión usa Ubuntu?).
Y para los que aún no lo han jugado, un consejillo para que el pesado proceso de adquirir minerales no sea tan costoso. Los minerales son necesarios para las mejoras y por orden de abundancia son paladio, platino, iridio y elemento cero. El mayor error de principiante es escanear y obtener sin fijarse en la disponibilidad, que está indicada por el gráfico a la derecha. No gastes sondas si el pico de disponibilidad está por debajo de la tercera línea. Incluso, puedes darte el lujo de cosechar solo los picos altos. En mi caso, llegó a sobrarme de todo, incluso el escasísimo elemento cero. Extrae solo el mineral que necesitas, así evitas gastar en sondas. Las investigaciones se pueden encontrar en las misiones, así que no las compres hasta que hayas completado todas las misiones.
Bueno, al fin estoy libre de esta tarea, ahora solo me quedan Metro 2033, Alpha Protocol y Starcraft 2, y a finales de año Fallout: New Vegas. Un año cargadito de juegos...

viernes, septiembre 24, 2010

Aprendiendo de los demás: Venetica

Debo haber mencionado varias veces que me interesaba en especial probar un par de juegos comerciales hechos con Ogre: Torchlight (manténganse en sintonía, porque vienen Torchlight 2 y el ya anunciado MMO, ambos con Ogre) y Venetica. Mis experiencias con el primero fueron muy gratas. De haber vivido en otro país los desarrolladores tendrían mi dinero, sin duda alguna, porque creo que lo merecen y además merecen seguir haciendo buenos juegos.
El segundo, aunque estaba en mi poder desde hace varios meses, se había retrasado. La referencia que tenía no era muy buena, aunque venía de un jugador acostumbrado a títulos de altos vuelos. Hay que reconocer que la calidad gráfica de Venética en cuanto a modelado de personajes no es excelente, quedando incluso por debajo de Drakensang. Sin embargo sorprende por sus escenarios (y la pregunta que me asalta es: cómo rayos los hacen?) y tiene elementos como secuencias cinemáticas, etc.
Qué se puede aprender de Venetica? Pues un detalle que echo en falta es la carencia de pistas visuales sobre los objectos interactivos. No sabes si algo se puede abrir o recoger hasta que te paras junto a él. Por ejemplo, Mass Effect maneja esto muy bien, llegando al caso en ME 2 de que puedes avistar un objeto interactivo a gran distancia. El combate es bastante dinámico, pero al costo de ser un rompe-ratones: click, click, click... Los consejos sobre cómo jugar olvidan el importante detalle de que necesitas un entrenador para gastar tus puntos de habilidades. Algunas teclas de acción en la configuración pro defecto están muy cercanas, así que a menudo me encuentro abriendo el inventario en vez de sacando la espada.
Pero el juego en general no está mal y da para pasar el rato si no tienes otra cosa a mano. No tengo el precio a mano, pero definitivamente también lo pagaría. Por desgracia nunca he logrado que funcione en Wine, así que los linuxeros tendrán que buscar otra variante para probarlo.

jueves, septiembre 23, 2010

Bullet 2.77

No logro encontrar confirmación de esto, pero un post de opengl.org menciona que esta nueva versión incluye soporte para ropas mediante OpenCL, contibución hecha por AMD (pero que funciona en tarjetas ATI y Nvidia, y también en hardware de Apple). Una jugada inteligente para serrucharle el piso a CUDA. Lo ideal sería que optimizaran también el cálculo de colisiones, o puestos a pedir, todos los cálculos posibles.

miércoles, septiembre 22, 2010

Targets Linux en CodeBlocks

Anoche dediqué un buen rato a crear los targets para Linux en Code::Blocks. Esta tarea la tenía pendiente desde hace rato, porque todo iba bien con scons. Pero al reinstalar me encontré que no podía instalar kate, mi editor favorito, debido a un raro problema: emerge me pide que cierto paquete tenga un flag activado y desactivado a la vez. No me calenté más la cabeza y decidí usar Code::Blocks.
El proyecto actualizado ya está en el SVN, así que ahora pueden usar tanto scons como Code::Blocks para compilar. Recuerden que este último no autodetecta las dependencias, así que si alguna falta o algún camino está mal puesto, hay que deducirlo al estilo Visual C: por los mensajes de error.
Además hoy inicié la integración de Caelum. Luego de ver el demo me quedé impresionado con el efecto y decidí incluirlo. Lo que no sé es cuándo lo tendré funcionando como debe ser.

martes, septiembre 21, 2010

Direct3D 10/11 en Linux

Phoronix informa que ya tenemos soporte para Direct3D 10/11 en Mesa. Un nuevo state tracker de Gallium3D ha sido enviado al repositorio, con un soporte inicial para esta API. Supongo que el mayor beneficiado será Wine, que ya no tendrá que traducir las llamadas a D3D a OpenGL. De hecho, el autor lo pone todo como si fuera la mar de sencillo y se deshace en elogios acerca de lo bien diseñada que está Direct3D. Veamos si en la vida real resulta tan trivial tener una adecuada implementación de esta API que nos permita jugar títulos como  Metro 2033 o Dirt.

Postgresql 9

Han lanzado la versión 9.0 de PostgreSQL, el servidor de bases de datos relacionales libre más avanzado. Para variar, los comentarios en Barrapunto son bastante informativos y los insultos escasean, por esta vez les recomiendo su lectura si están en esto de las bases de datos. Llevo usando Postgres unos cuantos años (cuando empecé MySQL no existía) aunque no he hecho nada serio, y con serio me refiero a aplicaciones que manejen cientos de operaciones. Cuando mucho, dos o tres inserciones en un día. Así que no puedo opinar mucho al respecto, excepto que no comparto la opinión de que MySQL sea más fácil de instalar y administrar. Las veces que he tenido que hacerlo, ha sido una verdadera tortura. No considero que MySQL sea una mierda definitiva, pero si vas a empezar en esto de las bases de datos, valora Postgres primero.

lunes, septiembre 20, 2010

Particiones ext4 en Windows 7

Uno de los detalles iniciales que me molestaba al instalar Windows 7 era el acceso a mis particiones ext4. Anteriormente usaba ext3 y ext2fsd para leer y escribir desde Windows XP. Sin embargo, una búsqueda inicial me decía que ext2fsd no funcionaba en Win 7. Pero no es así.
El gran problema de este software no es Win 7, si no algunas características de ext4 que aún no están implementadas. De hecho, ahora estoy usando la versión 0.48, que no es exactamente la última, pues luego se liberaron ligeros cambios referentes al acceso a archivos grandes, y tengo que decir que estoy complacido.
Para que funcione, solo debemos desactivar los extents, una característica de ext4 que aumenta el rendimiento, especialmente en archivos muy grandes. Lo molesto del caso es que esto debe ser hecho al formatear con el siguiente parámetro: -O ^extents. El síntoma habitual de una partición ext4 con extents es que los directorios aparecen vacíos. En ese caso, ya sabes que tienes que arreglarlo, o renunciar a usar ext2fsd hasta que se arregle este problema.

viernes, septiembre 17, 2010

Integrando la física

Ya estoy en proceso de integrar la física en el juego, con vistas a la primera tech preview (que espero sea antes de diciembre). He decidido dejar las pruebas y lanzarme de lleno con OgreBullet en el proyecto, aprender sobre la marcha. Por el momento el resultado no es mucho, porque solo ha sido un día de trabajo, veré si el fin de semana las cosas mejoran. De momento, los objetos se crean en el mundo físico de Bullet y descubrí la causa de un problema raro: las cosas aparecían amontonadas en el mismo sitio. La solución es fijar la posición después de crear el objeto en Bullet.
Inicialmente la física tendrá dos funciones: colisiones y raycasting más preciso. Más adelante supongo que habrá ragdoll, objetos rodando por las pendientes y cosillas como impactos que derriben a los personajes, etc.
Los afortunados dueños de una Geforce 8000 o superior, recuerden que pueden tener detección de colisiones en Bullet aceleradas con CUDA, cosa que aún no tengo idea de cómo hacer. Los demás, a esperar por la versión OpenCL.

miércoles, septiembre 15, 2010

Encuesta sobre gráficos en Linux

Como todos los años, Phoronix ha realizado una encuesta entre sus lectores sobre los gráficos en Linux. Los resultados son interesantes en algunos aspectos, por ejemplo Nvidia y ATI van muy parejas en cuanto a cuota de usuarios, con ligera ventaja para la primera. Otro detalle significativo es que mientras los usuarios de Nvidia en su mayoría usan el driver propietario, excepto un 5% que usa Nouveau, casi la mitad de los de ATI usan el driver libre (en este caso, la mitad más grande).
Las resoluciones más comunes son entre 1280x1024 hasta 2560x1600 (sin incluir esta última), algo a tener en cuenta al diseñar la distribución de elementos en la pantalla y valorar el rendimiento. Así que 1200 parece ser la nueva resolución mínima, en estos tiempos de monitores LCD >20 pulgadas (y yo aún con un trasto CRT de 17, qué vergüenza). Sin embargo, los usuarios de Linux parecen estar más interesados en usar estas resoluciones altísimas para ver películas que para jugar a esos clásicos de toda la vida, como Rogue o NetHack.
Los resultados definitivos se publicarán en Octubre.

martes, septiembre 14, 2010

De terrenos y sonidos

Hoy he dedicado el día a implementar el splatting en el terreno. Splatting es la técnica que permite usar una imagen RGBA como mapa de mezclado  para aplicar una o varias texturas sobre una superficie. El nuevo sistema de terrenos de Ogre permite hacerlo sin necesidad de acudir a shaders externos, como antes. Sin embargo, esto no es tan trivial como debería, ni está documentado tan claramente como debería. De hecho, pienso que las nuevas funcionalidades ameritan dos demos separados, uno para las posibilidades de manejo de los materiales, como el splatting y otro para la modificación del terreno.Por el momento la base está implementada, falta lograr que funcione correctamente.
Lo otro que trabajé fue el sistema de sonido, abandonado desde el inicio del proyecto. El sistema de sonido usa OpenAL para la reproducción de audio posicional y ogg-vorbis para los archivos de sonido. Esta fue una idea que nunca llevé muy lejos y requiere un estudio y rediseño a fondo.

domingo, septiembre 12, 2010

Cantidad de polígonos

Cuál es el número adecuadao de polígonos para un modelo? Al menos en Ogre, 17 mil polígonos parecen ser un número bastante difícil de manejar si tienes varias entidades con esa cantidad visibles a la vez, sin instancias. En el foro, la cantidad que recomiendan oscila entre 5000 y 10000, incluso se dice que la diferencia entre uno y otro no es notable. Además, otro número a tener en cuenta es el de batches, que son los pases que se dan para mostrar un objeto (mi personaje actual tiene unos 15).
Todos sabemos que un número alto de polígonos es lo que hace más real a un modelo (una buena textura ayuda mucho también). Sin embargo, según lo que he podido leer, 17-20 mil ya son demasiados, incluso para muchos títulos comerciales. El único que parece superar este límite es Mass Effect: según esta lista, Sheppard con toda su parafernalia alcanza los 25 mil (hay dudas acerca de si el nanotraje de Crysis, con 67 mil es un modelo del juego o solo para cinemáticas) y algunos juegos de carreras se extreman en el nivel de detalle de sus autos.
Otra buena lectura es el este artículo de Eric Chadwic, que va un poco más allá del mero número de vértices y entra en asuntos tales como diseño de niveles (advierto, puede volverse complejo).

viernes, septiembre 10, 2010

Más imágenes

Ultimas imágenes:
Los FPs están bajos porque estoy usando una versión del modelo con Subsurface aplicado, lo que eleva enormemente el conteo de polígonos. Si además agregamos la sombra, no es de extrañar que mi 9500GT se arrastre vergonzosamente.
Hay detalles que desgraciadamente no se aprecian, como el mapeo normal del baúl y los ojos del personaje, que aún no he podido integrarlos.

jueves, septiembre 09, 2010

Exporter de Ogre y subsurf

Uno de los problemas que siempre había tenido con el exporter de Ogre para Blender era con el modificador subsurface. El caso era que en el momento de convertir la malla de xml a mesh, se producía un error, si el objeto tenía armature, o sea, estaba (o sería) animado. Hoy al fin encontré la solución al problema.
Para utilizar correctamente el modificador primero debemos aplicarlo, luego en el momento de exportar hay que desactivar la opción Aplicar modificadores. Bl modelo resultante conserva el Subsurf que ya ha sido aplicado por Blender, e incluso los nuevos vértices están asociados al esqueleto y se animan debidamente.

miércoles, septiembre 08, 2010

Gentoo, ¿cada día más difícil?

Tengo que decir que Gentoo no deja de sorprenderme. Esta es una distribución que no es apta para novatos, pero parece que se están superando en su empeño de hacerla casi imposible de usar. Llevo ya varios años utilizando Gentoo y poco a poco el proceso de instalación se ha ido convirtiendo en algo habitual para mi, que podía hacer casi con los ojos cerrados. Lento, pero sin dificultades. Sin embargo, resulta que ahora al problema del portage se suma que la instalación no arranca. El error en cuestión ya lo han debatido en el foro y todos los hilos comparten la misma falta de solución.
El caso es que durante el arranque el sistema intenta hacer un chequeo de las particiones y ahí fsck.ext4 da el palo: la partición no es válida. Si arrancas con otro sistema verás que la partición está ahí y el mismo fsck la reporta como correcta.
Todo parece indicar que tendré que buscarme otra distribución.

martes, septiembre 07, 2010

Calculate Linux

Ayer fue mi primera experiencia con Calculate Linux. Y tengo que decir que ha sido una de las peores. Había descargado el CLDX, que es un LiveDVD de instalación con Xfce. Sin emabrgo, al arrancar, no me levantó Xfce, ni tampoco lo pude levantar después. Al parecer no soportaba mi tarjeta HD5770, que requiere Catalyst 10.5 si no recuerdo mal. En cambio sí podía levantar un shell gráfico.
El gran problema vino a la hora de instalar. Al inicio, no da ninguna explicación de cómo instalar desde el shell, así que me tomó algo de investigación descubrir que el instalador parece ser un programa llamado calculate. Este instalador, sin consultar ni solicitar confirmación alguna, se lanzó a reparticionar y formatear mi disco duro como le dio la gana, desapareciendo en un segundo información y trabajo acumulado durante años.
Afortunadamente mi trabajo más importante está acá en la oficina: el juego y las novelas en las que estoy trabajando. Sin embargo, muchas pruebas de concepto se han perdido. Luego de este desastre no sé si probar Arch Linux, aunque supongo que ya no me queda nada que perder.

lunes, septiembre 06, 2010

Nuevo exporter de Ogre para Blender

El exporter de Ogre para Blender ha recibido una actualización, aunque los cambios parecen pocos, son importantes. En especial uno de ellos me había golpeado: el problema con las tangentes cuando no hay materiales (oficialemtne: cuando no hay información UV). No he podido comprobar si el problema con el modificador Subsurf se ha corregido. Para objetos sencillos parece funcionar, pero una prueba rápida en el modelo del personaje me da problemas.
El autor ha aclarado las dudas respecto a la versión 2.5. El trabajo aún no se ha iniciado, pues el API no se ha declarado estable. En cuanto lo haga, iniciará un nuevo exporter desde cero para la versión 2.5.

viernes, septiembre 03, 2010

Un RPG sin objetos

Ayer les mencionaba de pasada que el sistema de ítems es esencial para un RPG. Pero todo es posible, así que hoy voy a hacer un ejercicio mental para diseñar un RPG sin objetos que recoger. De paso, voy a hacerlo con un universo conocido, y del cual dije una vez que sería el universo más complicado para hacer un MMORPG.
El universo en cuestión es el de Bleach, ese manga/anime, que todos conocemos. O casi todos. Obviaré aquí los detalles de la trama, baste con saber que un juego basado en Bleach debería dejarnos jugar como shinigamis o Arrancar. Ahora bien, tanto los shinigamis como los Espada no se caracterizan por el uso de objetos. Cada shinigami nace con un arma: su zanpakutoh. El poder de un shinigami viene mayormente de ahí. Una zanpakutoh tiene 2 liberaciones: shikai y bankai, y tal vez uno o dos poderes más que son únicos de cada shinigami. En el caso de los Arrancar, el equivalente es Resurrección (así en español) y otros poderes como Cero o Gran Rey Cero. Sin duda, pensarán: jugar 50 niveles para conseguir dos poderes? Inaceptable.
Sin embargo, los shinigamis hacen buen uso de otros poderes mágicos, el kidõ, que se traduce más o menos como artes demoníacas, que nos dan un amplio arsenal de ataques y defensas. Al menos en la serie, los Espadas y Vast Lords (Arrancars de nivel más alto) no hacen uso de kidõ, en cambio tienen regeneración y Hierro (armadura natural). Eso compensa.
O sea, tenemos dos facciones que ninguna usa objetos, así que la mecánica de juego debe enfocarse en conseguir poder más que mejores ítems. Aún sería posible incluir ciertos objetos como multiplicadores de reiatsu o cosas así, pero obviamente, nada que sea el centro del mundo.
El gran problema es que en el universo de Bleach las liberaciones son únicas para cada personaje. Es imposible crear miles de liberaciones para que cada jugador tenga la suya. Pero podemos tomar el diseñador de hechizos de Ryzom para ofrecer a cada jugador la posibilidad de personalizar su shikai, bankai o resurrección, a partir de N puntos base que puedes distribuir en una serie de parámetros: puedes diseñar un bankai que incremente tu fuerza y velocidad por 100, o que sea un ataque de rango demoledor.
Visto así, no parece tan difícil. Sin embargo, la pregunta es si en la práctica tal diseño sería atractivo para los jugadores.

jueves, septiembre 02, 2010

Equipar objetos en el personaje

Un RPG no es nada sin esta característica, todos queremos ver cómo nos queda esa armadura de escamas de dragón, la nueva túnica de mago, la espada de fuego, o lo que sea. Los jugadores  de RPGs somos muy pacotilleros. Un RPG que no tenga esto, mejor que busque una forma de obviar todo el sistema de ítems, que es la base de los CRPG tradicionales.
Ayer hice unas pruebas para ver cómo implementar lo anterior en Ogre. La idea es muy sencilla: adjuntar los objetos a huesos del esqueleto. La prueba rápida consistión en ponerle un yelmo al personaje, para ello utilicé el hueso "head", al cual le adjunté una malla cargada previamente en una Entity. Mediante la función attachObjecToBone podemos adjuntar una entidad al esqueleto de otra, simplemente indicándole el hueso al cual queremos unirla. Las entidades adjuntas siguen la animación del hueso, según me comentó alguien en el IRC que afirma haberle puesto una espada en la mano al robot de los demos de Ogre. Sí, sabemos que el robot no tiene manos, pero era una prueba de concepto.
Ahora bien, podemos emplear para ello el esqueleto normal, o también podemos crear huesos específicos para colocar objetos. De hecho, creo que el escudo es uno de estos casos, aunque en teoría sería posible adjuntarlo a la mano y utilizar el parámetro offset para indicar la posición. A grosso modo, esta es la idea y creo que es aplicable en cualquier otro motor, no solo Ogre.

miércoles, septiembre 01, 2010

Unigine anuncia oficialmente Oil Rush

Hoy Unigine Corp. ha anunciado oficialmente Oil Rush, un juego de estrategia en tiempo real basado en su motor propietario. El juego viene desarrollándose internamente desde el 2009, y me parece a mí que es un intento por colocar un producto en el mercado que muestre la potencialidad de Unigine. El mismo saldrá para Windows, PS3 y Linux, en una apuesta que algunos considerarían bastante arriesgada. Sin embargo, me parece que aparte de cómo se comporten las ventas en Linux, el punto a demostrar aquí, en mi opinión, es que Unigine permite un desarrollo multiplataforma sin costes adicionales. La mayoría de las compañías desarrollan primero para Windows y luego encargan a alguien que porte el juego, o cual encarece el proceso y usualmente el título llega tarde.