13 de junio de 2007
La Fundación Blender, institución detrás del modelador 3D libre del mismo nombre, propone dos proyectos este año, llamados respectivamente Peach y Apricot (Durazno y Albaricoque, para los curiosos). Mientras que Peach se trata de crear una película con Blender y herramientas gratuitas, muy a lo Elephant’s Dream, Apricot es el tema de interés de este blog. Apricot propone el reto de utilizar Blender junto con Crystal Space, un motor 3D libre portable, con el fin de demostrar las capacidades de este software y esa librería.
Room, de Karim Eich. Un ejemplo de lo que se puede hacer en Blender. La imagen lleva la galería de Blender.
La página por ahora sólo muestra el anuncio de la Fundación Blender, así que por ahora no hay más detalles. Probé Blender en algún momento, y otros proyectos me impiden involucrarme en algo así. De todas maneras, espero hacerle seguimiento a ver qué tal les van. Espero que tengan éxito.
Noticia vía Slashdot.
11 de junio de 2007
Una de las limitaciones que posee Pygame, una librería para desarrollar juegos con Python, a la hora de dibujar sprites en pantalla es que sólo es posible hacerlo en coordenadas enteras. Esto, para algunos sprites pequeños, ej. partículas, es un salto demasiado grande y se ve feo en la pantalla. Will McGugan, de Where there is a Will, escribió un pequeño paquete que toma una superficie (un Surface) de Python y lo transforma en una superficie capaz de dibujar objetos con coordenadas fraccionales, justo como lo harías con OpenGL u otra librería 3D. Al hacer este procedimiento con el código de Will, el objeto mismo hace el cálculo de los subpíxeles, y combinado con la animación que le des al objeto el resultado es un movimiento muy suave, como lo demuestra un GIF de ejemplo a continuación:





Las pelotas de encima están dibujadas mediante sub-pixeles, y las pelotas de abajo con coordenadas enteras. La diferencia en la suavidad de movimiento es notable. Requiere el módulo Numpy para poder funcionar. También tiene la desventaja que el precálculo hecho a cada superficie requiere una buena cantidad de memoria, específicamente 9 veces más que una superficie normal para el nivel por defecto de precisión, por lo que es manejable para superficies relativamente pequeñas.
11 de junio de 2007

Se viene una nueva edición de SimCity, aunque no de Maxis esta vez. Aparentemente Maxis está demasiado ocupada con Spore para poder producir ésta por el momento, así que escogieron al equipo de Tilted Mill Entertainment, creadores de Caesar IV, para que ellos se encarguen de crear SimCity Societies, su título tentativo.
En lo personal yo estoy bastante escéptico de este anuncio. En la opinión de este humilde servidor, SimCity 4 fue un fracaso de juego, en comparación con otros títulos como Simcity 3000. SimCity 4 es un juego extremadamente complicado y frustrante, con una gran cantidad de “microadministración”, que es tener que controlar el presupuesto de cada escuela, estación policial, bombero, etc. sumado a unos requerimientos de hardware imposibles para un juego que requiere respuesta rápida para el usuario (ej. mover un zoom era un procedimiento que podía hacer esperar hasta 1 minuto). No olvidemos tampoco que, siendo el primer SimCity sacado bajo la marca EA, es también el primer SimCity desprovisto del nivel de humor sarcástico y retorcido que poseían los otros títulos de la misma línea. Rush Hour, su expansión, hizo un poco por facilitar el juego, que no mejorarlo, ofreciendo la herramienta de consulta de tráfico que permitía conocer las rutas de trabajo de la gente para poder diseñar en torno a ello (el tráfico es uno de los problemas más complicados de SC4), además de los mini-juegos de carros, trenes y helicópteros que ofrecían algo que hacer de vez en cuando.
¿Por qué traigo esto a colación?, porque creo que SimCity 4 es un buen ejemplo de lo que ocurre cuando se pasa la raya de un simulador de ciudades divertido para pasar a ser uno realístico. Maxis ha tomado nota de ello, y ha anunciado que la dirección que tomara Societies será distinta, alejada de la microadministración, y enfocada en la dinámica social de las ciudades, algo que SC3K y SC4 ya habían comenzado a explorar con el “Aura”. La idea es que la sociedad de una ciudad presenta ciertas características (llamadas Energías Sociales en el juego), y las acciones que toma uno van modelando directamente estas características y, por lo tanto, modelan indirectamente la apariencia de la ciudad. 1UP.com presenta un preview de SimCity Societies dando algunos detalles más.
Vía Slashdot. Screenshot cortesía de 1UP.com.
11 de junio de 2007

