public static string DecompressedFileList(ORom romFile)
        {
            OFileTable ft;
            StringBuilder sb = new StringBuilder();

            ft = new OFileTable(romFile.FileLocation, romFile.Version);

            sb.AppendLine(romFile.Version.ToString());

            for (int i = 0; i < ft.Count; i++)
            {
                FileRecord record = ft[i];
                if (record.IsCompressed == false)
                {
                    sb.AppendLine($"{i:D4} {record.VRom.Start:X8}");
                }
            }
            return sb.ToString();
        }
Exemplo n.º 2
0
        public static void Export(string file, ORom.Build build)
        {
            OFileTable rom = new OFileTable(file, build);
            Scene      spirit;

            ExportModifiedScene(rom, out spirit, "06_h");
            RoomListCommand roomCommand = (RoomListCommand)spirit.Header[HeaderCommands.RoomList];

            for (int i = 0; i < 29; i++)
            {
                BinaryReader br;

                Room sRoom = new Room(Game.OcarinaOfTime, roomCommand.RoomAddresses[i]);
                Room beta  = new Room(Game.OcarinaOfTime, new FileAddress());
                br = new BinaryReader(rom.GetFile(sRoom.VirtualAddress));

                sRoom.Header.Load(br, 0);
                beta.Header.Load(br, SpiritHack.GetBetaRoomSetupOffset(0, i));

                List <SceneCommand> cmd       = beta.Header.Commands();
                SceneCommand        objectCmd = sRoom.Header[HeaderCommands.ObjectList];
                int index = cmd.FindIndex(x => x.Code == (int)HeaderCommands.ActorList);

                if (index > -1)
                {
                    cmd.Insert(index, objectCmd);
                }

                using (BinaryWriter bw = new BinaryWriter(new FileStream($"r/06_{i:D2}", FileMode.CreateNew)))
                {
                    beta.Header.WriteHeader(bw);
                    br.BaseStream.Position = bw.BaseStream.Position;

                    while (br.BaseStream.Position < br.BaseStream.Length)
                    {
                        bw.Write(br.ReadUInt32());
                    }
                }
            }
        }
Exemplo n.º 3
0
        private static void ExportModifiedScene(OFileTable rom, out Scene spirit, string filename)
        {
            BinaryReader br;

            spirit = new Scene(Game.OcarinaOfTime, 6, new FileAddress(0, 0));
            Scene beta = new Scene(Game.OcarinaOfTime, 6, new FileAddress(0, 0));

            br = new BinaryReader(rom.GetFile(rom.GetSceneVirtualAddress(6)));

            spirit.Header.Load(br, 0);
            beta.Header.Load(br, SpiritHack.GetBetaSceneSetupOffset(0));

            using (BinaryWriter bw = new BinaryWriter(new FileStream($"r/{filename}", FileMode.Create)))
            {
                beta.Header.WriteHeader(bw);
                br.BaseStream.Position = bw.BaseStream.Position;

                while (br.BaseStream.Position < br.BaseStream.Length)
                {
                    bw.Write(br.ReadUInt32());
                }
            }
            spirit.Header.InitializeAssets(br);
        }