コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: MVersioning.cs プロジェクト: Ecksters/OcaLib
        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;
            //}
        }
コード例 #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 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
         };
     }
 }
コード例 #5
0
 public static bool IsBuildNintendo(RomVersion build)
 {
     if (build == Build.UNKNOWN ||
         build == Build.CUSTOM)
     {
         return(false);
     }
     return(true);
 }
コード例 #6
0
ファイル: MFileTable.cs プロジェクト: Ecksters/OcaLib
 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);
 }
コード例 #7
0
ファイル: MFileTable.cs プロジェクト: krimtonz/MasterOcarina
 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;
 }
コード例 #8
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);
        }
コード例 #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
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #11
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #12
0
 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);
     }
 }
コード例 #13
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
 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);
 }
コード例 #14
0
        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);
        }
コード例 #15
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);
     }
 }
コード例 #16
0
ファイル: Addresser.cs プロジェクト: shawlucas/MasterOcarina
        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);
        }
コード例 #17
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);
        }
コード例 #18
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);
        }
コード例 #19
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);
        }
コード例 #20
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);
        }
コード例 #21
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #22
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);
        }
コード例 #23
0
ファイル: Addresser.cs プロジェクト: krimtonz/MasterOcarina
        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);
        }
コード例 #24
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);
        }
コード例 #25
0
ファイル: VFileTable_Data.cs プロジェクト: Ecksters/OcaLib
 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
         };
     }
 }
コード例 #26
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);
        }
コード例 #27
0
ファイル: Rom.cs プロジェクト: Ecksters/OcaLib
 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;
         }
     }
 }
コード例 #28
0
ファイル: Addresser.cs プロジェクト: Ecksters/OcaLib
        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);
        }
コード例 #29
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));
        }
コード例 #30
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));
        }