Geek In Love es un nuevo webcomic, hecho por Ramón Redondo Pérez, con una temática ya conocida: los geeks y su entorno, en particular los geeks y sus posiblidades de ligar. El estilo de dibujo es bien simpático, y bueno… el tono irónico está presente :-) . La página se encuentra en http://geekinlove.com/, para que te rías de tí mismo (sí, tú, el programador de juegos, que lees mi blog ;-) ) mientras tanto.
8 de junio de 2007
Entre el lunes y hoy CuteGodChigüire ha crecido una barbaridad en código. De ser un programa que muestra un solo bloque, ahora es un programa que muestra un terreno completo, con posibilidades de scroll (en posibilidades solamente, porque el programa todavía no es interactivo) y un sistema de sombreado del terreno. A continuación un screenshot del estado actual del programa, y luego una explicación de qué se implementó.

Para los que se están enterando hasta ahora de este blog, Haciendo CuteGodChigüire es una serie que registra el progreso de un reto propuesto por Danc, de Lost Garden, para hacer el prototipo de un juego tipo God utilizando una serie de imágenes que él proporciona. Un ejemplo de juego tipo God es Populous, donde controlas directamente las condiciones de un mundo para que sus habitantes vivan bien. En este caso Danc proporcionó también un diseño de juego que él considera divertido implementar. Como pueden ver en el screenshot, actualmente ya es posible mostrar un terreno en su totalidad. Al final del artículo pueden bajar el código fuente, escrito en Python con la librería PyGame, con el que podrán ver que cada vez que se ejecuta el juego se genera un terreno nuevo.
Este post está escrito para aquellos que quieran saber más de cómo se va programando un prototipo. Casi podríamos llamarlo un Reality Show, pero aquí no se bota a nadie. Tampoco canto ni bailo. Sólo programo. El post podría tener un porcentaje bastante alto de información técnica.
Scrolling
Para ir acomodando el scrolling que se va a hacer el terreno, preparé una nueva clase llamada WorldScrollView. WorldScrollView contiene una superficie sobre la cual se va a dibujar el mundo (representado por la clase World). Al controlar el tamaño de esta superficie podemos dibujar el terreno con la seguridad de no dibujar sobre otras zonas de la pantalla que vamos a utilizar (como la lista de oraciones). A esta clase también se le agregó una variable para poder mover el terreno, y así lograr el scroll que permita ver más terreno.
Algoritmo de sombreado
Lo primero que alguien en el reto notó cuando hizo una primera implementación del terreno es que es muy difícil apreciar las diferencias de alturas entre espacio y espacio. Esto se debe a la particular perspectiva escogida por Danc para realizar los juegos. Alguien incluso propuso que esta perspectiva estaba inherentemente errada. La solución propuesta entonces fue sacar sombreados para los bloques, los cuales se aplican en base a una serie de reglas relativamente simples. Digo relativo porque depende mucho de cómo se programen. La implementación en ActionScript que en Lost Garden alguien muy generosamente puso trata el sombreado con una función que tiene más de 70 líneas. En mi muy mal escrito Python logré hacer esto mismo con 4 funciones que totalizan 35 líneas.
La diferencia está en que yo apliqué programación funcional para detectar las sombras. Este será el tipo de programación que en general aplicaré para las cosas que tenga que hacer sobre todo el terreno, pues esta técnica es ideal para cuando hay que aplicar una misma serie de operaciones para una lista. No es casualidad, pues, que en la clase World el terreno esté hecho con una lista unidimensional.
Para mayor información refiérete a las funciones updateShadows, getTileHeight, getCorner, y detectShadows. Lo que hago es para cada espacio averiguar su altura y la altura de todos los espacios adyacentes, y luego en una lista voy insertando la lista de sombras que aplicaré para el bloque.
Conclusión
Ahorita queda por hacer la interacción por el mouse, que será lo que haré a continuación. La idea es poder comenzar a mover bloques de un lado a otro, para luego poder hacer la detección de las oraciones.
Archivos