private static int GetAddress(string file, RomVersion version, string addrVar) { var gFile = from a in addresses.Games where a.Name == version.Game.ToString() select a; var aFile = from b in gFile.Single().Files where b.Filename == file select b; var iAddr = from c in aFile.Single().Items where c.Variable == addrVar select c; var qualAddr = from d in iAddr.Single().Values where d.Version == version.ToString() select d; int?address = qualAddr.Single().Address; if (address == null) { throw new ArgumentException(String.Format("{1} does not exist under {0} in Addresses.xml", file, addrVar)); } return((int)address); }
public static Localization GetLocalization(RomVersion v) { return(BuildInformation.GetLocalization(v)); //switch (v) //{ // case Build.N0: return Localization.NTSC; //NTSC 1.0 // case Build.N1: return Localization.NTSC; //NTSC 1.1 // case Build.N2: return Localization.NTSC; //NTSC 1.2 // case Build.P0: return Localization.PAL; //PAL 1.0 // case Build.P1: return Localization.PAL; //PAL 1.1 // case Build.GCNJ: return Localization.NTSC; // case Build.GCNP: return Localization.PAL; // case Build.MQP: return Localization.PAL; // case Build.MQJ: return Localization.NTSC; // case Build.DBGMQ: return Localization.PAL; // //non-official builds // //case Build.DUNGRUSH: return Localization.NTSC; // //case Build.DUNGRUSH2: return Localization.NTSC; // default: return Localization.UNKNOWN; //} }
public static int GetRom(RomFileToken file, RomVersion version) { var block = GetBlock(version, file.ToString()); TryGetStart(block, version, Domain.ROM, out int addr); return(addr); }
public TableInfo(RomVersion version) { if (version == Game.OcarinaOfTime) { int scenes = (version == ORom.Build.DBGMQ) ? 110 : 101; GameOvls = new Table { Id = GameContextTable_Start, Length = 0x30, StartOff = 4, Records = 6 }; PlayerPause = new Table { Id = PlayerPauseOverlayTable_Start, Length = 0x1C, StartOff = 4, Records = 2 }; Actors = new Table { Id = ActorTable_Start, Length = 0x20, StartOff = 0, Records = 0x1D7 }; Particles = new Table { Id = ParticleTable_Start, Length = 0x1C, StartOff = 0, Records = 0x25 }; Objects = new Table { Id = ObjectTable_Start, Length = 0x08, StartOff = 0, Records = 0x192 }; Scenes = new Table { Id = SceneTable_Start, Length = 0x14, StartOff = 0, Records = scenes }; TitleCards = new Table { Id = SceneTable_Start, Length = 0x14, StartOff = 8, Records = scenes }; HyruleSkybox = new Table { Id = HyruleSkyboxTable_Start, Length = 0x08, StartOff = 0, Records = 18 }; MapMarkData = new Table { Id = MapMarkDataTable_Start, Length = 0x18, StartOff = 4, Records = 1 }; } else if (version == Game.MajorasMask) { GameOvls = new Table { Id = GameContextTable_Start, Length = 0x30, StartOff = 0, Records = 7 }; PlayerPause = new Table { Id = PlayerPauseOverlayTable_Start, Length = 0x1C, StartOff = 4, Records = 2 }; Actors = new Table { Id = ActorTable_Start, Length = 0x20, StartOff = 0, Records = 0x2B2 }; Particles = new Table { Id = ParticleTable_Start, Length = 0x1C, StartOff = 0, Records = 0x027 }; Objects = new Table { Id = ObjectTable_Start, Length = 0x08, StartOff = 0, Records = 0x283 }; Scenes = new Table { Id = SceneTable_Start, Length = 0x10, StartOff = 0, Records = 0x071 }; Transitions = new Table { Id = TransitionTable_Start, Length = 0x1C, StartOff = 0xC, Records = 7 }; } }
public static bool IsBuildNintendo(RomVersion build) { if (build == Build.UNKNOWN || build == Build.CUSTOM) { return(false); } return(true); }
public MFileTable(string romLocation, RomVersion version) { using (FileStream fs = new FileStream(romLocation, FileMode.Open, FileAccess.Read)) { DmaFile = new DmaData(fs, version); } RomLocation = romLocation; Version = version; SceneTable = new FileRefTable("SceneTable_Start", 0x10, 0); }
public MFileTable(string romLocation, RomVersion version) { Tables = new TableInfo(version); using (FileStream fs = new FileStream(romLocation, FileMode.Open, FileAccess.Read)) { dmadata = new DmaData(fs, version); } RomLocation = romLocation; Version = version; }
public static bool TryGetRom(RomFileToken file, RomVersion version, string addrVar, out int v) { var block = GetBlock(version, file.ToString()); if (TryMagicConverter(block, addrVar, version, Domain.ROM, out v)) { return(true); } return(false); }
public static bool TryGetRam(RomFileToken file, RomVersion version, out N64Ptr v) { var block = GetBlock(version, file.ToString()); if (TryGetStart(block, version, Domain.RAM, out int value)) { v = value | 0x8000_0000; return(true); } v = 0; return(false); }
private static bool TryGetStart(Block block, RomVersion version, Domain domain, out int start) { start = 0; var startAddr = block.Start.SingleOrDefault(x => x.domain == domain); if (startAddr == null || !TryGetAddrValue(startAddr, version, out start)) { return(false); } return(true); }
private static Block GetBlock(RomVersion version, string blockId) { var game = from a in AddressDoc.Game where a.name.ToString() == version.Game.ToString() select a; var block = (from b in game.Single().Block where b.name == blockId select b).SingleOrDefault(); return(block); }
private static bool TryGetAddress(string file, RomVersion version, string addrVar, out int value) { try { value = GetAddress(file, version, addrVar); return(true); } catch { value = 0; return(false); } }
private static bool TryGetAddrValue(Addr2.Address addr, RomVersion version, out int result) { try { result = Convert.ToInt32(addr.Data.Single(x => x.ver == version.ToString()).Value, 16); } catch { result = -1; return(false); } return(true); }
public OFileTable(string romLoc, RomVersion version) { using (FileStream fs = new FileStream(romLoc, FileMode.Open, FileAccess.Read)) { DmaFile = new DmaData(fs, version); } RomLocation = romLoc; Version = version; //table references SceneTable = new FileRefTable("SceneTable_Start", 0x14, 0); TitleCardTable = new FileRefTable("SceneTable_Start", 0x14, 8); HyruleSkyboxTable = new FileRefTable("HyruleSkyboxTable_Start", 8, 0); }
public static Rom New(string fileLocation, RomVersion version) { if (version.Game == Game.OcarinaOfTime) { return(new ORom(fileLocation, version)); } else if (version.Game == Game.MajorasMask) { return(new MRom(fileLocation, version)); } else { return(null); } }
public static bool TryGetRam(AddressToken token, RomVersion version, out int v) { v = 0; if (!TryGetBlock(version, token, out Block block)) { return(false); } if (!TryMagicConverter(block, token, version, Domain.RAM, out v)) { return(false); } return(true); }
public static int GetRom(RomFileToken file, RomVersion version, AddressToken token) { int addr; var block = GetBlock(version, file.ToString()); if (token == AddressToken.__Start) { TryGetStart(block, version, Domain.ROM, out addr); } else { TryMagicConverter(block, token, version, Domain.ROM, out addr); } return(addr); }
public static int GetRom(RomFileToken file, RomVersion version, string addrVar) { int addr; var block = GetBlock(version, file.ToString()); if (addrVar == "__Start") { TryGetStart(block, version, Domain.ROM, out addr); } else { TryMagicConverter(block, addrVar, version, Domain.ROM, out addr); } return(addr); }
public static bool TryGetRom(RomFileToken file, RomVersion version, N64Ptr ramAddr, out int v) { ramAddr &= 0xFFFFFF; var block = GetBlock(version, file.ToString()); if (!TryGetStart(block, version, Domain.ROM, out int romStart) || !TryGetStart(block, version, Domain.RAM, out int ramStart) || ramAddr < ramStart) { v = 0; return(false); } v = romStart + ramAddr - ramStart; return(true); }
public static bool TryConvertToRom(RomFileToken file, RomVersion version, uint ramAddr, out int v) { int romStart; int ramStart; if (!TryGetAddress(file, version, "__Start", out romStart) || !TryGetAddress("ram", version, "CONV_" + file, out ramStart) || ramAddr < ramStart) { v = 0; return(false); } ramAddr &= 0xFFFFFF; v = romStart + (int)ramAddr - ramStart; return(true); }
private static bool TryGetBlock(RomVersion version, string addressIdentifier, out Block block) { var game = (from a in AddressDoc.Game where a.name.ToString() == version.Game.ToString() select a).Single(); block = (from b in game.Block where b.Identifier.Any(x => x.id == addressIdentifier) select b).SingleOrDefault(); if (block != null) { return(true); } return(false); }
public static bool TryConvertToRam(RomFileToken file, RomVersion version, string addrVar, out int v) { int romStart; int romAddr; int ramAddr; if (!TryGetAddress(file, version, "__Start", out romStart) || !TryGetAddress(file, version, addrVar, out romAddr) || !TryGetAddress("ram", version, "CONV_" + file, out ramAddr)) { v = 0; return(false); } v = ramAddr + romAddr - romStart; return(true); }
public static bool TryGetRam(string addrVar, RomVersion version, out int v) { v = 0; if (!TryGetBlock(version, addrVar, out Block block)) { return(false); } if (!TryMagicConverter(block, addrVar, version, Domain.RAM, out v)) { return(false); } return(true); //return TryGetAddress("ram", version, addrVar, out v); }
public DmaData(Stream s, RomVersion version) { RomFileToken token = ORom.FileList.invalid; if (version.Game == Game.OcarinaOfTime) { token = ORom.FileList.dmadata; } else if (version.Game == Game.MajorasMask) { token = MRom.FileList.dmadata; } int address = Addresser.GetRom(token, version, AddressToken.__Start); InitializeTable(s, address); }
public VFileTable_Data(RomVersion version) { if (version == Game.OcarinaOfTime) { GameOvls = new Container { TableId = "GameContextTable_Start", TableLength = 0x30, Records = 6 }; PlayerPause = new Container { TableId = "PlayerPauseOverlayTable_Start", TableLength = 0x1C, Records = 2 }; Actors = new Container { TableId = "ActorTable_Start", TableLength = 0x20, Records = 0x1D7 }; Particles = new Container { TableId = "GameContextTable_Start", TableLength = 0x1C, Records = 0x26 }; Objects = new Container { TableId = "ObjectTable_Start", TableLength = 0x08, Records = 0x192 }; Scenes = new Container { TableId = "SceneTable_Start", TableLength = 0x14, Records = (version == ORom.Build.DBGMQ) ? 109 : 101 }; } else if (version == Game.MajorasMask) { GameOvls = new Container { TableId = "GameContextTable_Start", TableLength = 0x30, Records = 0 }; PlayerPause = new Container { TableId = "PlayerPauseOverlayTable_Start", TableLength = 0x1C, Records = 2 }; Actors = new Container { TableId = "ActorTable_Start", TableLength = 0x20, Records = 0x1D7 }; Particles = new Container { TableId = "GameContextTable_Start", TableLength = 0x1C, Records = 0x26 }; Objects = new Container { TableId = "ObjectTable_Start", TableLength = 0x08, Records = 0x192 }; Scenes = new Container { TableId = "SceneTable_Start", TableLength = 0x10, Records = 0 }; } }
public static bool TryGetSymbolRef(AddressToken token, RomVersion version, out MapBinding o) { o = null; if (!TryGetBlock(version, token, out Block block)) { return(false); } var identifier = block.Identifier.SingleOrDefault(x => x.id == token.ToString()); if (identifier == null) { return(false); } o = identifier.MapBinding; return(true); }
protected Rom(string fileLocation, RomVersion version) { if (version.Game == Game.OcarinaOfTime) { Files = new OFileTable(fileLocation, version); } else { Files = new MFileTable(fileLocation, version); } IsCompressed = false; foreach (FileRecord record in Files) { IsCompressed = record.IsCompressed; if (IsCompressed) { break; } } }
public static bool TryGetOffset(string addrVar, RomVersion version, out int v) { Block block; v = 0; if (!TryGetBlock(version, addrVar, out block)) { return(false); } var lookupAddr = block.Identifier.SingleOrDefault(x => x.id == addrVar); if (!(lookupAddr.Item.Count > 0 && lookupAddr.Item[0] is Offset)) { return(false); } var lookupSet = lookupAddr.Item.Cast <Offset>().ToList(); var group = version.GetGroup(); Offset offset = lookupSet.SingleOrDefault(x => x.id == version.GetGroup()); if (offset == null && group != null) { offset = lookupSet.SingleOrDefault(x => x.id == null); } if (offset == null) { return(false); } if (!TryGetOffsetValue(offset, out v)) { return(false); } return(true); }
public static bool TryGetRam(string addrVar, RomFileToken file, RomVersion version, out int v) { var block = GetBlock(version, file.ToString()); return(TryMagicConverter(block, addrVar, version, Domain.RAM, out v)); }
public static bool TryGetRam(RomFileToken file, RomVersion version, out int v) { var block = GetBlock(version, file.ToString()); return(TryGetStart(block, version, Domain.RAM, out v)); }