Skip to content
Chixpy edited this page Feb 3, 2024 · 1 revision

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;

Propiedades

Antes de nada: Las propiedades se refieren a la versión en cuestión.

Datos básicos

Key

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.

Name

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í.

SortKey

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.

GameGroup

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.

Folder

property Folder: String;

Carpeta (o zip/7z/rar/etc.) dónde se encuentra el archivo del juego

FileName

property FileName: String;

Nombre del archivo del juego

Datos de la publicación

Version

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.

Year

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.

Publisher

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)

Zones

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,

Languages

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

License

property License: String;

Licencia del juego: Freeware, GPL, etc.

ReleaseType

property ReleaseType: String;

Si es alpha, beta, prototipo, demo, etc.

Tags

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.

Datos de Cowering

Verified

property Verified: Boolean;

¿Está verificado que la imagen es correcta? Normalmente identficada con [!]

Alternate

property Alternate: String;

El [a1], [a2] que usan los distintos sistemas de renombrado (cowering).

BadDump

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.

Fixed

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?

Trainer

property Trainer: String;

¿Está hackeada con el propósito de usar trucos?

Translation

property Translation: String;

Pirate

property Pirate: String;

¿Es una versión pirata? Es decir sin licencia oficial.

property Cracked: String property Modified: String

Hack

property Hack: String;

¿Se trata de una versión modificada? Normalmente para aquellos que tienen una intro.

Datos estadísticos

Estas propiedades son heredadas de cGameStats.

LastTime

property LastTime: TDateTime;

Última vez que se ejecutó.

TimesPlayed

property TimesPlayed: Integer;

Número de veces que se ha ejecutado

PlayingTime

property PlayingTime: TDateTime;

Tiempo jugado.

DataString

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.

Métodos

Constructor

**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

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);
Clone this wiki locally