7.31.2006

Rez: un juego para mujeres

En estos días he estado jugando al Rez de dreamcast. Es una verdadera gozada de juego, lo mires desde el punto de programador como desde el punto de vista de jugón. Es muy dinámico, tiene un montón de transiciones, todo está sincronizado, etc, etc. Recomiendo que si alguien no lo ha jugado, que lo haga, si puede ser con unos altavoces en condiciones y a un volumen razonable. También es interesante la web en cuanto a que explica la historia, lo que ha inspirado cada nivel, los creadores de la música

Mirando la entrada de la wikipedia me encuentro que algunas mujeres usan el pack de vibracion que viene con el juego (solo japón) para otros propósitos. Pase, siempre se ha bromeado de la utilizad de los vibradores en los mandos de la consola desde el rumble pack de nintendo64 y el dual shock, pero lo que es el colpo es que incluso se han programado drivers para controlarlo desde PC y que se integra con winamp/itunes/etc.

Ver para creer.

Blender para programadores

Blender, como espero todos sepais, es un software para modelado, renderizado y un largo etcétera relacionado con el 3D. Lo interesante es que permite crear scripts en python para manipular los objetos, exportarlos, importarlos y todo lo se te pueda ocurrir.

Como el tiempo es oro, cuando programas algo con cierta entidad siempre surge la necesidad de crearte herramientas que faciliten y agilicen el trabajo. Para crearte las herramientas se puede optar por la vía de programarte todo un GUI en OpenGL (o en tu api favorita), usar algunas de las librerías como MFC, windows forms, wxWidgets, etc, usar un lenguaje no apropiado o usar el apropiado (por ejemplo python). Es posible que se pueda aprovechar mucho del código del motor, juego o lo que sea para hacer la tools, en ese caso es lógico usar el mismo sistema que usas en el motor, sin embargo si no es así, lo ideal es usar un lenguaje que permita trabajar rápido y te de cosas ya hechas. No quiero ser repetitivo, pero python encaja perfectamente ahí.

En algún rato libre estoy programando un juego de carreras de naves estilo wipeout además intentándolo meter todo en 96kb. Lógicamente no voy a guardar todos los datos de geometría en el ejecutable, pudiéndolo generar, para qué voy a gastar espacio a lo tonto? :P. Para generar la pista a cualquier se le ocurre que con unos cuantos puntos y una interpolación cúbica es más que suficiente. Qué es lo que permite hacerlo en 5 minutos? pues Blender da soporte para hacer pequeños GUI con pocas líneas, fácil acceso a los vértices, objetos, etc y además tienes toda la potencia de python.

Por ejemplo, para los puntos que generarán la línea y a su vez la malla se puede exportar de la siguiente forma:


def export_c():
O = Blender.Object.GetSelected()[0];
me = O.getData();
f = open("export.h","w");
f.write("vec3f track[%d]={\n"%len(me.verts));
for v in me.verts:
f.write("{%f,%f,%f},\n" %(v.co[0],v.co[1],v.co[2]));
f.write("};");
f.close();


Basta con seleccionar la malla y exportará los vértices. De esta forma puedo editar los vértices en blender a mi gusto y dar al botón de export, recompilo y ya lo tengo. De otra forma tendría que estar editando los vértices a mano hasta que consiguiera el resultado que quiero.




Las naves, por ejemplo, están basadas en quads con muy pocos polys. Para incluirlas en el código he creado un exportador:


def export(name):
p = Object.GetSelected()[0];
if(not p): return;
objname = p.getData(True);

me = NMesh.GetRaw(objname);
objname = objname.replace(".","_");
f = open(name,"w");
verts = [];
xmax = me.verts[0].co[0];
xmin = me.verts[0].co[0];
ymax = me.verts[0].co[1];
ymin = me.verts[0].co[1];
zmax = me.verts[0].co[2];
zmin = me.verts[0].co[2];

total = [0,0,0]
for x in me.verts:

if(xmax < x.co[0]): xmax = x.co[0];
if(xmin > x.co[0]): xmin = x.co[0];

if(ymax < x.co[1]): ymax = x.co[1];
if(ymin > x.co[1]): ymin = x.co[1];

