コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: VFileTable.cs プロジェクト: Ecksters/OcaLib
        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);
        }
コード例 #3
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        public static int GetRom(RomFileToken file, RomVersion version)
        {
            var block = GetBlock(version, file.ToString());

            TryGetStart(block, version, Domain.ROM, out int addr);
            return(addr);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #6
0
        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)));
        }
コード例 #7
0
        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)));
        }
コード例 #8
0
        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)));
        }
コード例 #9
0
ファイル: Addresser.cs プロジェクト: shawlucas/MasterOcarina
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: Addresser.cs プロジェクト: shawlucas/MasterOcarina
        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);
        }
コード例 #12
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #13
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
ファイル: VFileTable.cs プロジェクト: Ecksters/OcaLib
        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)));
        }
コード例 #18
0
ファイル: VFileTable.cs プロジェクト: Ecksters/OcaLib
        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)));
        }
コード例 #19
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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));
        }
コード例 #20
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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));
        }
コード例 #21
0
 public static bool TryGetRom(RomFileToken file, RomVersion version, string addrVar, out int v)
 {
     return(TryGetAddress(file, version, addrVar, out v));
 }
コード例 #22
0
 public static int GetRom(RomFileToken file, RomVersion version, string addrVar)
 {
     return(GetAddress(file.ToString(), version, addrVar));
 }
コード例 #23
0
 private static bool TryGetAddress(RomFileToken file, RomVersion version, string addrVar, out int value)
 {
     return(TryGetAddress(file.ToString(), version, addrVar, out value));
 }
コード例 #24
0
 /// <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"));