Indiana Jones con SCUMMVM

2007/12/16

ScummVMSi alguna vez os han entrado sentimientos nostálgicos y ganas de volver a jugar a las aventuras gráficas de la época dorada de los videojuegos, y en especial a las de LucasArts desarrolladas con el sistema SCUMM (Script Creation Utility for Maniac Mansion), podemos hacerlo con la máquina virtual de SCUMM,un emulador libre programado para ejecutar los juegos creados con este sistema.

Nos la podemos descargar desde su página de descargas eligiendo la plataforma que tengamos (funciona para Windows, Linux, Mac, PSP, Nintendo DS, iPhone, GP32, Symbian, Palm…) o bien, si estamos en un Linux con apt, escribiendo:
sudo apt-get install scummvm

Luego simplemente tenemos que conseguir los archivos de los juegos y cargarlos en el scummvm, para echarlos a andar.

En la imagen tengo corriendo el maravilloso Indiana Jones y las llaves de Atlantis, que en su momento compré original y me terminé varias veces (incluyendo los 3 caminos posibles a seguir en la historia).

¿Cómo ejecutar los juegos?

RTFM! (Read The Fucking Manual!)

Bueno, de todas maneras os incluyo unas pequeñas notas como ayuda rápida ^_^

Existe un fichero llamado ~/.scummvm donde tienes la configuración en este formato:

[scummvm]
music_volume=192
midi_gain=100
speech_volume=192
browser_lastpath=/media/Almacen/scumm/monkey2/
aspect_ratio=false
music_driver=auto
lastselectedgame=atlantis
native_mt32=false
subtitles=true
fullscreen=false
sfx_volume=192
talkspeed=60
speech_mute=false
enable_gs=false
multi_midi=false
versioninfo=0.9.1
savepath=/home/danikaze/.scummvm

[atlantis]
description=Indiana Jones and the Fate of Atlantis
path=/media/Almacen/scumm/Indiana Jones and the fate of atlantis/
platform=linux
gameid=atlantis
language=es
donde cada linea es bastante fácil de comprender, y además todo esto se puede editar graficamente desde la GUI de la máquina virtual.

Otras cosas interesantes que incluye ScummVM y que no he visto en la GUI es el parámetro -g al ejecutarlo en linea de comandos, que permite seleccionar filtros para la salida de video, como por ejemplo interpolación para eliminar los píxeles marcados.

Ejemplo de la pantalla inicial del Indy4 sin antialias con escalado a doble tamaño, escalado a doble tamaño con 2xsai, y con escalado a doble tamaño con 2xsupersai (click para agrandar):

Indiana Jones and the Fate of Atlantis @ scummvm, pantallazo-indiana-jones-and-the-fate-of-atlantis-2xsai.png, pantallazo-indiana-jones-and-the-fate-of-atlantis-super2xsai.png

Como podéis ver, esto mejora un poco la imagen, aunque yo soy bastante retro y me encanta el pixel art, así que prefiero dejarlo a 2x sin filtro ninguno 🙂

Anuncios

Crear GIFs con el GIMP

2007/10/13

Desde siempre me ha gustado muchísimo el estilo de dibujo pixel art, del que seguramente hablaré más adelante más veces ^_^. Ayer comencé a hacer un personajillo, y para enseñarlo, pues se me ocurrió hacerle una pequeña animación de un simple parpadeo.

Para hacer la animación pensé en el formato GIF, que se puede crear con el GIMP fácilmente, aunque para los no iniciados puede ser difícil de encontrar cómo hacerlo.

Paso 1: Creando los fotogramas

Lo primero de todo es hacer los dibujos que se usarán en los frames de la animación. Aquí vemos los míos

GIF-capa1 GIF-capa2

Paso 2: Optimizando la imagen

Una vez tenemos todas las capas, hacemos que el GIMP nos optimice la imagen, en cuestión de tamaño y demás, con lo siguiente:

Filtro -> Animación -> Optimizar (para GIF)

Esto nos crea un nuevo documento, habiendo recortado lo necesario de cada capa, para que ocupe lo mínimo, y además las pone en modo composición (esto es, que por ejemplo, en esos fotogramas solo varían los ojos, pues el 1er fotograma está tal cual, pero el 2º solo tiene los ojos, y lo demás es transparente, y a la hora de redibujar, en vez de dibujar todo el frame, se dibuja sólo lo necesario ^_^)

Además, hace una indexación de colores con los mínimos necesarios.