if(zmax < x.co[2]): zmax = x.co[2];
if(zmin > x.co[2]): zmin = x.co[2];
total[0] = total[0] + x.co[0];
total[2] = total[1] + x.co[1];
total[1] = total[2] + x.co[2];

total[0] /= len(me.verts);
total[1] /= len(me.verts);
total[2] /= len(me.verts);
m = max(xmax-xmin,ymax-ymin,zmax-zmin);

f.write("float %s_verts[]={"%objname);

xpan = (xmax-xmin)/m;
ypan = (ymax-ymin)/m;
zpan = (zmax-zmin)/m;
for x in me.verts:
cx = (x.co[0]-xmin)/m;
cy = (x.co[1]-ymin)/m;
cz = (x.co[2]-zmin)/m;


f.write("%ff,%ff,%ff," % (cx-xpan/2.0,cy-ypan/2.0,cz-zpan/2.0));
f.write("};\n");

f.write("unsigned short %s_inds[]={"%objname);
for x in me.faces:
f.write("%d,%d,%d,%d," % (x.v[0].index,x.v[1].index,x.v[2].index,x.v[3].index));
f.write("};\n");

f.write("meshdata %s_mesh={"%objname);
f.write("%d,%s_verts,%d,%s_inds,0,0,0,0,0};\n"%( len(me.verts),objname,len(me.faces)*4,objname ));




Fácil, no?

De postre un wipeout en 32kb: el loco megabus

Record: post más antiguo

Sí, según blogger mi primer post lo escribí en en 1990 hace ya cosa de 16 años. Qué, alguien me supera?

7.27.2006

Se nota lo del euro

noticia en 20 minutos. Ojo, 20 minutos y escrito por una persona que puede que tenga título de periodista, pero bueno, los datos ahí están. Bueno, también lo citan en elmundo, en la sección de economía.

Yo ya sé donde voy a echar mi currículum, ¿y tú? ¿vas a buscar trabajos en infojobs pudiendo estar de funcionario sin opositar?

7.26.2006

gimp para aventuras gráficas

No hace demasiado tiempo ponía una imagen que mostraba el desarrollo de una pantalla de una aventura gráfica. Ayer, visitando los blogs de omepet he encontrado un pequeño resumen del proceso de creación de un escenario de "la insula de don sancho" y ademas con GIMP, del que hace poco se ha sabido que tiene solo 5 desarrollares fijos :)

7.24.2006

Trabajo: capítulo I, conclusión

Aviso: post personal

El pasado lunes tuve una entrevista en GMV y creo que está bien hacer un pequeño resumen de lo que pasó, sobretodo cara a quien lea esto y tenga que enfrentarse a una entrevista.

La entrevista fue bien, esto es, yo estuve tranquilo y conté todo lo que tenía que contar. Primero me hicieron una entrevista técnica y posteriormente la típica de RRHH, pero esta vez por videoconferencia.

En la entrevista técnica me hicieron las típicas preguntas:
- repaso del currículum
- ronda de "estarías dispuesto a..." [ quedarte más horas | hacer cosas a bajo nivel | etc]
- ronda de "sabrías hacer ..."
- en la carrera qué es lo que más/menos te gustó y porqué.
- inglés

Para terminar me hicieron colocar en el orden que yo quisiera las siguientes palabras: perfección, trabajo ,eficiencia y otra que no recuerdo :P. Curiosa pregunta.

La entrevista de RRHH, aún más típica:

- repaso de currículum, por qué desjaste tal y cual trabajo
- especial atención a la carrera: asignaturas que más/menos te gustaron, definir lo que hiciste en el proyecto fin de carrera incluyendo metodología y tecnologías ( muy incisivo en lenguahjes de programación y SSOO, sobretodo linux)
- tienes pensado seguir estudiando? qué?
- cómo te definirías, qué mejorarías de ti
- has trabajado en trabajo en grupo, cuándo y cómo.
- estarías dispuesto a irte fuera
- qué tal ha ido la entrevista?
- inglés, escrito y conversación.

Una de las preguntas que hacen muchas veces y que es difícil de responder es: por qué crees que te mereces más el puesto que otro?.

