martes, 25 de noviembre de 2008

The Call of Cthulhu: Semana del 17/11/08

Aquí estamos otra vez comentando los avances de Cthulhu durante la pasada semana. En este tiempo, el trabajo se ha centrado en tres aspectos: 1) Optimización brutal del código para la reducción del consumo de memoria, 2) Remodelación de la primera escena del juego, y 3) Desarrollo de una aplicación nativa (funciona en Mac OS X, Windows y Linux) para definir los scripts de las escenas.

En la parte de la optimización de código, los avances han sido impresionantes. Apple recomienda que las aplicaciones del iPhone no consuman más de 20 ó 25 MB de memoria. A pesar de que el aparato cuenta con 128 MB, hay que tener en cuenta que el sistema operativo está corriendo por debajo, y que después de días y días sin apagar el iPhone o iPod Touch, haya basura en la RAM que acorte aún más la memoria libre disponible. Por ello, ocurría que en ocasiones, el sistema abortaba el juego y volvía a SpringBoard, el lanzador de aplicaciones del iPhone. Trazando el programa con la aplicación Instruments, se veía que el uso de RAM era de 40 MB en la escena más larga del juego, que es la segunda, y aunque después de apagar y volver a encender el dispositivo el juego no se abortaba nunca, esta situación no daría una buena experiencia al jugador.

Cuando trabajas en proyectos marcándote plazos de finalización, está claro que trabajas a contra reloj y muchas cosas las haces sin pararte después a optimizar recursos. Por ello, es bueno volver sobre el código reescrito y ver las partes críticas para buscar una alternativa. En el caso del Cthulhu, había dos apartados críticos donde las cosas no se habían hecho de la forma adecuada: por un lado, la música de fondo se cargaba completamente en RAM, en lugar de ir haciendo streaming de disco para reducir la carga en memoria; y por otro, cuando en una escena aparecían repetidos varios objetos, se recargaba la imagen para todos ellos.

Así que añadí el streaming de audio, y escribí un sistema para que las imágenes que aparecen varias veces se cargasen una sola vez y se reutilizasen, y realicé algunas otra optimizaciones, aunque estas no tuvieron un gran impacto en el ahorro de recursos. Por ejemplo, gran parte de los arrays dinámicos que utilizábamos en el juego han sido reemplazados por arrays estáticos. Una vez hecho todo esto, los resultados fueron impresionantes. En las partes donde se consumía más memoria, ésta se redujo hasta un 90%. Por ejemplo, la escena que comentábamos que consumía 40MB, ocupa en memoria ahora únicamente 4,6.

En la parte gráfica, se remodeló como comentábamos la primera escena del juego. Aún hay que pulir algunos aspectos, pero la mejoría es bastante notable. Os pongo una imagen del antes y el después (sí, aún falta la puerta en la nueva versión):

Por último, empecé a trabajar en una aplicación con la que definir las características y los scripts de cada escena del juego. Hasta ahora, como quienes se encargan de esto no son programadores, realizaban los scripts con una hoja de Excel, que era después exportada por Visual Basic a un formato binario que se cargaba en el juego. Una de las pegas de este sistema era la manera engorrosa de colocar objetos en la escena, metiendo las coordenadas a mano y luego comprobando con el juego que se colocaran correctamente (si además contamos que las coordenadas van en 3D, y luego se proyectan a la pantalla para que queden correctamente colocadas sobre el fondo, lo hace aún menos intuitivo). Por otro lado, los valores de muchas constantes había que meterlos a mano, haciéndolo más propenso a errores (como ya ha ocurrido alguna vez).

Gracias a esta nueva aplicación, ahora se colocan de forma visual los objetos sobre el fondo de la escena, y se definen los scripts a base de clicks de ratón. Básicamente, se empieza definiendo el fondo de la escena y a continuación se pintan las cuatro esquinas del suelo sobre el que el jugador podrá moverse. Esto además sirve para definir el tamaño y profundidad de la perspectiva en 3D. Luego se eligen los objetos de la lista y se van colocando sobre el fondo. sobre cada objeto se pueden definir una serie de propiedades, como los scripts a lanzar cuando se realiza la acción Mirar, o Coger, o Usar, etc. Estos scripts se declaran en otra pestaña, y básicamente son una secuencia de acciones, algunas de ellas condicionales en función de que se cumplan ciertos requisitos (haber recogido determinado objeto o llegado a cierto punto en el juego).