Paso 3: Definiendo la duración de cada fotograma

GIF-capasSi nos fijamos, el documento creado por el paso 2, ha modificado los nombres de las capas, añadiendo (100ms) a las capas y (composed) a algunas. Esto es porque el GIMP pone por defecto una duración de 1/10 de segundo para cada frame, y el composed es para lo que hemos explicado en el paso 2.

Pues, aunque pueda parecer un parche cutre ( xD ), la duración de cada fotograma, se pone en el nombre de la capa con ese formato. Yo en este ejemplo le he puesto 2 segundos a la de los ojos abiertos, y 100 ms para los ojos cerrados, de manera que mi bicho parpadeará cada 2 segundos, durante 100 ms.

Paso 4: Guardando la imagen

Ya solo nos queda darle a Archivo -> Guardar como… y escribir el nombre del archivo con extensión .gif

Cuando nos pregunte como debe manejar las capas, marcamos Guardar como animación, de manera que cada capa sea un frame.

Paso 5: Disfrutando del resultado ^_^

Ya podemos ver el resultado:

Animación GIF creada con el GIMP


Neo Geo en Linux

2007/10/02

Se me ha antojado así por las buenas, volver a jugar al maravilloso Metal Slug mientras sale o no para la Nintendo DS…

gngeo logo

Así que manos a la obra…

Empezamos bajando el emulador gngeo de aquí. Lo descomprimimos e instalamos:

./configure
make
sudo make install

Ya lo tenemos instalado y podemos ejecutar las roms con el comando gngeo nombre_rom. Pero también podemos instalar una interfaz gráfica.Lo mismo, bajamos desde aquí, y la descomprimimos.

XgnGeo

Esta vez, ejecutamos un script de python, que nos lo configurará todo solito ^_^:
sudo python setup.py install

Ya tenemos la interfaz instalada, pero tenemos que configurar donde están las BIOS y el archivo de drivers. Simplemente bájalos de emulatronia y arrancad el xgngeo, donde os saldrá una ventana en la que podeis introducir el directorio donde teneis las BIOS y las Roms.

[Descargar BIOS] [Descargar archivo de drivers]

Configuración del xgngeo

A jugar!


Preparando los .vob para Adobe Premiere CS3 con bash

2007/09/05

Bueno, el otro día comenté sobre como separar archivos .vob (de formato DvD) en capítulos sueltos para editar los videos más comodamente.

La verdad es que me sirvió bastante bien para editar con el Pinnacle 9. ¿Qué es lo que pasó? Que el Pinnacle Studio 9 fallaba más que una escopeta de caña, ya que se colgaba cada dos por tres haciéndome repetir trabajo. Además, una vez conseguí terminar el video, no me dejaba exportarlo a avi, mpg o mp4 ya que petaba en el proceso.

Ojo, no digo que el Pinnacle Studio 9 sea una mierda, ya que la interfaz es super sencilla y cómoda, y además, después de parchearlo a la versión 9.3.4 funcionaba sin problema ninguno. Pero por todos es conocido que el Premiere es más potente que el Studio, y quiero probarlo.

Total, que después de que me “prestasen” el Adobe Premiere CS3 y lo echase a andar, me topé con el primer problema (problema que por cierto también me encontré en el Pinnacle Studio 10, y que debería de ver si esta solución para el Premiere sirve también para este otro programa).

El problema es que, al importar los archivos .mpg que creé de la manera que describí en el otro post, tenía archivos .mpg sin sonido, y claro, como que no tiene gracia…

El problema estaba en la importación del formato de archivo, ya que el Adobe Premiere funciona bien y por otro lado, el video se veía y se escuchaba en el mplayer. ¿Cómo solucionarlo? Pues exportándolo de otra manera distinta. Es fácil, la verdad, simplemente hay que indicarle al mencoder, que al exportar el capítulo, el audio lo pase por libavcodec y codifique en mp2. Es decir, que lo que vimos el otro día quedaría así:

mencoder dvd:// -dvd-device <carpeta_donde_tengas_el_DvD> -of mpeg -oac lavc -ovc copy -lavcopts acodec=mp2 -o <archivo_de_salida.mpg> -chapter inicio-fin

Y ya está. Es un post un poco corto, así que podemos expandirlo con otro tema que me preocupaba un poco la verdad…