En mi caso hubo partes un poco "tensas", no en la parte técnica, en la que yo di hasta donde podía dar, esto es, a nivel de programación/electrónica sé lo que sé y a nivel de autonomía en el trabajo puedo hacer lo que puedo hacer. Sin embargo en la entrevista de RRHH hubo almenos dos momentos difíciles: me preguntó que asignatura me había gustado menos, respondí que economía, asignaturas de sociedad, sin embargo quedé claro que me habían gustado a pesar que habían sido las que menos. Más adelante me preguntó que si quería seguir estudiando, a lo que respondí que sí y le dije que querría estudiar algo que no tuviera mucho que ver con la tecnología, por aquello de cambiar. Entonces me dijo que eso era una contradicción... momento curioso. El otro momentazo fue cuando le dije que había desarrollado el última PFC bajo pocketpc, entonces me preguntó que si usando linux y windows. Le expliqué que pocketpc es una plataforma que trabaja bajo windows mobile y las herramientas de desarrollo lógicamente eran bajo windows. Ella respondió "ah!, lo siento" como si yo hubiera echado en cara que no supiera eso (o eso me pareció), lo más lejos de mi intención.

El resultado... el que esperaba. A pesar de que el puesto de trabajo me parecía muy interesante, me gustaba y creo que encajaría muy bien, la sensación de la entrevista no fue buena, no en cuento al trato con ellos, que creo que fue positivo, si no para obtener el puesto. Sigue rascando.

7.22.2006

OMEPET S.L.

Leyendo uno de los resúmenes que Nae está escribiendo en anaitgames sobre los premios desarrollador_ES me ha resultado curioso el comentario sobre "La insula de don sancho". Resulta que la empresa desarrolladora OMEPET S.L. es un caso interesante de empresa desarrolladora de videojuegos y no solo por dedicarse al desarrollo de videojuegos en España... :). Lo interesante... en su web ponen muy claro las tarifas por cada uno de los trabajos, que la verdad son muchos, casi todos relacionados con videojuegos + mundoweb. Como bien dicen en su web sus servicios están orientados a dos tipos de áreas, el advergaming y los juegos como herramienta de aprendizaje.

Otra de las cosas que me ha gustado es que colaboran con la universidad, proponiendo prácticas y proyectos fin de carrera muy interesantes. Entre los proyectos, existe uno de kiosko de distribución de contenidos para móviles. A tenor de los datos sobre las descargas de juegos para móviles, según la EDGE de Julio "solo" un 5% de usuarios de móviles descargan juegos y algunos de los entrevistados en ese mismo número hacen referencia a los medios de distribución, este podría ser un método diferente de distribución por experimentar.


Sin embargo, lo mejor de todo, es que se han dado a conocer gracias a su talento, seguro sin necesidad de invertir demasiado dinero. Han salido en TV, radio y prensa, además de por las webs y blogs del mundillo.

Pues nada, a jugar a la insulta de don sancho.

7.21.2006

Hola mundo genético


Después de leer en planet stratos dos (uno y dos) hola mundo no podía dejar pasar la oportunidad para poner uno que me ha llamado la atención. Se trata de un hola mundo con algortimos genéticos.

En la misma web se pueden encontrar traducciones de artículos relacioandos con la IA, muy recomendables. Personalmente, uno de los que más me ha gustado es este sobre la IA del quake basada en máquinas de estados finitos. A hilo, otro artículo que he leído en designostic sobre la IA que está por venir.

7.18.2006

Diseño de Juegos para Programadores

Jare ha colgado en su blog las proyecciones de su conferencia en gamelab. Sigue la línea de la charla de la UPC, aunque esta vez más orientada al público cuadriculado, aunque sin perder la visión del director de un proyecto.

Muy recomendables, con cosas curiosas, como el uso de MS project, que pensé que nunca lo vería funcionando en ninguna parte. Espero que detrás de la foto haya todo un proyecto y que no haya servido como foto-recurso.

7.17.2006

Trabajo: capítulo I

Desde hace ya un tiempo me han llamado para alguna que otra entervista laboral, lo cierto es que solo en una de ellas he caído en gracia, aunque después la cosa no fructificara.

