Пример #1
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);
            }
        }
Пример #2
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)));
        }
Пример #3
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)));
        }
Пример #4
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)));
        }
Пример #5
0
        private void LoadPal()
        {
            Dialogs = new Dictionary <Rom.Language, Dictionary <ushort, TextboxMessage> >();

            if (Addresser.TryGetRom(ORom.FileList.code, rom.Version, AddressToken.TextbankTable, out int textbank))
            {
                RomFile codefile = rom.Files.GetFile(ORom.FileList.code);
                using (BinaryReader file = new BinaryReader(codefile.Stream))
                {
                    textbank = (int)codefile.Record.GetRelativeAddress(textbank);
                    file.BaseStream.Position = textbank;

                    LoadTextTable(file, Rom.Language.English);
                    LoadTextTable_Pal2(file, Dialogs[Rom.Language.English], Rom.Language.German);
                    LoadTextTable_Pal2(file, Dialogs[Rom.Language.English], Rom.Language.French);
                }
            }
        }
Пример #6
0
        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)));
        }
Пример #7
0
        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)));
        }