Regresar   Foro de marcianitos.org > Emuladores y programas de todo tipo > Emuladores > MAME

 
 
Old 11-dic-2006, 19:15   #1
PeterPunk
Editor Marciano
MAME 0.111 - Hiscore support

Celebrando la reciente salida de la versión 0.111 del emulador MAME voy a describir cómo recompilarlo para que guarde los récords. Para eso necesitamos el código fuente de MAME y, en este caso, también de MAME32. También necesitaremos el compilador y los extras que éste no incluye. Evidentemente para que funcionen los récords también necesitaremos el consabido hiscore.dat que podremos descargar de http://www.mameworld.net/highscore/download.htm
Descomprimimos el compilador, que se trata de MinGW, y los extras (que son funciones para usar las rutinas gráficas de las DirectX 8) en la misma carpeta; y, por otro lado, los códigos fuentes de MAME y MAME32 en una misma carpeta, a poder ser distinta de la del compilador para no liarnos.
Supongamos que descomprimimos el compilador en c:\MinGW y los códigos fuentes del emulador en c:\MAME110. Si tecleamos (sí, estamos en Símbolo del sistema) en esta última carpeta
Code:
set path=c:\mingw\bin
mingw32-make
crearemos el MAME 0.111 de línea de comandos, el mismo que te puedes bajar de mamedev, y supongo que en pocos días en mame.net. Y si tecleamos
Code:
set path=c:\mingw\bin
mingw32-make WINUI=1 NAME=MAME32
generaremos el MAME32 que podemos descargar de http://mame32qa.classicgaming.gamespy.com. Por cierto, si en vez de teclear esas órdenes en el símbolo del sistema, creamos unos archivos MAKEMAME.bat y MAKEMAME32.bat y pegamos el contenido de las dos ventanas anterior de CODE, obtendremos los mismos resultados.
Ahora debemos realizar los cambios pertinentes para habilitar el uso del hiscore.dat. Lo primero será poner en la carpeta \src\ los archivos hiscore.c y hiscore.h. Estos archivos ya no están en el código fuente de MAME, y los pensaba dejar completos en un spoiler, pero como este foro parece no disponer de esa opción os los he subido a un par de servidores:
hiscore.c y hiscore.h -> http://www.megaupload.com/?d=I0ANL9RQ
hiscore.c y hiscore.h -> http://rapidshare.com/files/7043597/hiscore.zip.html
Los archivos que debéis editar para que se habiliten los récords son:
src\fileio.h
Code:
(...)
/**********
    CONSTANTS
***********/
(...)
/* search paths */
#define SEARCHPATH_RAW			NULL
#define SEARCHPATH_CHEAT		NULL
#define SEARCHPATH_LANGUAGE		NULL
#define SEARCHPATH_DEBUGLOG		NULL
#define SEARCHPATH_HISCORE_DB		NULL
(...)
#define SEARCHPATH_MOVIE		OPTION_SNAPSHOT_DIRECTORY
#define SEARCHPATH_COMMENT		OPTION_COMMENT_DIRECTORY
#define SEARCHPATH_HISCORE		OPTION_HISCORE_DIRECTORY
Sólo tenéis que añadir las dos líneas que hacen referencia a hiscore, el resto ya está en el código fuente y sólo os lo pongo para que veáis dónde debe ir cada cosa.
src\mame.c
Code:
(...)
#include "render.h"
#include "ui.h"
#include "hiscore.h"
(...)/*-------------------------------------------------
    init_machine - initialize the emulated machine
-------------------------------------------------*/(...)
#ifdef MESS
	/* initialize the devices */
	devices_init(machine);
#endif
	hiscore_init(machine, machine->gamedrv->name);
