30 nov. 2005

30/11/05: Tonos sepia, y acabando prácticas

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimotrigesimocuarta anotación:

Aunque hasta el momento, las prácticas para hacer en casa están siendo fáciles, escasas, y cortas, esta semana he tenido la suerte de recibir unos 4 o 5 encargos de prácticas de esta índole: ATC, Lógica, Enseñanza y aprendizaje, ISoft (de eso siempre hay), y Redes.

Como ya dije, ninguna de ellas entraña una complicación excesiva ni un trabajo a destajo, pero agobia mucho saber que tienes muchos trabajos pendientes, así que el comienzo de esta semana me ha resultado bastante molesto. Menos mal que entre ayer y hoy he hido haciendo esos trabajos.

Aún me queda, no obstante: he de terminar ATC (rellenar campos en una hoja de Excel y una pequeña memoria comentando dos o tres pijadas), compilar Lógica (no tengo intérprete de LISP en el ordenador), instalar el Toolbook para Enseñanza y Aprendizaje (que llevo 3 días y no soy quien a hacerlo), y comprobar un par de cosas de las otras asignaturas.

Aun asi que he conseguido sacar un poquito de tiempo para el engine 2D, y he encontrado la fórmula para convertir de RGB a tonos sepia, que he programado en Pixel Shaders. Mi intención era hacerla un poco más genérica para permitir variar el tono, pero no resulta tan sencillo como cambiar una variable así que ya lo haré otro día :).

En fin, el estrés se ha reducido pero aún no se ha eliminado. Y para colmo mañana estoy de 9 a 9 en la universidad :( En fin, al menos es mi cumpleaños :)

29 nov. 2005

29/11/05: Pequeña actualización

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimotrigesimotercera anotación:

He subido una versión del MSN-Countdown que debería solucionar las peleas con el Windows Media Player cuando dejamos el programa en modo de detección de procesos (lo que hacía era comprobar cada segundo si había un proceso. Si lo había, mostraba el mensaje adecuado. Si no, enviaba un mensaje al Messenger borrando el texto. Ahora tan sólo lo hace la primera vez que no detecte nada, lo cual debería acabar completamente con el problema).

Disponible en el enlace de siempre

27 nov. 2005

27/11/05: Parcheo y mejoras

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimotrigesimosegunda anotación:

AVISO! POST MUY TÉCNICO.

He actualizado el cronómetro de MSN-Messenger, nada serio de todas maneras. Tan sólo he añadido una línea al comienzo del XML, especificando el encoding. Lo hice porque el programa no funciona correctamente si no lo pones y metes acentos o caracteres raros en el archivo de texto. Presumiblemente, por la forma cutre en que se convierten las strings de WCHAR a TCHAR (o algo así), cualquier caracter por encima del 256 en la tabla ASCII fallará al mostrarse, me temo. Pero al menos no dejará de funcionar.

El otro cambio se ha hecho en el motor 2D en C#. He creado un par de Pixel Shaders más, que sumados al de inversión de colores que había creado antes, hacen un total de 3.
El primero de los nuevos simplemente duplica las componentes RGB del color (o una sola de ellas, si se desea). Esto hace que los colores se vean mucho más fuertes.
El segundo es un poquito más complejo (aunque sigue siendo muy facilón): Si una componente RGB es menor a 128, la divide a la mitad. Si es mayor, le suma la diferencia entre 256 y su valor. Es decir, en cualquier caso se alejan del punto medio. Esto logra una especie de contraste que queda bastante cuco.

Posiblemente busque a ver si encuentro algún PS ya hecho que cambie el color a un tono sepia. Seguro que ya existen, es un efecto bastante típico.

La segunda mejora al motor ha costado bastante más, se trata del Render To Texture. Esta técnica y yo somos viejos conocidos ya, ya me dio bastantes dolores de cabeza al programar el Little Racers 2 (aunque en aquella ocasión fue bajo OpenGL).
En Direct3D la cosa resulta más sencilla que en OpenGL, porque las texturas permiten ser modificadas sin tener que hacer nada raro antes. Eso sí, al terminar hay que acordarse de regenerar los mipmaps, si no pasarían cosas graciosas :).

Así pues, el dibujar algo sobre una textura no resultó ser el inconveniente. El inconveniente fue el dibujarlo como y donde queríamos. Me explico:

Para hacer el Render To Texture, lo que hace Direct3D es crear un nuevo "Render Target", o dispositivo donde se va a hacer el renderizado (Es decir, que en vez de dibujar al buffer de la pantalla, dibujaremos a la memoria de la textura). Por tanto, a todos los efectos es como una pantalla más, con sus matrices de transformación, etc. Por tanto, hay que dibujar todo en las coordenadas adecuadas, para que aparezca donde queríamos que apareciese. Como las coordenadas ya estaban siendo transformadas para aparecer en pantalla, me costó bastante descubrir qué matrices había que tocar y qué matrices no, cuales ignorar y cuales no. Al final, lo conseguí. Surgió un problema menor, y era que estaba redibujando toda la textura, lo que daba un parón de más de un segundo en texturas grandes. Eso fue fácil de solucionar, especificando una región concreta de la textura en vez de toda ella.