Aún recuerdo la prueba de selección de deloitte con cierto agridulce ya que además de ser la primera, fue un cúmulo de sorpresas. Tambien he pasado por tecsidel, esta vez era para unas pruebas psicotécnicas y tecnológicas para una beca en la que finalmente ni me llamaron, lo cual no me extraña, ya que salí cabreado (conmigo mismo, *ejem*). Buen sabor de boca me quedan en mis 3 entrevistas en TID( y 2), dos de ellas para una beca (me llamaron para una tercera pero ya estaba trabajando) y otra más a través de TCPSI, ya con fines laborales serios (nada de becario). Finalmente hace cosa de dos meses, quizás más, me llamaron para otra entrevista, en una empresa formada por dos personas que se dedicaba al I+D. De esa entrevista no he comentado nada aquí y aunque para mi fue muy bien (me sentí agusto), para ellos no debió ser tan buena porque no me llamaron. AH! y otra en cap gemini en el rollo ese que montan en industriales todos los años (FIBEST).

Resumen: deloitte, TIDx3, tecsidel, TVCYL, la empresa de i+d y capgemini. Total 8 entrevistas, "superadas" 1 :), menudo ratio más malo.

Hace cosa de una semana recibía una llamada de GMV madrid, intuyo que de RRHH, diciéndome que habían recibido mi CV a través de infojobs. Me hicieron unas preguntas, imagino que con triple sentido, los de RRHH nunca sabes lo que quieren saber, con lo cual me limité a responder la verdad, así nunca me confundo. Lo que me preguntaron fueron las cosas que más o menos te preguntan siempre, cosas que has puesto en el currículum y las que no has puesto pero que quieren saber: por qué dejaste los trabajos, cuando comenzaste la carrera, cual fueron los pfc's de las carreras, qué tecnologías estaban implicadas en ellos... etc. Mañana tengo la entrevista, supongo, técnica. En principio la empresa me atrae bastante, no solo por lo que se puede leer en su página web, si no por algunas de las conferencias a las que he ido durante mi estancia en la universidad.


Asi que mañana me enfundaré el traje, cosa que me desagrada ligeramente. En otras entrevistas he ido vestido normal, como voy siempre, que es como si consigo el trabajo iré en un futuro. Me parece que si voy así peco de hipócrita, aunque hay una regla no escrita que dice que tienes que ir bien vestido, psé, cosas de esta sociedad de apariencias. A pesar de ceder en este aspecto, a lo que no voy a renunciar es a ser sincero en la entrevista, no tengo problema en decir que no sé hacer y qué se hacer bien, es mejor no llevarse a engaños.

Mañana el desenlace. Más información en próximos capítulos :)

7.15.2006

Usando filtrado de señal en videojuegos

Aviso: frikada
De las cosas que más me gustan es poder aplicar lo que he aprendido a situaciones para las cuales no estaban aplicadas. Cuando estudias electricidad te enseñan lo que es una resistencia, lo que es un condensador, una bobina, los mezclan en ciucuitos de mil maneras y te muestran las ondas que se producen en cada uno de los elementos.

Por otro lado, en los típicos tutoriales de programación gráfica, en aquellos que te enseñan como recoger desde tu programa las pulsaciones de teclado y aplicarlas a la rotación de un cubo. Para rotar un cubo fuciona bien, pero cuando te pones a aplicarlo al juego de naves que estás programando funciona no demasiado bien, hay discontinuidades y no se parece nada a como funciona en los videojuegos "de verdad".

Y qué tiene que ver una cosa con otra? volviendo al tema de los circuitos, el caso habitual era intriducir en el cirucito una tensión en forma de salto para ver como se comportaba el circuito. En la siguiente figura se muestra el comportamiento para diferentes valores de los componentes (arriba la entrada, abajo la salida):



(fuente figura)

Este tipo de filtros se puede aplicar a la entrada de teclado o al movimiento de un objeto para hacerlo más suave.

Por ejemplo, queremos que un objeto se desplace a una velocidad V, lo que se suele hacer es:
obj->vel = V;
obj->pos += obj->vel*delta;

Pero imaginemos que se quiere hacer que acelere suavemente: Se puede, usando un filtro de orden 1:

obj->targetVel = V;
obj->vel += (obj->targetVel - obj->vel)*cte;
obj->pos += obj->vel*delta;

De forma que si falta mucho para llegar a esa velocidad, lo hará más rápido que si falta poco para llegar. Este sería el caso "overdamped response" de la figura. La constante es un factor que indica la velocidad con la cual llegará a la velocidad deseada o en otras palabras, indica la frecuencia de corte del filtro.

