public static Room LoadSpiritRoom(RomFile file, int roomNo) { BinaryReader br; Room room = new Room(file.Version.Game, file.Record.VRom); br = new BinaryReader(file); SpiritHack.LoadSpiritRoomHeader(br, room, roomNo); return(room); }
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()); } } } }
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); }