Aquí tenéis una captura del aspecto actual de la aplicación, aún sin terminar:

En unos días volveremos con otro informe, como siempre.

jueves, 20 de noviembre de 2008

The Call of Cthulhu: Semana del 10/11/08

Este informe llega bastante tarde, pero mejor eso que nunca. La semana pasada fue algo más breve que las anteriores (el martes no fui a trabajar, porque estuve en el iPhone Tech Talk de Apple). La semana se centró en finalizar a nivel de programación todas las características "jugables" que faltaban. Ahora mismo, el motor que he desarrollado para este Cthulhu es ya completamente funcional, aunque algunas de las características tienen fallos y en otras hay que pulir varias cosas.

El último aspecto que faltaba por incluir era la selección de frases en una conversación. Cuando estás hablando con un personaje y debes de elegir la frase a decirle, se despliega en pantalla un panel con las posibles opciones, como es común en prácticamente todas las aventuras (de hecho, no me viene a la memoria ahora una que lo haga de forma diferente). Además de esto, había algunas acciones en la segunda escena que aún no estaban introducidas, y también se añadieron ya todas ellas. Que todas las características del juego estén implementadas no quiere decir que no haya cosas nuevas por añadir; me refiero a que ya todos los componentes que forman la aventura son funcionales: diálogos, selectores de frase, inventario, interacción con objetos y personajes (aunque en el primero falta aún trabajo por hacer), etc. Están pendientes aún las opciones de cargar y salvar partida, y añadir un menú al juego.

Durante la semana actual y toda la siguiente, hasta el 1 de diciembre, mi tarea es optimizar el juego para reducir el consumo de memoria (esto está ya terminado, con resultados sorprendente, en el próximo informe hablaré de ello), revisar los fallos en las características existentes, y mirar cómo se pueden pulir para que todo tenga un aspecto más refinado. En el apartado gráfico, hay aún bastante trabajo por hacer: dedicaremos también este tiempo a rehacer por completo la primera escena del juego, cuya calidad ahora mismo no es equiparable a la segunda, y hay que terminar las animaciones de los personajes.

Con respecto a la demo del juego, se ha decidido que finalmente será una versión privada para los posibles inversores interesados en el juego. Esto se debe principalmente a dos razones: 1) parte del equipo no estábamos de acuerdo en que se hiciera pública una demo de un producto sin terminar, que probablemente no represente la calidad de la versión final, y 2) Apple no permite que se suban a la App Store versiones inacabadas de aplicaciones.

En unos días volveremos con otro informe, que tendrá bastantes cosas interesantes.

miércoles, 19 de noviembre de 2008

Turbo Pascal cumple 25 años

Este mes de noviembre se está celebrando el 25 aniversario de la publicación de Turbo Pascal 1.0. La verdad es que durante muchos años ignoré Pascal por completo. Cuando me inicié en la programación, no lo hice con Pascal, como muchos otros, sino con BASIC, y más adelante di el salto a C. No fue hasta que llegué a la universidad que empecé a utilizar este lenguaje (a día de hoy en muchas facultades se sigue utilizando, y muchas prácticas hay que realizarla con él), y la verdad es que le he acabado cogiendo cariño.

Nunca utilicé Turbo Pascal, sino que para mis trabajos de la carrera he utilizado Free Pascal (el cual es muy similar hasta en el entorno de desarrollo), y hará un año más o menos publiqué un editor de código con las herramientas de Free Pascal integradas para programar en este lenguaje en un entorno más familiar para usuarios de Windows (el IDE de Free Pascal se ejecuta en una terminal de texto, al estilo de los antiguos programas de MS-DOS), al que llamé MaxPascal, y del que pronto debería publicar una nueva versión con unos cuantos cambios que he hecho al editor.