Ahora tan sólo me queda hacer una textura que sea un manchurrón de sangre, y ver qué tal queda el suelo repleto de ella :).

Sigo sin poner link por culpa de la mierda de las versiones de DirectX :P.

PD: Manchurrones de sangre hechos :).

23 nov. 2005

22/11/05: Pixel Shader!

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimotrigesimoprimera anotación:

Tras unas largas prácticas de informática gráfica, decidí aprender cómo se usan los Pixel Shaders, y ver si existía posibilidad de usarlos en el motor 2D que estaba haciendo.

Probé y... tachán. Es un soporte pelín cutre (la mayor parte de cosas no están encapsuladas aún), pero el caso es que funciona. Lo difícil es crear efectos. El pixel shader funciona como un lenguaje de programación más, que se encarga de compilar y ejecutar el propio procesador gráfico. Permite acceder a los colores, vectores, y cosas así, para modificarlos.

El efecto que he creado para probarlo consiste en una simple inversión de los colores, de forma gradual y controlable desde el programa.

No pongo enlace porque A) Es tarde y B) Sigue existiendo el problema de las versiones.

A modo de curiosidad, las diferencias entre el Pixel Shader 1.0, 2.0 y 3.0 (que soportarán las tarjetas según su época, por ejemplo yo no tengo ninguna con soporte Pixel Shader 3.0) se definen básicamente por el número de instrucciones que pueden aplicarse en cada pasada. Es decir, si tenemos PS 2.0, no podremos realizar más de 20(nº de ejemplo) instrucciones ensamblador por cada pixel de pantalla, etc.

En fin, marcho que es tarde. Que durmais bien.

19 nov. 2005

18/11/05: Las 20 mejores armas de juegos FPS

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimotrigésima anotación:
Tras ver dos rankings con las armas más votadas de juegos de acción en primera persona(Primero y Segundo, he decidido hacer el mío propio. Dado que la cantidad de armas que han aparecido es muy elevada, he aumentado el ranking a 20 armas :). Espero no dejarme ninguna importante...

20-Lanzamoscas (o como se llame) (Half Life)
--------------------------------------------
¿Para qué apuntar? Los propios proyectiles se encargan de buscar al objetivo...

19-Arma congelante (Duke Nukem 3D)
----------------------------------
Proyectiles que rebotan y congelan a los malotes... hay que acordarse de rematarlos después, o se recuperarán

18-Lanzallamas (Return to Castle Wolfenstein)
---------------------------------------------
Hay que ver lo rápido que pierde la compostura la gente cuando está ardiendo.

17-Cuchillo (Soldier Of Fortune)
--------------------------------
Arma de destrucción masiva donde las hubiese. No sólo permitía mutilar a los cadáveres (o aspirantes a cadáver), además podías lanzarlos a distancia.

16-Lanzacohetes (Unreal Tournament)
-----------------------------------
Hasta seis cohetes, teledirigidos o no, también utilizables a modo de granadas... mortífero.

15-Trip mines (Half Life)
-------------------------
Para ser trampas, eran fáciles de detectar, pero cuando alguien la activaba, seguro que se acordaba del que la puso.

14-Ballesta (Half Life)
-----------------------
El primer arma de francotirador que vi en acción. Menudos arponazos pegaba.

13-Devastador (Duke Nukem 3D)
-----------------------------
Su nombre lo dice todo. Minicohetes disparados a la velocidad de una ametralladora. Di adiós a tu munición.

12-Arma gravitatoria (Half Life 2)
----------------------------------
Un arma la mar de curiosa, que daba libertad al usuario para aprovechar los elementos del entorno.

11-Sable Láser (Cualquier juego de Star Wars)
---------------------------------------------
Una defensa casi perfecta ante los ataques enemigos, una potencia más que respetable, y un look impresionante.

10-Rifle Gauss (Half Life)
-------------------
Carga el disparo para más potencia... pero recuerda disparar el arma o te harás pupa.

9-Pistola (Serious Sam)
------------------------
Munición gratuita, puedes llevar dos a la vez, precisión mortal, daño más que suficiente... una joya.

8-Escopeta (Quake 3)
--------------------
Muerte por indigestión de plomo.

7-Granadas flash (Counter Strike)
---------------------------------
No suele provocar muertes por sí misma (aunque en el Source es posible), pero su efectividad queda fuera de toda duda.

6-Railgun (Quake 3)
-------------------
Dos palabras: Impressive.

