protected FileAddress GetFileByTable(TableInfo.Table refTable, int index) { RomFileToken token = ORom.FileList.invalid; if (Version.Game == Game.OcarinaOfTime) { token = ORom.FileList.code; } if (Version.Game == Game.MajorasMask) { token = MRom.FileList.code; } int size = refTable.Length; int offset = refTable.StartOff; int recordAddr, startAddr, endAddr; recordAddr = Addresser.GetRom(token, Version, refTable.Id); startAddr = recordAddr + (index * size) + offset; endAddr = startAddr + 4; startAddr = ReadInt32(startAddr); endAddr = ReadInt32(endAddr); FileAddress result = new FileAddress(); try { result = GetVRomAddress(startAddr); } catch { result = new FileAddress(startAddr, endAddr); } return(result); }
protected FileAddress GetFileByRomTable(FileRefTable refTable, int index) { string table = refTable.StartKey; int size = refTable.RecSize; int offset = refTable.FileStartOff; int recordAddr, startAddr, endAddr; RomFileToken token = ORom.FileList.invalid; if (Version.Game == Game.OcarinaOfTime) { token = ORom.FileList.code; } if (Version.Game == Game.MajorasMask) { token = MRom.FileList.code; } recordAddr = Addresser.GetRom(token, Version, table); startAddr = recordAddr + (index * size) + offset; startAddr = ReadInt32(startAddr); endAddr = recordAddr + (index * size) + refTable.FileEndOff; endAddr = ReadInt32(endAddr); FileAddress result = new FileAddress(); try { result = GetVRomAddress(startAddr); } catch { result = new FileAddress(startAddr, endAddr); } return(result); }
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 OverlayRecord GetOverlayRecord(int index, TableInfo.Type type) { RomFileToken token = GetCodeFileToken(); RomFile code = GetFile(token); var table = Tables.GetTable(type); if (!Addresser.TryGetRom(token, Version, table.Id, out int addr)) { return(null); } code.Stream.Position = code.Record.GetRelativeAddress(addr + (index * table.Length)); switch (type) { case TableInfo.Type.Actors: return(new ActorOverlayRecord(index, new BinaryReader(code))); case TableInfo.Type.GameOvls: return(new GameStateRecord(index, new BinaryReader(code))); case TableInfo.Type.Particles: return(new ParticleOverlayRecord(index, new BinaryReader(code))); case TableInfo.Type.PlayerPause: return(new PlayPauseOverlayRecord(index, new BinaryReader(code))); case TableInfo.Type.Transitions: return(new TransitionOverlayRecord(index, new BinaryReader(code))); default: return(null); } }
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 PlayPauseOverlayRecord GetPlayPauseOverlayRecord(int index) { RomFileToken token = GetCodeFileToken(); RomFile code = GetFile(token); if (!Addresser.TryGetRom(token, Version, Tables.PlayerPause.Id, out int addr)) { return(null); } code.Stream.Position = code.Record.GetRelativeAddress(addr + (index * 0x1C)); return(new PlayPauseOverlayRecord(index, new BinaryReader(code))); }
public GameStateRecord GetGameContextRecord(int index) { RomFileToken token = GetCodeFileToken(); RomFile code = GetFile(token); if (!Addresser.TryGetRom(token, Version, Tables.GameOvls.Id, out int addr)) { return(null); } code.Stream.Position = code.Record.GetRelativeAddress(addr + (index * 0x30)); return(new GameStateRecord(index, new BinaryReader(code))); }
public ActorOverlayRecord GetActorOverlayRecord(int actor) { RomFileToken token = GetCodeFileToken(); RomFile code = GetFile(token); if (!Addresser.TryGetRom(token, Version, Tables.Actors.Id, out int addr)) { return(null); } code.Stream.Position = code.Record.GetRelativeAddress(addr + (actor * 0x20)); return(new ActorOverlayRecord(actor, new BinaryReader(code))); }
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 RomFileToken GetCodeFileToken() { RomFileToken token = ORom.FileList.invalid; if (Version.Game == Game.OcarinaOfTime) { token = ORom.FileList.code; } if (Version.Game == Game.MajorasMask) { token = MRom.FileList.code; } return(token); }
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); }
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 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 ActorOverlayRecord GetActorOverlayRecord(int actor) { int addr; RomFileToken token = ORom.FileList.invalid; if (Version.Game == Game.OcarinaOfTime) { token = ORom.FileList.code; } if (Version.Game == Game.MajorasMask) { token = MRom.FileList.code; } RomFile code = GetFile(token); if (!Addresser.TryGetRom(token, Version, ActorTable.StartKey, out addr)) { return(null); } code.Stream.Position = code.Record.GetRelativeAddress(addr + (actor * 0x20)); return(new ActorOverlayRecord(actor, new BinaryReader(code))); }
public PlayPauseOverlayRecord GetPlayPauseOverlayRecord(int index) { int addr; RomFileToken token = ORom.FileList.invalid; if (Version.Game == Game.OcarinaOfTime) { token = ORom.FileList.code; } if (Version.Game == Game.MajorasMask) { token = MRom.FileList.code; } RomFile code = GetFile(token); if (!Addresser.TryGetRom(token, Version, PlayerPauseTable.StartKey, out addr)) { return(null); } code.Stream.Position = code.Record.GetRelativeAddress(addr + (index * 0x1C)); return(new PlayPauseOverlayRecord(index, new BinaryReader(code))); }
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)); }
public static bool TryGetRom(RomFileToken file, RomVersion version, string addrVar, out int v) { return(TryGetAddress(file, version, addrVar, out v)); }
public static int GetRom(RomFileToken file, RomVersion version, string addrVar) { return(GetAddress(file.ToString(), version, addrVar)); }
private static bool TryGetAddress(RomFileToken file, RomVersion version, string addrVar, out int value) { return(TryGetAddress(file.ToString(), version, addrVar, out value)); }
/// <summary> /// Returns a stream pointed to the decompressed file at the given address /// </summary> /// <param name="file"></param> /// <returns></returns> public RomFile GetFile(RomFileToken file) => GetFile(Addresser.GetRom(file, Version, "__Start"));