src\options.c
Code:
(...)
/**********
    BUILT-IN (CORE) OPTIONS
***********/
static const options_entry core_options[] =
{(...)
	{ "diff_directory",              "diff",      0,                 "directory to save hard drive image difference files" },
	{ "comment_directory",           "comments",  0,                 "directory to save debugger comments" },
	{ "hiscore_directory",           "hi",        0,                 "directory to save hiscores" },
src\options.h
Code:
(...)
/**********
    CONSTANTS
***********/(...)
/* core directory options */
#define OPTION_SNAPSHOT_DIRECTORY	"snapshot_directory"
#define OPTION_DIFF_DIRECTORY		"diff_directory"
#define OPTION_COMMENT_DIRECTORY	"comment_directory"
#define OPTION_HISCORE_DIRECTORY	"hiscore_directory"
src\ui\layout.c
Code:
(...)
DIRECTORYINFO g_directoryInfo[] =
{
	{ "ROMs",                  GetRomDirs,      SetRomDirs,      TRUE,  DIRDLG_ROMS },
	{ "Samples",               GetSampleDirs,   SetSampleDirs,   TRUE,  DIRDLG_SAMPLES },
	{ "Ini Files",             GetIniDir,       SetIniDir,       FALSE, DIRDLG_INI },
	{ "Config",                GetCfgDir,       SetCfgDir,       FALSE, DIRDLG_CFG },
	{ "High Scores",           GetHiscoreDir,   SetHiscoreDir,   FALSE, DIRDLG_HI },
src\ui\options.c
Code:
(...)
// options in mame32.ini that we'll never override with with game-specific options
static const REG_OPTION global_game_options[] =
{(...)
	{ "ctrlr_directory",        RO_STRING,  offsetof(settings_type, ctrlrdir),         "ctrlr" },
	{ "comment_directory",      RO_STRING,  offsetof(settings_type, commentdir),       "comment" },
	{ "hiscore_directory",      RO_STRING,  offsetof(settings_type, hiscoredir),       "hi" },
	{ "" }
(...)
static const options_entry windows_opts[] =
{(...)
	{ "comment_directory",   "comments", 0,       "directory to save debugger comments" },
	{ "hiscore_directory",   "hi",       0,       "directory to save hiscores" },
	{ "cheat_file",          "cheat.dat",0,       "cheat filename" },
(...)
void SetCfgDir(const char* path)
{
	FreeIfAllocated(&settings.cfgdir);
	if (path != NULL)
		settings.cfgdir = mame_strdup(path);
}
const char* GetHiscoreDir(void)
{
	return settings.hiscoredir;
}
void SetHiscoreDir(const char* path)
{
	FreeIfAllocated(&settings.hiscoredir);
	if (path != NULL)
		settings.hiscoredir = mame_strdup(path);
}
en esta última, el procedimiento SetCfgDir también se encuentra en el código, simplemente está aquí para que os sea más fácil de encontrar en el código la zona donde debéis pegar los procedimientos GetHiscoreDir y SetHiscoreDir
src\ui\options.h
Code:
(...)
    char*    nvramdir;
    char*    memcarddir;
    char*    inpdir;
    char*    hiscoredir;
(...)
const char* GetCfgDir(void);
void SetCfgDir(const char* path);
const char* GetHiscoreDir(void);
void SetHiscoreDir(const char* path);
Espero no haberme olvidado del retoque de ningún archivo. Pero aún así falta hacer un último cambio, aunque este no sea en un archivo "propiamente" de código fuente. El asunto es que si, a esta altura, intentamos recompilar MinGW nos advertirá que no se encuentra el procedimiento hiscore_init que es llamado por src\mame.c (fue uno de los cambios que relizamos en ese archivo) y que hace referencia al procedimiento de inicialización de récords y que obviamente está en hiscore.c. Lo que debemos hacer para que el compilador lo encuentre es añadir una línea en el archivo:
src\core.mak
Code:
(...)COREOBJS = \(...)
	$(OBJ)/harddisk.o \
	$(OBJ)/hash.o \
	$(OBJ)/hiscore.o \
	$(OBJ)/info.o \
Y ya está, ya podemos recompilar con el par de líneas que usamos antes, o con el archivo bat en caso de que lo hayamos creado. Ahora tenemos el mismo MAME que se puede descargar de las páginas oficiales con la salvedad de que el nuestro presenta soporte para los hiscores

Espero que esto os pueda ayudar para obtener el MAME con hiscores en futuras versiones.

Saludos
   
Old 20-dic-2006, 17:46   #2
snopes
Marciano
 
Avatar de snopes
Yo hasta ayer tenía mame .104

¿Ya no funcional el .dat de los hiscores?
Acabo de probar el .111 en la recre y, efectivamente, tooooodos los récords y puntuaciones de mis 6 años de jugón de mame no están reflejados a pesar de estar en su carpetita correspondiente y el .dat de hiscores junto al mame.exe

:-??????????
   
Old 25-dic-2006, 07:46   #3
mumra
Marciano
 
Avatar de mumra
he estado viendo lo de el codigo de mame, pero hay un detalle que creo que hay que revisar...

son estos archivos:

src\ui\layout.c
src\ui\options.c
src\ui\options.h



porque en el codigo de mame, en la carpeta que se encuentra no estan estos archivos (de la v.111 )

saludos
   
Old 25-dic-2006, 15:45   #4
PeterPunk
Editor Marciano
Quote:
Originalmente publicado por mumra Ver post
he estado viendo lo de el codigo de mame, pero hay un detalle que creo que hay que revisar...

son estos archivos:

src\ui\layout.c
src\ui\options.c
src\ui\options.h



porque en el codigo de mame, en la carpeta que se encuentra no estan estos archivos (de la v.111 )

saludos
Esos archivos son exclusivos del MAME32, si sólo editas el resto de archivos deberías conseguir el MAME de línea de comandos con soporte para records; pero si también lo quieres en el MAME32 (es el que yo uso) debes bajar su código fuente que se complementa con el de MAME (debes descomprimirlo en la misma carpeta) y ya te aparecen esos archivos en la carpeta src\ui

Saludos
   
Old 21-ene-2007, 17:54   #5
Juanfgv
Marciano
 
Avatar de Juanfgv
Hola, yo esque tengo una duda con esto de gusradar los creditos, me lo quiero poner para que me gusrade los creditos, yo uso el Mame32 plus 0.111u1, y mi duda esque yo he leido en el tutorial http://www.marcianitos.org/tutoriales/emmame.htm#EM018 , que simplemente poniendo el archivo 'hiscore.dat' ya guarda los records.

Y mi duda es si para que guarde los records, si con simplemente ponerse ese archivo ya los guarda, pero si cambiamos de version de MAme ya no funcionaran por lo que ha dicho snopes, con lo que abria que hacer todo lo que pone en este post.

Saludos.
   
Old 21-ene-2007, 19:31   #6
PeterPunk
Editor Marciano
Buenas Juanfgv, antes con poner en la misma carpeta del MAME ese archivo hiscore.dat era suficiente para guardar los récords, y aunque cambiaras de versión de MAME, los récords se mantenían. Lo que pasa es que el equipo MAME a partir de la versión 0.107u3 (creo) dejaron de lado el soporte de ese archivo, basándose en la fidelidad a los arcades, que la mayoría no los guarda. Algunos juegos, como el Tetris y muchos de NeoGeo, los guardan igual, en los famosos ficheros nvram (ram no volátil) ya que también las placas originales lo hacían.
Entonces tenemos un problema si queremos usar esos récords, que ya tenemos guardados, en una versión moderna del MAME o del MAME32, y es lo que explico en este minitutorial. Pero en el caso de MAMEPlus, la cosa es bastante más sencilla, ya que en su código sí que aparecen las referencias necesarias para usar el archivo hiscore.dat, lo que pasa es que luego lo compilan sin esa opción.
Así que lo que debemos hacer es bajarnos su código fuente que se debe extraer sobre el código fuente de MAME, y el compilador y los extras que aparecen en la página de mameplus.
Luego sólo debemos editar el archivo config.def, y borrar la almohadilla (#) que aparece delante de la línea: USE_HISCORE=1
Se guarda el cambio y se compila con el siguiente bat:
MAKE_MAMPLUS.bat
Code:
@echo off
rem --------------------------------------
rem MinGW Compiler Configure
rem --------------------------------------
set PATH=\MinGW\bin;\binutils\bin;extra\bin;%PATH%
rem --------------------------------------
rem HtmlHelp Path Configure
rem --------------------------------------
set C_INCLUDE_PATH=extra\include
set LIBRARY_PATH=extra\lib
make
y ya deberíamos conseguir un MAMEPlus con soporte del hiscore.dat

Saludos
   
Old 21-ene-2007, 19:37   #7
Macarro
Administrador
 
Avatar de Macarro
Una pregunta, el equipo MAME si que permite publicar esta modificación, no?

Es decir, que no hay problema para subir dichos MAMEs ya compilados a internet y poner aquí el enlace, no?
   
Old 21-ene-2007, 21:14   #8
Paul Sernine
Moderador
 
Avatar de Paul Sernine
Ufff, yo creo que los Mamedevs se pasan a veces con esto de la fidelidad. Al menos podría existir una opción para habilitar el salvado de las puntuaciones, aunque no vinera activado por defecto.
   
Old 21-ene-2007, 21:39   #9
PeterPunk
Editor Marciano
Quote:
Originalmente publicado por Macarro Ver post
Una pregunta, el equipo MAME si que permite publicar esta modificación, no?

Es decir, que no hay problema para subir dichos MAMEs ya compilados a internet y poner aquí el enlace, no?
Pues no sé Macarro, eso habrá que preguntárselo a Cananas, que me parece que es el único que se leyó la licencia y términos de uso del MAME.
   
Old 22-ene-2007, 02:41   #10
Juanfgv
Marciano
 
Avatar de Juanfgv
Gracias PeterPunk, en definitiva que si se quiere tener el MAme con los records guardados hay que modificar-Compilar el original, vaya .

Pues haber si me pongo con lo que me has dicho y veo si me los guarda.

Saludos.