Podéis descargar MaxPascal 0.8 aquí.

Para que funcione correctamente hay que editar un fichero de texto, porque esta versión tiene un fallo. Dentro de la carpeta bin/i386-win32, reemplazar el contenido del fichero fpc.cfg por lo siguiente:
#IFDEF RELEASE
-O2
-Xs
#WRITE Compiling Release Version
#ENDIF
#IFDEF DEBUG
-glh
-Crtoi
#WRITE Compiling Debug Version
#ENDIF
-Sgic
-Fu../../units/$FPCTARGET/
-Fu../../units/$FPCTARGET/*
-Fu../../units/$FPCTARGET/rtl
#IFDEF FPC_CROSSCOMPILING
-XP$FPCTARGET-
#ENDIF
-Xs
-l
-viwn

jueves, 13 de noviembre de 2008

Los ordenadores de mi vida (II): Amstrad PC 286 (1993 - 1994)

Cuando mi Spectrum murió, la economía en mi casa no estaba como para hacer grandes gastos, así que mis padres no pudieron comprarme un nuevo ordenador. En su lugar, me apuntaron a clases extraescolares de informática después de clase, con lo que tuve mi primer contacto con los PCs.

Los equipos que teníamos en el aula de ordenadores no tenían disco duro, sino dos disqueteras de 5 1/4. En cada ordenador, un archivador contenía varios discos: el MS-DOS, WordPerfect y algunos juegos (que algunos días si acabábamos pronto nos dejaban degustar). Normalmente trabajábamos con el programa en cuestión (bien la línea de comandos de MS-DOS, o un documento de WordPerfect) en la primera disquetera, y nos traíamos nuestros discos de casa para grabar los trabajos de cada uno.

Mi única forma de usar un ordenador por aquel entonces era quedarme después de las clases a trastear un poco, y lo único que recuerdo haber programado en el tiempo que estuve sin ordenador fue una versión de TRON en GW-BASIC (un intérprete que venía incluido en MS-DOS). Y es que, a grandes rasgos, GW-BASIC no exigía de una adaptación demasiado traumática para alguien que viniera del Spectrum, ya que continuaba utilizando números de línea para secuenciar las instrucciones.

Por aquellos años, era bastante difícil encontrar un ordenador que costase menos de 200.000 pesetas (1.200€ de hoy, aunque habría que tener en cuenta la inflación desde entonces, con lo que a ojo de buen cubero podrían ser fácilmente 2.000€), pero Amstrad, una compañía que en tiempos del Spectrum se había hecho popular con su CPC, se había pasado al mercado de los clónicos de IBM-PC, ofreciendo el modelo 1512 a un coste muy inferior al de la media de la época, lo que le dio cerca del 25% del mercado europeo. Ése no fue el modelo con el que yo me hice (que tenía un procesador 8086), sino con uno posterior que tenía un procesador 80286 y un disco duro de 40 MB.

Hubo dos razones que influyeron en la compra de ese modelo. La primera convenció a mi padre, la segunda me convenció a mí. En primer lugar, ése era un modelo ya bastante antiguo cuando lo compramos (si no recuerdo mal, los ordenadores más caros llevaban ya procesador 486), con lo cual era mucho más barato que los otros (creo recordar que costó unas 100.000 pesetas -600€-). La otra razón fue que además del mencionado disco duro y la disquetera de 3,5" (que ya hacía tiempo que era estándar), tenía también una unidad de discos de 5 1/4, con lo que podía utilizar todos los programas que había conseguido en ese formato cuando fui a las clases de informática.

Junto al ordenador, me vino un archivador con varios discos de 3,5" con unos cuantos juegos (la mayoría no me llamaban mucho la atención, pero pagaría por conocer los títulos de todos para volver a jugarlos hoy día), el MS -DOS, y algunas aplicaciones de ofimática que jamás utilicé. Éste fue, sin duda, el ordenador al que menos partido he sacado, ya que misteriosamente dejó de funcionar cuando hacía poco más de un año que lo tenía. En este caso, MS-DOS no incluía GW-BASIC, sino QBASIC, con el que aprendí la programación estructurada tradicional sin números de línea.

"Canción de Hielo y Fuego" será adaptada a la televisión

A pesar de que llevo tiempo oyendo por todos lados lo fantástica que es esta saga, he de entonar el mea culpa y decir que no me he empezado Juego de Tronos, la primera parte, hasta esta misma semana. Aún no voy por la mitad del primer libro (no tengo demasiado tiempo libre, así que sólo suelo leer en el tren), pero me está pareciendo cuanto menos apasionante.

Hace un rato me llegó un mail de mi jefe que decía que la serie está siendo adaptada a la televisión por la HBO, y que ya está escrito el script del episodio piloto, que debería entrar en producción en breve. El propio autor de los libros, George R. R. Martin, nos dice por medio de su blog que está entusiasmado con el proyecto. Y yo también, por supuesto.

miércoles, 12 de noviembre de 2008

Think Different

Mucho antes de la actual campaña Get a Mac de Apple, la compañía adoptó un eslogan que caló muy hondo en muchos usuarios, y que representaba bastante bien la manera de hacer las cosas de Apple. Este eslogan era Think Different, que se inició poco después de la vuelta de Steve Jobs a la compañía, y que arrancó con el que es el anuncio más bonito que he visto en mi vida. Aquí lo tenéis:



El precioso mensaje del anuncio os lo pongo a continuación (en inglés):

Here's to the crazy ones.
The misfits.
The rebels.
The troublemakers.
The round pegs in the square holes.
The ones who see things differently.
They're not fond of rules.
And they have no respect for the status quo.
You can quote them, disagree with them, glorify or vilify them.
About the only thing you can't do is ignore them.
Because they change things.
They push the human race forward.
And while some may see them as the crazy ones,
We see genius.
Because the people who are crazy enough to think
they can change the world,
Are the ones who do.

Otra cosa que me fascina de Apple es su atención a los detalles. En Leopard, la aplicación de edición de textos TextEdit contiene ese texto en su icono, como podemos apreciar en esta imagen:A pesar de que los nuevos anuncios tienen algo de gracia, me encantaría volver a ver a Apple haciendo campañas con un mensaje tan bonito como ésta.

martes, 11 de noviembre de 2008

The Call of Cthulhu: Semana del 03/11/08

Una vez más os muestro la evolución del juego durante la última semana. Ésta fue una semana bastante breve, especialmente a causa de que he estado unos días fuera de Madrid, y además ha coincidido nuestro traslado a unas nuevas oficinas (más lejos de casa, pero realmente impresionantes).

Durante esta semana, el trabajo se ha centrado en el desarrollo de la interfaz del inventario de juego. La semana pasada ya se dejaba ver la pestaña del inventario cerrado, pero hoy os mostraré el mismo desplegado. Además, la imagen del inventario ha cambiado desde lo que os mostré la semana pasada. Ahora, cuando está cerrado, éste es el aspecto que tiene:
Al tocar la pestaña de la esquina superior izquierda, de desplegará sobre la pantalla el inventario, y el resto quedará oscurecido para que no distraiga. Así es como se ve una vez desplegado:
Se muestran las distintas casillas con los objetos, y los iconos de la parte inferior corresponden respectivamente a las opciones Cargar, Salvar, Ver Objetivo (el próximo objetivo que debemos cumplir en el juego) y Ver Descripción (nos da la descripción del objeto que arrastremos sobre él).

Arrastrar un objeto sobre otro intentará combinar ambos (si es posible). Arrastrar un objeto fuera del área del inventario cerrará éste para que podamos ver la escena y soltar el objeto sobre otro en la misma, lo que significa "Usar este objeto sobre el otro". Aquí un ejemplo de cómo se ve el collar que aparece en el inventario al arrastrarlo:
Mientras que en los iconos del inventario predominan los tonos marrones, al seleccionarlo se ve el icono a todo color, como puede observarse en la imagen.

Otra cosa que ya llevaba un tiempo incluida, pero que se ha depurado recientemente, ha sido la rueda de selección de opciones sobre objetos y personajes. Por ejemplo, al tocar sobre un objeto en la escena, se despliega una rueda como la de la imagen de la derecha. Empezando por arriba, y en sentido horario, los iconos corresponden a las acciones Mirar, Usar, Mover y Coger.

Cuando seleccionamos a un personaje en lugar de un objeto, se muestra una rueda como la de la imagen de la izquierda, con la opciones Mirar, Hablar y Dar.

Bueno, en unos días volveremos con más novedades. Ahora acabo de volver del iPhone Tech Talk Tour en Madrid, y la experiencia ha sido enormemente positiva.

jueves, 6 de noviembre de 2008

Los ordenadores de mi vida (I): ZX Spectrum +2A (1988 - 1992)

Me apetecía echar la vista atrás y recordar los equipos que he ido teniendo, desde mi Spectrum hasta hoy, y el uso principal que di a cada uno de ellos. Este artículo estará dividido en varias entregas, para poder extenderme cuanto quiera en cada uno y no hacer un post gigantesco.

Durante muchos años de mi vida, viví en un piso en Santander con mi madre, mi abuela y bisabuela, y más tarde mi hermano (mi padre estaba en Burgos estudiando Arquitectura cuando yo era pequeño, mis padres me tuvieron muy jóvenes). Nací allí, y aquel barrio es uno de los que más recuerdos me evocan. Cuando tenía unos cinco años, mi bisabuela enfermó, y por aquel entonces mi padre volvió a Santander, así que para darla una mayor tranquilidad, mis padres y yo nos mudamos a un piso que quedaba a menos de cinco minutos andando de allí.

Por aquel entonces, me hice muy amigo de uno de mis vecinos del edificio, y recuerdo que nos gastábamos la paga de la semana en echar partidas en un salón recreativo que quedaba al lado de casa. Además de aquel salón, nos conocíamos las recreativas que había en todos los bares del barrio, y ya por entonces, viendo esos juegos a todo colores en aquellas máquinas mágicas, ya empezaban a llegarme ideas para desarrollar mis propios juegos, a pesar de que no tenía ni idea de cómo podrían hacerse.

Al año siguiente, mi hermano nació, y mi abuela me regaló por mi primera comunión uno de los mejores regalos que me han hecho nunca: mi primer ordenador. Se trataba de un ZX Spectrum +2A, con 128 flamantes kilobytes de memoria, que probablemente ha sido también el primer ordenador de mucha gente en España (mi primo y otro amigo también se hicieron con uno por aquellas fechas, y eran los únicos que conocía con ordenador). Recuerdo el día que mi abuela me dijo que me compraría un ordenador, y fui con ella y con mi madre a un bazar. Allí estaba el Spectrum, que se vendía con 6 juegos (Phantomas, Phantomas 2, Camelot Warriors, Nonamed, Game Over y Army Moves), y recuerdo lo feliz que era con aquella caja en mis manos de vuelta a casa.

Una vez allí, instalamos una mesa de camping junto al mueble del televisor para que pudiera colocar allí el ordenador, y lo primero que hice fue cargar el Game Over. Los juegos tenían menos colores que los de las recreativas, eso estaba claro, pero... ¡tenía mi propio ordenador! La paga ya no me era suficiente para jugar a la recreativas, porque empecé a comprar la revista Microhobby, que me traía con cada número un cassette (a veces dos), con algún juego completo, demos de los últimos lanzamientos, y algún programa más. Aparte de los juegos que me regalaban en cada cumpleaños y otros acontecimientos especiales, la mayoría de juegos que jugué en el Spectrum fueron gracias a Microhobby. Y no es lo único que tengo que agradecer a la revista: en ella podías encontrar listados para hacer tus propios programas. Bien eran demos que sólo tenías que copiar, y mostraban por ejemplo un texto deslizándose por la pantalla, o bien lecciones para que aprendieras a hacer tus propios programas. Algunos de los listados estaban en código máquina, algo que por entonces se me antojaba una ciencia imposible de aprender, pero gracias a BASIC pude aprender a programar.

Aunque a un niño de poco más de 6 años se le puede hacer complicado entender ciertos términos. Por ejemplo, recuerdo cuando un usuario preguntó en la Microhobby cómo hacer para que el protagonista de su juego no atravesara las paredes del nivel. Le respondieron que lo más fácil era apuntar las posiciones de las paredes en una tabla de datos y comprobarlo antes de mover el gráfico hacia una posición. ¿Una tabla? ¿Cómo que una tabla? Bueno, yo había comprado alguna vez una tabla de okume en la librería para los trabajos manuales del colegio, así que quizá sería algo parecido. Me bajé a la librería y pedí una tabla de datos, y por supuesto me volví a casa frustrado por no haber conseguido mi propósito.

Tras mis primeros programas (todos ellos tremendamente simples e inútiles), gracias a un regalo de mi madre di un paso de gigante en esto de programar. Mi madre se suscribió al Círculo de Lectores, y el primer libro que compró fue para mí: BASIC Para Niños. Ya no me conformaría con copiar los listados de Microhobby, por fin empecé a entender la lógica de la programación, los bucles, las variables, las sentencias... se abrió la puerta al camino más importante que he tomado en mi vida.

Pero como todas las cosas buenas de la vida, no pudo durar para siempre. Estaban ya entrados los 90, cuando un día mi Spectrum no quiso arrancar. No podía creerlo, el causante de tantas horas de diversión, el que me había acompañado en mis primeros pasos en la programación, había muerto. Mi madre lo llevó a una tienda de ordenadores donde supuestamente reparaban ordenadores (en la forma en que reparan ordenadores en las tiendas: formatean y, en todo caso, reemplazan componente estropeados). El problema es que el Spectrum era ya cosa del pasado, le dijeron a mi madre que ese ordenador no valía por entonces ya para nada, y que mejor que comprase un PC. Volvió a casa. Me lo dijo. Grité y lloré porque mi Spectrum se había ido y no volvería.

Fueron unos cuantos años los que el Spectrum estuvo conmigo, y aunque es posible hacerte con uno de segunda mano tirado de precio (cosa que haré un día de estos), no es lo mismo. La infancia no volverá.

miércoles, 5 de noviembre de 2008

Felicidades, Presidente Obama

Hoy me levantado media hora antes de lo habitual, sólo para tener tiempo para corroborar en Internet lo que cuando me acosté ya se predecía: Obama ha tenido una victoria histórica.

La verdad es que, aunque tanto demócratas como republicanos me quedan muy a la derecha, visto lo que han significado los últimos 8 años en Estados Unidos, gobernados por el presidente más paleto que ese país ha tenido en su historia, uno veía la posible victoria de Barack Obama con optimismo, como un paso a mejor que sin duda era necesario.

Señor Obama, no defraude a todos los millones de personas que le han depositado ayer su confianza. Y los muchos otros millones en el resto del mundo que, sin tener la opción de votar, aguardaban expectantes su victoria. Felicidades.

lunes, 3 de noviembre de 2008

The Call of Cthulhu: Semana del 27/10/08

El informe de lo realizado durante la semana ha llegado un poco tarde. En la última entrada indicamos que ya se habían solucionado todos los fallos y que la transición de la primera a la segunda escena transcurría sin problemas, pero aún se mostraba únicamente el fondo de la escena con el personaje principal, sin otros objetos ni personajes.

Durante toda la semana, se fue rellenando la escena con todos sus datos, personajes y objetos con los que interactuar. Había (y aún sigue habiendo) multitud de acciones ejecutadas por los objetos que aún no están implementadas, pero ahora al menos vemos una escena casi terminada. Puede parecer que no se hubiera avanzado mucho, pero cuando hice el informe anterior la escena se veía como en la captura que puse en aquella entrada, mientras que ahora la vemos así:
No hagáis caso del icono que asoma en la parte izquierda de la pantalla. Se hablará de él en la próxima actualización ;)