Pero la cosa no queda ahí, imaginemos una nave que va a cierta altura del suelo, pilla un obstáculo, se levanta y después cae lentamente y pega unos cuantos botes más antes de estabilizarse. En este caso podemos usar un filtro de orden 2 con la coordenada Z (la que indica la altura) de la nave. En musicdsp.org se pueden conseguir montones de filtros de orden 2, en este caso he tomado el siguiente:

float zfilter(float in)
{
static float buf0 = 0.0f;
static float buf1 = 0.0f;
const float fb = 2.0f;
const float f = 0.1f;
buf0 = buf0 + f * (in - buf0 + fb * (buf0 - buf1));
buf1 = buf1 + f * (buf0 - buf1);
return buf1;
}

basta con hacer:

obj->targetzpos = TerrainHeight(obj->pos) + 3.0; //va a una altura de 3 metros sobre el suelo
obj->pos.z = zfilter(obj->targetzpos);

Variando los parámetros del filtro se puede hacer que responda más rápido a las variaciones o que oscile más. Ojo porque para ciertos valores puede hacer que la salida sea inestable.


Conclusión, es posible usar los filtros para filtrar una entrada de salto, como es presionar una teclar o hacer que los movimientos de un objeto sean más suaves y solo aplicando unas ecuaciones muy simples.

7.12.2006

Premios desarrollador_ES

Hace dos días saltaba la noticia de que este año en la campus vamos a tener la entrega de premios a los mejores desarrolladores españoles de videojuegos.

Es una gran noticia para la gente que se dedica a esto, en particular para los que los que empiezan que tan cercanos me quedan. Muchas suerte a todos ellos y muchas gracias a la gente que se ha movido para que estos premios salgan adelante.

Decir que la noticia ha llegado:

- barrapunto (los comentarios positivos, como siempre)
- vidaextra
- ojgames (de primera mano)

7.10.2006

Sintetizador de música

Hace un tiempo dije que escribiria más a fondo sobre el sintetizador que programé hace tiempo y esta tarde he decidido escribir un artículo hablando un poco sobre como generar música en función de unos pocos datos incluyendo código fuente.

- El artículo: 4k synth



Espero que a alguien le resulte interesante.

7.07.2006

bodas frikis

Estaba mirando el foto de codepixel yme encuentro esto. Los testimonios son para recordar XD.

7.06.2006

Nos vamos a sanfermines

Como viene siendo habitual, me voy a sanfermines. Hay que estar tocado para meterse en aquella ciudad abarrotada de gente, pero tienen algo que enganchan.

Por otro lado, una imagencilla nueva:



Es la misma escena de siempre (envmap+fresnel+ao+difusse), pero esta vez con un poco de color. Esta semana he estado re-implementando un poco el minimotor para poder usar cubemaps de forma transparente.

7.02.2006

Dónde está la gente de Valladolid

Hace tiempo que me pregunto dónde está la gente de Valladolid y, bueno, de Castilla y León. Me explico, leo todos los días planet augcyl, leo las listas de ñuva, sigo algunos foros y blogs, etc y me resulta curioso que haya tan poca gente de Valladolid que se "mueva".

Y me explico de nuevo, no estoy diciendo que seamos más lerdos, ni más tontos, nada de eso, pero me gustaría saber dónde se mete la gente que hace cosas, que programa, que monta charlas y conferencias, etc.

De las personas que conozco, las que más se mueven son la gente de soleup montando talleres, charlas, distros e incluso empresas. También dentro del planet augcyl hay gente que hace (y dice) cosas interesantes, como por ejemplo Diego Calleja, David Grajal o Wonder (ya fuera del planet), pero no conozco nadie más (un respecto de los que me haya olvidado o no conozca) que se mueva en ese entorno.

Imagino que habrá gente de Valladolid (y CyL) que me lea, sobretodo por el planet augcyl, y me gustaría saber si hay gente que se mueva, que programe algo, que le interese y haga cosas. Ya no pregunto nisiquiera le interesa la programación gráfica (oh!)
o el 3D (arg!)

Estaría bien tener un banco de asociaciones/gente que haga cosas en valladolid/CyL.