5-Cañón (Serious Sam)
---------------------
Hay pocas sensaciones más agradables que frenar estampidas de toros gigantes a cañonazos.

4-Redentor (Unreal Tournament)
------------------------------
La explosión más devastadora del mundillo, misil enorme y teledirigido... todo a lo grande.

3-m4 (Counter Strike)
---------------------
Con silenciador, sin silenciador... en cualquier caso tiene un carisma que ya quisieran otras armas.

2-Patada (Duke Nukem 3D)
------------------------
Humilla a los monstruos matándolos a base de bota... y si te cansas, siempre puedes atacar con las dos piernas a la vez.

1-Shock Rifle (Unreal Tournament)
---------------------------------
Dos modos de disparo (lento y con área de efecto, o instantáneo y empuja al oponente), combinables entre sí para obtener un tercero, y un bonito color azul en sus proyectiles. Incluso existía la versión potenciada para el modo Instagib. El gran campeón.

14 nov. 2005

13/11/05: Pequeños cambios

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimovigesimonovena anotación:

Tras estar usando durante un tiempo el programilla que aquí había puesto, descubrí un bug que se mostraba al apagar el pc: Simplemente, el programa no se cerraba, y por tanto el pc no se apaga (o reinicia, o lo que sea). He solucionado el problema.

Además, he puesto un nuevo enlace en la sección de webcomics, a un webcomic que debe de ser de los más vetustos que existen. Se llama 8-Bit Theatre, y relata una versión desfigurada de la historia del Final Fantasy I, con los personajes originales :). El diálogo es de lo mejorcito, y tiene cientos y cientos de tiras, para no aburrirnos.

Por poner un ejemplo, cojo la tira que estaba leyendo ahora, y la frase que suelta un personaje secundario "¡Aaah maldito Mago Rojo, tu superior Inteligencia de 9 ha detectado e inutilizado mi astuto plan para dominar el mundo mediante la Teoría del Caos, haciendo pequeñas acciones mundanas sin ninguna relevancia!". Divertido, ¿verdad? El problema es que las tiras suelen tener mucho texto (en inglés, por supuesto). Aun así, lectura recomendada, al menos unas cuantas viñetas.

Otro cómic que añadiré ahora es Concerned, que usa el Garry's mod (mod del HL2 que permite posicionar los personajes y objetos del juego como deseemos) para relatar la historia de Gordon Frohman (no confundir con Freeman). No está tan bien como el anterior, pero tiene menos texto y resulta más fácil de leer.

9 nov. 2005

09/11/05: Cronómetro MSN Messenger 1.6

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimovigesimooctava anotación:

La versión de ayer no me había terminado de convencer, especialmente el formato del archivo de mensajes (demasiado estricto). Además, descubrí una manera de mostrar distintos tipos de icono a la izquierda del texto (en vez de los típicos cascos y el hiperenlace que no hace nada bueno).

Así que aquí va una nueva versión, que usa un formato de fichero XML para los mensajes, y permite cambiar el tipo de cada uno, de un total de 4 diferentes: Música (tipo 0), Juegos (tipo 1), Office (tipo 2) y estándar (texto en negro, tipo 3).

De nuevo descargable desde aquí

8 nov. 2005

08/11/05: Cronómetro MSN Messenger 1.5

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimovigesimoséptima anotación:

Exactamente un mes después de la primera versión, sale la segunda. Esta versión incluye un par de mejoras.

La primera consiste en permitir que el contador vaya al revés (en vez de disminuir, aumenta la distancia). De esta forma, podremos poner cosas como "hace 300 días,6 horas y 12 minutos que no hago nada útil", por ejemplo.

La segunda, más complicada, se basa en un archivo de texto adicional (mensajes.txt) constituido (estrictamente) por varias lineas con dos cadenas separadas por un tabulador cada una. La primera cadena indica un nombre de ejecutable (por ejemplo, HL2.EXE), la segunda, el texto que tendrá que aparecer si se detecta este proceso en ejecución (por ejemplo, "Jugando al Counter Strike").

Por lo tanto, el programa ahora muestra el contador (si se desea), y si detecta un proceso en ejecución especificado en la lista, cambia el texto al correspondiente a ese proceso.

Además, he limpiado (un poquito) el código, pero sigue siendo una chapuza bastante fea (especialmente el tema de cargar los ficheros y una conversión cutre de cadenas de texto normales a unicode :). Además, por supuesto, de mi habitual falta de comentarios en el código.

En fin, os podéis bajar la nueva versión del mismo enlace de la anterior, aquí

5 nov. 2005

05/11/05: Verificación de comentarios

Diario de Guerra de Alejandro González, Alias "WaaghMan". Centesimovigesimosexta anotación:

He activado una opción que pide una verificación de texto a la hora de hacer comentarios. El spam que estaba recibiendo este blog empezaba a ser exagerado (unos 2 comentarios por día).