por
Howard Wen
08/21/2003
ScummVM
es un emulador de motores de videojuegos, que permite jugar a las
aventuras clásicas de LucasArts como son The Secret of Monkey
Island, Day of the Tentacle, y Sam and Max Hit the Road, en Linux,
Mac OS, PocketPC, Windows, Amiga, MorphOS y otras tantas plataformas.
Existe incluso una versión para la antigua consola de Sega
Dreamcast, y está en desarrollo una versión para la consola
Playstation 2. ScummVM emula y mejora
el motor SCUMM ("Script Creation Utility for Maniac Mansion")
que LucasArts empleaba en estos juegos.
Iniciado
en Septiembre de 2001, el proyecto ScummVM provocó la ira de
LucasArts en lo concerniente a la publicación de ScummVM bajo el
formato GPL. Mientras escribo esto, ambas partes se hayan bloqueadas
en este asunto. Los programadores de ScummVM instan a los usuarios a
que obtengan copias legales de los juegos SCUMM de LucasArts. ScummVM
accede a los datos de los disquetes o CD-ROMs originales a la hora de
ejecutar los juegos; pero como sucede con la mayoría de emuladores
para otros motores, los datos de las copias piratas sirven
igualmente.
Tras
realizarse esta entrevista, pero antes de ser difundida, se han
publicado las versiones 0.50 y 0.51 de ScummVM. Dichas versiones
añaden soporte para los juegos de AdventureSoft, Simon the Sorcercer
1 y 2, así como para el juego Beneath a Steel Sky de Revolution
Software.
Como
respuesta al soporte ofrecido por ScummVM, Revolution ha permitido al
proyecto la distribución del juego de forma totalmente gratuita.
¿Quiénes
son sus autores?
Ludvig
Strigeus
es en la actualidad un estudiante de informática de 22 años. Vive
en Gotemburgo, Suecia. Ludvig programó la primera versión de
ScummVM.
James
Brown
tiene 20 años y es programador. Reside en Perth, Western Australia.
Es actualmente es líder del proyecto ScummVM. Según él, "Supongo
que lo soy, porque nadie más quiso que le despertase el departamento
jurídico de LucasArts a las 3 de la mañana."
Max
Horn tiene 23 años y es estudiante de matemáticas y ciencias
informáticas en Darmstadt, Alemania. Contribuyó al soporte inicial
para el juego Curse of Monkey Island, y ayudó a corregir muchos
errores y a rematar la interfaz de usuario.
Torbjörn
Andersson,
32, programador que vive en Säffle, Sweden. Se centra en “corregir
pequeñas cosas, solucionar errores o añadir características no
demasiado esenciales, pero que ayudan a pulir el aspecto gráfico y
sonoro."
Turno
de la palabra para los Programadores
O'Reilly
Network: ¿Cuál fue vuestra motivación a la hora de tomar parte en
el proyecto ScummVM?
Ludvig
Strigeus:
Mi primer acercamiento fue cuando tuve la idea de desarrollar mi
propio motor para videojuegos de aventuras hace unos años. Para
poder llevarlo a la práctica, me era necesario conocer el
funcionamiento interno de SCUMM, y así poder tomar ideas del mismo.
Tenía en mente crear un intérprete [para ScummVM] capaz de ejecutar
Monkey Island 2, por eso cargué mi antiguo desensamblador y comencé
a trabajar.
James
Brown:
Aunque el concepto ya estaba ideado cuando me uní al proyecto,
ScummVM siempre ha supuesto una experiencia de aprendizaje, y es por
momentos fascinante. No sólo estoy aprendiendo técnicas y métodos
novedosos tanto de programación como de ingeniería inversa, sino
además es una oportunidad única para estudiar las técnicas de los
programadores que estamos tratando de emular, buscando nuevas mejoras
partiendo de la metodología y técnicas originales.
ORN:
¿Qué lenguajes han empleado para desarrollar ScummVM?
JB:
ScummVM comenzó siendo casi todo C plano, con algunas clases C++
incrustadas. Al poco tiempo de unirme al proyecto, nos pasamos a C++.
Personalmente,
no soy muy partidario de C++. Creo que tiende a generar "código
enredado" cuando los programadores abusan de herencias y
orientación a objetos. Siempre prefiero ANSI C directamente. Aunque,
al querer añadir soporte para más juegos y plataformas, las
propiedades de herencia para objetos de C++ resultan en un código
fuente más legible.
Por
ejemplo, recientemente hemos trabajado en la emulación de Curse of
Monkey Island, que hace uso del sistema SCUMM Versión 8. Pensamos
que esta versión era lo suficientemente diferente para permitir
implementar "version classes". De modo que se pueden
heredar los opcodes de guión y las funciones de administración de
recursos desde nuestra clase versión 6, y únicamente reemplazar
aquellas que son sustancialmente diferentes.
En
ocasiones hemos utilizado Perl, para crear prototipos y probar
diferentes funcionalidades. Hemos utilizado también información
obtenida de otros programas creados por otros programadores de la
comunidad, en especial de alguien llamado Serge, que fueron creados
en Delphi. Y naturalmente, ensamblador x86 para nuestra ingeniería
inversa.
ORN:
¿Qué parte de código incorpora ScummVM que no fuese programado
originalmente por el equipo?
LS:
ScummVM utiliza SDL, una librería que facilita enormemente la tarea
de compilar a través de plataformas código de imagen y audio.
Torbjrn
Andersson: El controlador ALSA MIDI está en su mayor parte copiado y
pegado del vkeybd de Takashi Iwai, y esa parte del código de audio
es una versión LGPL del fmopl de MAME creado por Tatsuyuki Satoh.
JB:
Hemos utilizado los escaladores gráficos de la familia 2xSal de
Kreed. También Ogg Vorbis y la librería MAD MP3 para poder ofrecer
compresión de audio, sobre todo por facilitar la tarea de guardar
los juegos en dispositivos móviles como el iPAQ.
Podría
sonar algo hipócrita, siendo ScummVM un emulador, pero no tiene
sentido reinventar la rueda. Es mucho más sencillo aprovechar código
ya existente y concentrarse en las entrañas del motor.
ORN:
¿Cuáles han sido los retos técnicos más importantes durante el
desarrollo de ScummVM?
Max
Horn:
Crear un único motor capaz de emular las diferentes versiones del
motor SCUMM, cada una con sus numerosas rarezas, modificaciones y
peculiaridades.
Una
solución a un problema suele provocar otros cinco errores, y a veces
sólo te das cuenta un mes más tarde, siendo complicado encontrar la
causa. Luego toca mejorar la solución original de modo que corrija
los problemas anteriores sin provocar otros nuevos.
JB:
Una de nuestras ideas primordiales es mantenerlo tan portable como
nos sea posible. Todavía queda mucho por hacer, puesto que la
utilización de memoria está muy poco optimizada por el momento;
algunos han intentado utilizar ScummVM en una Gameboy Advance, que
sólo cuenta con 288K de memoria.
Dado
que a menudo tenemos que manejar codecs de compresión extraños—que
aunque son sencillos de reimplementar, son complicados de
comprender—los ajustes específicos para cada plataforma pueden
suponer un serio obstáculo.
ORN:
¿Cuál ha sido el principal desafío en cuanto a la ingeniería
inversa del motor SCUMM?
LS:
El reto técnico de analizar un fichero .exe, y partiendo de ahí
reconstruir la lógica del programa. Cuando se compila un programa,
todos los nombres de las variables y las funciones se pierden. Para
reconstruirlos, es necesario analizar las funciones y observar los
patrones para intentar comprender lo que el el desensamblador hace, y
cómo funciona.
Otro
desafío técnico es ofrecer soporte para diferentes versiones del
intérprete partiendo de un único árbol de código. Cada juego
SCUMM utiliza su propia versión de intérprete y espera que ciertas
cosas sucedan de un modo determinado. Se hace necesario encontrar un
común denominador de funcionalidades que sean utilizadas por todas
las versiones del intérprete, y que lo amplíen con funcionalidad
más específica de cada uno de ellos.
No
puedo afirmar que esté completamente satisfecho de cómo ha
funcionado esto en ScummVM durante el tiempo que he estado
involucrado en el proyecto. A menudo al añadir una funcionalidad
para soportar un juego más generaba problema con juegos más
antiguos. En relación a la compatibilidad de los juegos, sería
ideal que cada versión del intérprete dentro del árbol del código,
fuera independiente del resto. Pero eso conllevaría mucho
mantenimiento, en parte debido al hecho de que por cada versión del
intérprete, habría que duplicar las funciones y en ese caso el
árbol del código crecería extremadamente.
JB:
Implementar tantas pequeñas versiones es tremendamente laborioso,
porque suele haber cambios estructurales, si no funcionales. Eso
dificulta encontrar puntos en común en el código para establecer
comparaciones.
La
mayoría de motores para juegos presentan estos problemas, unidos al
hecho de que, al trabajar con motores interpretados, nunca se está
del todo seguro de qué trucos han empleado en el código los
guionistas que pudieran trabar tu motor. Programar un decompilador de
guiones debería ser el primer paso, asegurándonos de que sea lo
suficientemente flexible para corregir opcodes en tiempo real, e
integrar fácilmente los cambios de argumentos y parámetros en el
intérprete del motor.
ORN:
¿Qué mejoras añadidas al motor ScummVM no estaban presentes en el
motor original SCUMM?
MH:
La portabilidad a sistemas que no fueron soportados por los juegos
originales.
LS:
Los filtros de escalado, como 2xSaI, que suaviza la imagen cuando se
observa en resoluciones superiores a 320x200, que es la resolución
efectiva real que utilizan los juegos. ScummVM también es capaz de
ejecutar los juegos Simon the Sorcerer de AdventureSoft.
TA:
La gran mayoría de ficheros de audio se pueden comprimir, y la
pistas de CD audio se pueden sustituir por ficheros MP3 y Ogg Vorbis.
Supone poder jugar a estos juegos desde disco duro, algo muy útil
puesto que mi CD-ROM a veces suena como un secador. Hay al menos una
escena la versión CD de LOOM, que resultaba tremendamente complicada
cuando la probé con el intérprete original. Cada pocos segundos el
juego se paralizaba unos instantes porque se creaba un bucle con un
sonido de fondo leído desde el CD.
El
intérprete original de Sam & Max presentaba ciertos errores
gráficos que el motor ScummVM no presenta.
JB:
La mayoría de mejoras y añadidos no son apreciables por dos
motivos: El primero puramente técnico. El motor SCUMM de LucasArts
SCUMM—así como el motor Simon the Sorcerer de AdventureSoft, que
también emula—es sólo un intérprete, gran parte de su gracia
está en los guiones. Se podría comparar con Quake, donde el motor
es el único responsable de la funcionalidad central. Y en un entorno
2D, al menos gráficamente, hay muy poco margen de mejora a
diferencia de los entornos 3D.
El
segundo motivo es más simplista. Aunque estemos abiertos a realizar
mejoras, todo lo que afecte a la jugabilidad podría ser considerado
“blasfemia”.
ORN:
¿Qué novedades se planean para versiones futuras de ScummVM?
MH:
En este momento, trabajamos en estabilizar el soporte de Curse of
Monkey Island. Luego volveremos a corregir los retrocesos
introducidos al añadir soporte para Curse. Pero hay planeadas
algunas otras cosas:
*
Interfaz mejorada, p.ej., opciones configurables cómodamente desde
el GUI.
*
Soporte para juegos SCUMM muy antiguos (Maniac Mansion, Zak
McKracken, LOOM).
JB:
Lo primero y principal, nuestro objetivo principal es lograr la
compatibilidad total con los juegos SCUMM tanto como sea posible.
Barajamos la posibilidad de poder sustituir guiones del juego.
Permitiría, entre otras cosas, la posibilidad de actualizar las
interfaces de los juegos; por ejemplo, sustituir “verb interface”
de Day of the Tentacle con un “cursor interface” de Sam &
Max. Permite reducir el tamaño de pantalla ocupado por el juego,
facilitando la conversión a otras plataformas inferiores.
Una
vez alcanzada la plena, o casi completa compatibilidad con todos los
juegos, podríamos considerar la expansión hacia sistemas de
videojuegos de aventuras similares. Revolution Software, siendo tan
fantásticos como son, nos enviaron el código fuente de Beneath a
Steel Sky, preguntándonos si estaríamos interesados en programar un
motor de juegos compatible que permitiera a la gente poder jugar en
las plataformas más nuevas. Es algo sorprendente, comprobar cómo
los desarrolladores de un juego clásico, están interesados en un
grupo que está programando un clon.
ORN:
¿Qué consejos le darían a todo aquel que quisiera modificar juegos
SCUMM antiguos, o crear juegos nuevos para ScummVM?
MH:
No se si es una buena opción. Si alguien me preguntase esto, es
probable que le dijera que utilizase uno de los motores de juegos de
aventura gráfica de código libre existente, en lugar de emplear
ScummVM como punto de partida. ScummVM contiene gran cantidad de
particularidades motivadas por la necesidad de emular el SCUMM
original. Si fuera a programar un motor para juegos de aventura,
muchas cosas las haría de un modo diferente del que están
implementadas en ScummVM. ScummVM es fabuloso haciendo aquello para
lo que fue concebido; esto es, poder utilizar juegos SCUMM.
Exactamente eso es lo que lo hace menos idóneo para la creación de
nuevas aventuras gráficas.
TA:
Nunca he pensado demasiado en modificar juegos originales. Hay pocos
juegos que contengan pantallas de protección anti-copia como parte
del guión. Los intérpretes de LucasArts fueron creados para
saltarlas cuando estos juegos eran publicados nuevamente como parte
de una colección, y por ello nosotros tuvimos que hacer lo mismo,
aunque no siempre de la misma manera. Pero siempre se efectúa desde
ScummVM. Nunca modificando los ficheros de datos.
Si
desea crear un juego, sería mucho mejor tomar un sistema de
desarrollo que cuente con una máquina virtual plenamente documentada
que
no incorpore tantos arreglos específicos para cada juego.
Contar
con herramientas actuales para el desarrollo del juego sería también
de gran ayuda.
Intentar
crear un juego nuevo para ScummVM sería como intentar desarrollar un
programa extenso empleando únicamente un desensamblador.
Seguramente,
podría hacerse.
Cualquier
mortal necesitaría un compilador y librerías estándar,
las
cuales seguramente se tardarían años en programar.
El
compilador Inform de Graham Nelson para Z-Machine de Infocom ofrece
una visión muy interesante de la evolución de un proyecto capaz de
generar ficheros para una máquina virtual en modo de ingeniería
inversa.
Inform llegó
a ser realmente popular.
Se
han escrito gran cantidad de juegos con él; Z-Machine está
perfectamente documentado;
y
se han desarrollado intérpretes en diferentes lenguajes como Java,
Perl y
Emacs Lisp. Pero
sería bueno recordar que se invirtieron uno o dos años antes de que
el compilador evolucionase a un estado, en el que Graham no fuera el
único capaz de crear un juego completo.
Conclusión:
Se puede hacer pero requiere mucho tiempo, y quizá no sea el mejor
modo de comenzar.
JB:
No.
Mientras sea posible, existen gran cantidad de sistemas de desarrollo
de juegos tremendamente más sencillos de utilizar.
A
menos que le interese el reto técnico de desarrollar la docena o más
de herramientas necesarias para crear un juego que emplee el sistema
SCUMM,
es
una idea nada aconsejable.
ScummVM se
diseñó para emplear los juegos existentes, no como una plataforma
para los nuevos programadores de juegos. Sería alucinante, pero no
es factible.
ORN:
¿Algún
consejo para aquellos interesados en hacer ingeniería inversa con un
motor de juegos,
tanto
de tipo técnico como jurídico?
MH:
Técnicamente,
se necesita mucha paciencia para recabar todos los pequeños
detalles. Quizá se pueda uno iniciar rápidamente en la tarea, pero
para solventar todas las pequeñas trabas, se debe emplear una gran
cantidad de esfuerzo.
Jurídicamente,
se debería saber que para la DMCA desmontar motores de videojuegos
puede resultar ilegal. Pero, si echamos un vistazo a Exult, otro
motor de juegos de código libre en el que estoy inmerso, no tuvimos
que desensamblar ningún elemento.
JB:
Tengo
dos consejos legales.
El
primero es sencillo:
Preguntar.
No
espere quizá respuesta, pero no sabe hasta qué punto se
sorprendería de cuantas complicaciones pueden evitarse al poder
afirmar,
"Pero
yo le dije que iba a hacer esto..."
Aunque
AdventureSoft nunca
nos dio una respuesta acerca de nuestra implementación de Simon,
y
la respuesta de LucasArts
fue
una nota de advertencia de DMCA,
puede
que otras compañías, como Revolution, que muestren un interés
activo en que sus juegos estén disponibles para otras plataformas.
El
segundo consejo es también parte del primer aviso técnico:
Utilice
la ingeniería inversa tan poco como sea posible.
La
mayor complicación jurídica de la ingeniería inversa sucede cuando
desensamblamos,
puede
resultar tentador traducir la salida del compilador en código
directamente en nuestro programa.
Aquí
les diría que jurídicamente no, no y no.
Es
casi con seguridad una violación de los derechos de autor.
Y
puede suceder por accidente.
Por
último, escoja las herramientas adecuadas para el trabajo.
La
ingeniería inversa es una labor complicada.
Aunque
existen gran cantidad de programas gratuitos para ello—BIEW
por
ejemplo,
ninguno
es tan fácil y gratificante en su uso como los extensos programas
comerciales del tipo,
IDA Pro y
SoftICE.
ORN:
¿Qué
juego SCUMM de
LucasArts es
vuestro favorito,
y
qué trucos podríais compartir con quienes jueguen desde ScummVM?
LS:Mi
juego favorito es
Monkey Island 2; después
de todo,
creé
ScummVM con
el propósito de jugar a Monkey 2.
MH:
No
es fácil destacar uno sólo como favorito,
puesto
que me gustan un montón. Pero si insiste en una elección, diría
Monkey
Island 2. Por
fortuna, el soporte en ScummVM roza casi la perfección.
Tiene
gran cantidad de humor, referencias a otros juegos de LucasArts, e
ideas realmente graciosas.
Una
de las escenas que más me gusta es cuando Guybrush se golpea en la
cabeza,
y
sueña con sus padres,
que
surge en forma de esqueleto interpretando una famosa canción.
JB:Personalmente,
me encanta Sam
and Max Hit the Road. Cuenta
con algunos de los mejores gags que haya podido ver,
eso
sin mencionar sus puzzles con gran sentido que se pueden resolver sin
rodeos.
Como
es mi favorito, funciona perfectamente con ScummVM.
Mi
único consejo es no jugar al mini juego
"highway". Va
demasiado rápido en
ScummVM, y,
como
la única forma de salir implica perder,
es
fácil quedarse atascado.
TA:
Para
mi sería Day
of the Tentacle. Es
el único que fui capaz de completar sin ningún tipo de ayuda
externa.
La
ejecución de los juegos me pareció sumamente sencilla, una vez
leída la documentación y el listado de compatibilidad.
El
mayor problema fue encontrar un lugar donde comprar los juegos. Todo
me funciona correctamente ahora mismo. Dudo de que algún día tenga
la posibilidad de jugar a la versión en 256 colores de
Zak McKracken. Supongo
que mi único consejo es poder comprar los juegos en cuanto se tenga
esa opción.
Howard
Wen, el
autor de la entrevista, es redactor freelance y ha colaborado
asiduamente con
O'Reilly y
ha escrito también para
Salon.com, Playboy.com, y
Wired, entre
otros.
No hay comentarios:
Publicar un comentario