igir
Version:
🕹 A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.
249 lines (248 loc) • 7.48 kB
TypeScript
import 'reflect-metadata';
import Disk from './disk.js';
import DeviceRef from './mame/deviceRef.js';
import Release from './release.js';
import ROM from './rom.js';
declare const GameType: {
readonly AFTERMARKET: "Aftermarket";
readonly ALPHA: "Alpha";
readonly BAD: "Bad";
readonly BETA: "Beta";
readonly BIOS: "BIOS";
readonly CRACKED: "Cracked";
readonly DEBUG: "Debug";
readonly DEMO: "Demo";
readonly DEVICE: "Device";
readonly FIXED: "Fixed";
readonly HACKED: "Hacked";
readonly HOMEBREW: "Homebrew";
readonly OVERDUMP: "Overdump";
readonly PENDING_DUMP: "Pending Dump";
readonly PIRATED: "Pirated";
readonly PROGRAM: "Program";
readonly PROTOTYPE: "Prototype";
readonly RETAIL: "Retail";
readonly SAMPLE: "Sample";
readonly TRAINED: "Trained";
readonly TRANSLATED: "Translated";
readonly UNLICENSED: "Unlicensed";
};
type GameTypeValue = (typeof GameType)[keyof typeof GameType];
/**
* "There are two 'semi-optional' fields that can be included for each game;
* 'year' and 'manufacturer'. However, CMPro displays the manufacturer in the
* scanner window so it isn't really optional! For the sake of completeness I
* would recommend you include year and manufacturer."
*
* "There are two fields that relate to the merging of ROMs; 'cloneof' and
* 'romof'. In MAME the 'cloneof' field represents a notional link between
* the two games and the 'romof' field represents that the ROMs themselves
* can be shared. CMPro actually ignores the 'romof' field and uses the
* 'cloneof' value to determine how the ROMs can be shared. However, you should
* use the MAME meanings of 'cloneof and 'romof' both for the sake of clarity
* and to allow faultless conversions between CMPro and RomCenter formats.
* If you don't use these fields correctly then you cannot guarantee that your
* data file will work as expected in CMPro and RomCenter for all three merge
* types."
* @see http://www.logiqx.com/DatFAQs/CMPro.php
*/
export interface GameProps {
readonly name?: string;
readonly isBios?: 'yes' | 'no';
readonly cloneOf?: string;
readonly romOf?: string;
readonly release?: Release | Release[];
readonly roms?: ROM | ROM[];
readonly disks?: Disk | Disk[];
readonly categories?: string | string[];
readonly description?: string;
readonly id?: string;
readonly cloneOfId?: string;
readonly isDevice?: 'yes' | 'no';
readonly manufacturer?: string;
readonly deviceRef?: DeviceRef | DeviceRef[];
readonly genre?: string;
}
/**
* A logical "game" that contains zero or more {@link ROM}s, and has zero or more region
* {@link Release}s.
*/
export default class Game implements GameProps {
readonly name: string;
readonly isBios: 'yes' | 'no';
readonly cloneOf?: string;
readonly romOf?: string;
readonly release: Release | Release[];
readonly roms: ROM | ROM[];
readonly disks: Disk | Disk[];
readonly categories: string | string[];
readonly description?: string;
readonly id?: string;
readonly cloneOfId?: string;
readonly isDevice: 'yes' | 'no';
readonly manufacturer?: string;
readonly deviceRef: DeviceRef | DeviceRef[];
readonly genre?: string;
constructor(props?: GameProps);
/**
* Create an XML object, to be used by the owning {@link DAT}.
*/
toXmlDatObj(parentNames: Set<string>): object;
getName(): string;
getCategories(): string[];
/**
* Is this game a collection of BIOS file(s).
*/
getIsBios(): boolean;
/**
* Is this game a MAME "device"?
*/
getIsDevice(): boolean;
getDeviceRefs(): DeviceRef[];
getGenre(): string | undefined;
private getReleases;
getRoms(): ROM[];
getDisks(): Disk[];
getCloneOf(): string | undefined;
getRomOf(): string | undefined;
getId(): string | undefined;
getCloneOfId(): string | undefined;
getRevision(): number;
/**
* Is this game aftermarket (released after the last known console release)?
*/
isAftermarket(): boolean;
/**
* Is this game an alpha pre-release?
*/
isAlpha(): boolean;
/**
* Is this game an alternate release?
*/
isAlternate(): boolean;
/**
* Is this game a "bad" dump?
*/
isBad(): boolean;
/**
* Is this game a beta pre-release?
*/
isBeta(): boolean;
/**
* Is this game an unlicensed bootleg?
*/
isBootleg(): boolean;
/**
* Is this game a "cracked" release (has copy protection removed)?
*/
isCracked(): boolean;
/**
* Does this game contain debug symbols?
*/
isDebug(): boolean;
static readonly DEMO_REGEX: RegExp;
/**
* Is this game a demo?
*/
isDemo(): boolean;
/**
* Is this game an enhancement chip? Primarily for SNES
*/
isEnhancementChip(): boolean;
/**
* Is this game "fixed" (altered to run better in emulation)?
*/
isFixed(): boolean;
/**
* Is this game community homebrew?
*/
isHomebrew(): boolean;
/**
* Is this game MIA (has not been dumped yet)?
*
* NOTE(cemmer): RomVault indicates that some DATs include <rom mia="yes"/>, but I did not find
* any evidence of this in No-Intro, Redump, TOSEC, and FinalBurn Neo.
* https://wiki.romvault.com/doku.php?id=mia_rom_tracking#can_i_manually_flag_roms_as_mia
*/
isMIA(): boolean;
/**
* Is this game an overdump (contains excess data)?
*/
isOverdump(): boolean;
/**
* Is this game a pending dump (works, but isn't a proper dump)?
*/
isPendingDump(): boolean;
/**
* Is this game pirated (probably has copyright information removed)?
*/
isPirated(): boolean;
/**
* Is this game a "program" application?
*/
isProgram(): boolean;
/**
* Is this game a prototype?
*/
isPrototype(): boolean;
/**
* Is this game a sample?
*/
isSample(): boolean;
/**
* Is this game translated by the community?
*/
isTranslated(): boolean;
/**
* Is this game unlicensed (but was still physically produced and sold)?
*/
isUnlicensed(): boolean;
/**
* Is this game an explicitly verified dump?
*/
isVerified(): boolean;
/**
* Was this game altered to work on a Bung cartridge?
* @see https://en.wikipedia.org/wiki/Bung_Enterprises
*/
hasBungFix(): boolean;
/**
* Does this game have a hack?
*/
hasHack(): boolean;
/**
* Does this game have a trainer?
*/
hasTrainer(): boolean;
/**
* Is this game "retail"?
*/
isRetail(): boolean;
getGameType(): GameTypeValue;
/**
* Is this game a parent (is not a clone)?
*/
isParent(): boolean;
/**
* Is this game a clone?
*/
isClone(): boolean;
getRegions(): string[];
getLanguages(): string[];
private getTwoLetterLanguagesFromName;
private getThreeLetterLanguagesFromName;
private getLanguagesFromRegions;
/**
* Return a new copy of this {@link Game} with some different properties.
*/
withProps(props: GameProps): Game;
/**
* A string hash code to uniquely identify this {@link Game}.
*/
hashCode(): string;
/**
* Is this {@link Game} equal to another {@link Game}?
*/
equals(other: Game): boolean;
}
export {};