-
Notifications
You must be signed in to change notification settings - Fork 3
v0.7 cGame
Warning
Esta ayuda es para la versión 0.7. Está obsoleta e incompleta.
Clase cGame en los scripts
Simplificando:
cGame = class
private
...
protected
...
public
property Key: String
property Name: String
property SortKey: String
property GameGroup: String
property Folder: String
property FileName: String
property Version: String
property Year: String
property Publisher: String
property Zones: TStringList
property Languages: TStringList
property License: String
property ReleaseType: String
property Tags: TStringList
property Verified: boolean
property Alternate: String
property BadDump: String
property Fixed: String
property Trainer: String
property Translation: String
property Pirate: String
property Cracked: String
property Modified: String
property Hack: String
property DataString: String read GetDataString write SetDataString;
procedure ExportData(aFilename: String; ExportMode: boolean);
procedure ExportDataIni(aIniFile: TCustomIniFile; ExportMode: boolean);
procedure ImportData(aFilename: String);
procedure ImportDataIni(aIniFile: TCustomIniFile);
constructor Create(const aFolder: String;
const aFileName: String; const aKey: String);
destructor Destroy; override;
end;
Antes de nada: Las propiedades se refieren a la versión en cuestión.
property Key: String;
Clave del juego. Aunque puede ser muy confuso su uso.
Normalmente contiene el CRC32 del archivo, mientras que en otros casos puede contener el nombre del fichero del juego o incluso un valor arbitrario. Cuando se exportan/importan los datos este valor será el usado para identificar el juego. Siempre en minúsculas.
En la mayoría de sistemas, cada juego se trata de un fichero independiente y "consistente" (siempre que estén siempre un mismo formato, claro); mientras que en otros no es así. Por tanto lo normal es que tenga otro valor distinto del CRC32.
El elegir usar el CRC32 depende del usuario a través del Gestor de Sistemas, aunque ya vienen bastantes preconfigurados indicando que es más adecuado.
El CRC32 calculado por Emuteca es sobre todo el fichero, es decir no quita las cabeceras u otro contenido que quite inconsistencias con diferentes formatos de ficheros.
Pongamos unos casos de ejemplo que ya deberías conocer de memoria:
- 1 juego = 1 fichero
- Por ejemplo: NES, SNES, SMS, etc. (repetimos, siempre y cuando estén el mismo formato)
- Lo mejor es usar CRC32, aunque no está exento de problemas:
- En Game Boy Advance hay dos juegos con el mismo CRC32
- Al no extraerse la cabecera cualquier cambio en dicha información hace que ya no se corresponda dicha información. (Por otra parte nada impide hacer un Script el CRC32 real del juego independientemente de las cabeceras u otra información)
- Un juego = Varios archivos dentro de un solo zip/7z/rar/etc. y ninguno es el principal.
- Por ejemplo: MAME con splited ROMS, lo más común.
- Los archivo comprimidos no son consistentes en CRC, ni siquiera usando el mismo programa ya que dependen de otros factores como usar distinto nivel de compresión. En el caso de MAME lo mejor es usar el identificador usado por dicho programa (que a su vez es el nombre del zip)
- Desconozco la existencia de otros casos no relacionados con las recreativas o con MAME en sí.
- Un juego = Varios fichero pero uno es el principal
- Por ejemplo: Imágenes de CD: bin+cue+sub+mp3/ogg/flac o mdf+mds
- Tanto los .cue como los .mds, son los archivos principales (aunque los emuladores suelen reconocer los otros por su cuenta). Y estos NO son consistentes en CRC32 ya el simple hecho de cambiar el nombre de alguno de los otros ficheros implica normalmente la necesidad de modificar el archivo principal (hay que tener en cuenta que normalmente se trata de indice y habría que cambiar su contenido para adaptarlo al nombre cambiado).
- Por tanto lo mejor sería usar un identificador propio para cada sistema (PlayStation = SLUSXXXX; PS2 = SCESXXXXX; etc.)
- Otra alternativa sería usar los iso, bin y mdf directamente...
- Otra alternativa pero que no es convicente: TOSEC Iso.
property Name: String;
Nombre del juego. No hay más complicación... ¿o sí? ¿Trasliterados, traducidos o con nombre original tal cuál?
Pues nombre original tal cuál; esa es su función. "ファイナルファンタジー" para "Final Fantasy" en su versión japonesa. Los trasliterados, traducciones del título y otras abreviaciones van en otra propiedad.
Los artículos al comienzo, para definir el clave la ordenacion alfabética existe la propiedad SortKey
Otra cosa diferente es que mientras se construyen las bases de datos valga con trasliterados o traducidos... pero no debería ir aquí.
property SortKey: String;
Clave que usará para realizar la ordenación alfabética del título. Basicamente es el título del juego:
- Sin artículos (determinados o indeterminador) al comienzo del nombre del juego.
- Trasliterados a letras latinas, si es en algún idioma que no sus dicho alfabeto.
- Adaptado a ASCII de 7-bits. Por ejemplo sustituyendo "Ñ" por "NZZ". "Á" por A, etc.
- Todas las letran minúsculas.
property GameGroup: String;
Identificador del grupo al que pertenece este juego. Contiene el identificador del grupo (la propiedad Key), y teóricamente debería estar en minúsculas y usar ASCII... Pero el propio programa hace caso omiso de esto (por comodidad a la hora de escanear la lista de juegos de un sistema la primera vez).
Manejar con cuidado, y a no ser que se quiera cambiar de grupo al juego obteniendo la Key del grupo de destino, mejor no tocarlo.
property Folder: String;
Carpeta (o zip/7z/rar/etc.) dónde se encuentra el archivo del juego
property FileName: String;
Nombre del archivo del juego
property Version: String;
Número de versión del programa (u otro tipo de cadena), que no esté recogido en las otras propiedes de la clase.
property Year: String;
Año de publicación de esta versión. También puede ser la fecha concreta y en formato YYYY/MM/DD
.
property Publisher: String;
Empresa que ha publicado esta versión. (Hasta el gorro de la confusión de quién publica, quién desarrolla y quién tiene los derechos de un juego)
property Zones: TStringList read;
Es una lista de strings con las zonas en las que se ha publicado esta versión. Si son paises concretos tendrán el sistema ISO 3166-1 alpha-2 (de 2 letras). Esto es por comodidad en una posible traducción.
Si son zonas más amplias:
- NA = Norteamérica
- SA = Sudamérica
- EU = Europa
- AS = Asia
- etc,
property Languages: TStringList read;
Lista de lenguajes del texto del juego en ISO 639-1 (2 letras). Al igual que las zonas, para una posible traducción
property License: String;
Licencia del juego: Freeware, GPL, etc.
property ReleaseType: String;
Si es alpha, beta, prototipo, demo, etc.
property Tags: TStringList read;
Para dar una idea de las cosas que pueden entrar aquí: http://www.uvlist.com.
La idea en principio es que tengan un formato: "generico/concreto". Por ejemplo: Creatures/Spiders; Time/Middle Ages; Mood/Humor; y cosas así
Pero aquí solo se incluyen aquello que no estén incluidos en el grupo al que pertenece.
property Verified: Boolean;
¿Está verificado que la imagen es correcta? Normalmente identficada con [!]
property Alternate: String;
El [a1]
, [a2]
que usan los distintos sistemas de renombrado (cowering).
property BadDump: String;
¿Se trata de una versión que está mal copiada?. El que sea una cadena de caracteres es para indicar que es lo que está mal y si es cítico el asunto.
property Fixed: String;
¿Está hackeada con el propósito de hacer que funcione?
No es para saltarse protecciones anticopia lógicas.
¿Es una traducción no oficial?
property Trainer: String;
¿Está hackeada con el propósito de usar trucos?
property Translation: String;
property Pirate: String;
¿Es una versión pirata? Es decir sin licencia oficial.
property Cracked: String property Modified: String
property Hack: String;
¿Se trata de una versión modificada? Normalmente para aquellos que tienen una intro.
Estas propiedades son heredadas de cGameStats.
property LastTime: TDateTime;
Última vez que se ejecutó.
property TimesPlayed: Integer;
Número de veces que se ha ejecutado
property PlayingTime: TDateTime;
Tiempo jugado.
property DataString: String;
Propiedad para leer o grabar los datos de un juego en una string. Usada internamente para guardar los datos en los ficheros. Aunque puede ser de utilidad para copiar los datos de un juego en otro.
**constructor Create(const aFolder: String; const aFileName: String; const aKey: String);`
Crea un objeto cGame.
- aFolder: Carpeta (o zip/...) dónde está el fichero del juego
- aFilename: Nombre del fichero
- aKey: Clave del juego
destructor Destroy; override;
Destruye el objeto
procedure ExportData(aFilename: String; ExportMode: boolean);
procedure ExportDataIni(aIniFile: TCustomIniFile; ExportMode: boolean);
procedure ImportData(aFilename: String);
procedure ImportDataIni(aIniFile: TCustomIniFile);