Teniendo en cuenta que tengo unos 27 ó 28 días grabados de video, que cada día hay entre 1 y 4 discos, y que cada disco tiene entre 15 y 40 capítulos (la cámara crea un capítulo cada vez que se pulsa el botón record – útil la verdad xD), pues puede haber miles de capítulos, por lo que habrá que escribir ese comando unos cuantos cientos de veces y estar pendiente del ordenador de una manera innecesaria.

Así que me dije… ¿por qué no hacer un script en bash para que lo haga solito casi todo?

Manos a la obra: Hagamos un script que tome tres argumentos: la carpeta origen, la carpeta destino y el número del capítulo por el que vamos. Así por ejemplo llamaríamos al siguiente script:

carpeta_donde_se_guarda/separar_capitulos 2006-08-10/1 2006-08-10 1

Esto cogería el DvD de la carpeta ruta_origen/2006-08-10/1 ruta_destino/2006-08-10 y guardaría los capítulos de ese DvD numerados a partir del archivo 1.mpg

Empecemos con el código:

La primera línea debería de ser algo tal que así, para que sepa con que interpretar el script:
#!/bin/bash

Comprobamos que se hayan introducido tres parámetros (destino, origen, offset):
if [ $# -ne 3 ]; then
echo "Uso: $0 carpeta_origen carpeta_destino archivo.mpg"
echo "Ej: $0 2006-08-10/4 2006-08-10 69"
exit 1
fi

Cogemos el número de capítulos que tiene ese DvD (para despues hacer un bucle). Queda un poco guarrillo porque se ve algo de la salida del mplayer, pero como es un script que solo voy a usar para esto, es simplemente para ahorrarme comandos, y funciona 🙂

Para ello llamamos al mplayer, diciéndole que ejecute el capítulo 1000 del DvD que especificamos. Esto dará un error porque el DvD no tiene capítulo 1000, pero entre su salida, nos dará también el número de capítulos que tiene en total ese DvD. Esa salida la cogeremos y nos quedaremos (con grep) solo con la linea en la que aparece la palabra “chapters”, y de esa linea, con la tercera palabra (con cut), que es el número que nos interesa:

NCHAP=`mplayer dvd:// -dvd-device <carpeta_origen>/"$1" -chapter 100-100 | grep chapters | cut -d" " -f3`

Para coger la salida del comando anterior, recordad que a NCHAP se le asigna la salida de la ejecución del comando que está entre las comillas simples antiguas (en un teclado español, la que está en la tecla del [ o del ^, a la derecha de la P).

Para terminar, una vez tenemos el número de capítulos que hay, los vamos procesando uno a uno, copiando su video y pasando su audio a mp2:

Asignamos dos variables, el capítulo de entrada, que empezará por el primer capítulo del DvD, y el capítulo de salida, que empezará por el offset que hemos especificado en el tercer parámetro al llamar a nuestro script:

CAP_IN=1
CAP_OUT=$3

Para cada capítulo del DvD, vemos si existe. Si existe nos lo saltamos para no sobreescribir el archivo de salida. Además, lo notificamos para luego ver que era lo que había…

while (($CAP_IN <= $NCHAP)); do
if [ -e "<carpeta_destino>/$2/$CAP_OUT.mpg" ]; then
echo $CAP_OUT existe! saltandoselo...

Si no existía, lo procesamos, indicando que es lo que estamos haciendo:

else
echo "<carpeta_origen>/$1[$CAP_IN] => <carpeta_destino>/$2/$CAP_OUT.mpg"
`mencoder -msglevel all=-1 dvd:// -of mpeg -oac lavc -ovc copy -lavcopts acodec=mp2 -dvd-device <carpeta_origen>/"$1" -o <carpeta_destino>/"$2"/"$CAP_OUT".mpg -chapter "$CAP_IN"-"$CAP_IN"`
fi

Y aumentamos las variables del bucle, para no liarla ^^’

((CAP_IN++))
((CAP_OUT++))
done

Y con esto acaba nuestro script. Si queremos luego podemos hacer que si no existe /$2 se cree automaticamente, o cualquier otra cosilla que veais, pero bueno, a mi esto me quita todo el trabajo gordo, por lo que estoy satisfecho con el script ^_^

Además, si no queremos estar escribiendo la ruta completa del script cada vez, podemos hacer lo siguiente:

crear una carpeta ~/bin donde guardaremos nuestros scripts:
mkdir ~/bin

añadir esa carpeta al path, modificando el archivo ~/.bash_rc, añadiendo la siguiente linea:
PATH=export $PATH:~/bin

Así por ejemplo para procesar un día con cuatro DvDs, solo habría que escribir 4 comandos:

separar_capitulos 2006-08-10/1 2006-08-10 1
separar_capitulos 2006-08-10/2 2006-08-10 21
separar_capitulos 2006-08-10/3 2006-08-10 38
separar_capitulos 2006-08-10/4 2006-08-10 61

Con esos cuatro comandos suponemos que el primer DvD tenía 20 capítulos (archivos 1.mpg – 20.mpg), el 2º Dvd generaría los capítulos del 21 al 37, el 3º del 38 al 60, y el 4º del 61 en adelante… y nos hemos ahorrado unos 80 comandos aproximadamente 🙂 (y el tiempo que hay que estar pendiente para ir poniéndolos uno detrás de otro claro está).

Todo esto se podía haber hecho en Windows también, ya que tiene su propio lenguaje de shell script (distinto), pero me parecía bastante más interesante hacerlo en Linux, ya que en Windows poca gente usa la consola, y aprender a hacerlo en Linux es mucho más pedagógico 😛 (además de que es el sistema operativo que normalmente uso).

Ahora ya bien, depende de lo que se necesite, pues se puede usar el Studio de Pinnacle o el Premiere de Adobe, pero tendremos nuestro DvD separado por capítulos en archivos mpeg para una edición cómoda y que sirvan para ambos programas ^_^


Separando .vob en capítulos sueltos

2007/08/11

Para variar estos días, sigo con insomnio… así que voy a aprovechar para poner un post. Realmente iba a postear unas fotillos sobre Málaga, pero como no las tengo aquí, pues aprovecho y pongo otra cosa que hice esta tarde.

Resulta que gracias a una reciente compra de un disco duro nuevo de 400 GB me decidí a volcar todos los videos que grabé de mi pasado viaje a Japón, en formato DvD (así los grababa la cámara de video que llevaba) al disco duro, para su posterior edición (si es que tengo tiempo claro xD).

Pues da la casualidad de que el Pinnacle Studio 9 no lee archivos .vob del formato DvD. ¿Cómo solucionarlo? Pues sabiendo que el formato DvD realmente es mpeg, bastaría con renombrar el .vob a .mpg ¿no? En parte sí, pero el Studio 9 sigue sin leer bien el archivo de video, ya que sólo ve el primer capítulo del archivo (cada archivo es de 1 GB de tamaño, y cada vez que comienzas a grabar se crea un capítulo nuevo). Es decir, que no me sirve.

¿Soluciones? Varias. Después de probar de todas las maneras posibles el que cargase el .vob y darme por vencido, probé el Virtual Dub Mod (el Mod carga mpeg2) y transformarlo a .avi. Esto funcionaba bien, solo que no es capaz de decodificar el audio del Dvd ¬¬u… así que tampoco me servía bien.

Al final, la mejor solución es la más conocida ^_^. Usar el mágico programa y más famoso reproductor de videos de linux: el mplayer y su compañero mencoder. Digamos que tenemos los archivos con su jerarquía DvD (esto es, su carpeta TS_VIDEO y tal…) en una carpeta de nuestro disco duro (que fue como yo me fui copiando los DvDs a medida que grababa en Japón), y queremos extraer todos los capítulos en archivos sueltos para su edición. Pues fácil, basta con usar el siguiente comando:

mencoder -dvd-device <carpeta_donde_tenemos_volcado_el_dvd> dvd:// -of mpeg -oac mp3lame -ovc copy -o <archivo_de_salida> -chapter <inicio>-<fin>

Así, si queremos extraer solo un capítulo por archivo, el parametro <inicio> y <fin> para la opcion -chapter debe ser el mismo. P.e: -chapter 1-1 para el primer capítulo.

De esta manera tenemos listos todos nuestros capitulitos en archivos pequeñitos y manejables para su posterior edición cual Spielberg casero en el Studio 9 (lease el programa que más te guste, ya que puedes sacarlos en el formato que otro programa necesite, en mi caso mpg).

Realmente no soy un gran entendido sobre edición de video (es más, es la primera edición así que voy a hacer, sin contar compresiones y demás… xD)

Y otra cosa a tener en cuenta es que, aunque haya metido este post dentro de la sección Linux, por ser un truquito del mplayer, realmente todo esto lo hice desde Windows, donde también está el mplayer, y es donde lo voy a usar, ya que ahí es donde tengo instalado el Pinnacle ^^’.