private static void WriteObjects(IList <KeyValuePair <string, GMObject> > _data, Stream _s, IFF _iff) { IFFSaver.WriteDataKVP <GMObject>(_data, _s, _iff, delegate(KeyValuePair <string, GMObject> _kvp, Stream __s, IFF __iff, long __index) { __s.PatchOffset(__index); __iff.AddString(__s, _kvp.Key); GMObject value = _kvp.Value; __s.WriteInteger(value.SpriteIndex); __s.WriteBoolean(value.Visible); __s.WriteBoolean(value.Solid); __s.WriteInteger(value.Depth); __s.WriteBoolean(value.Persistent); __s.WriteInteger(value.Parent); __s.WriteInteger(value.Mask); // Console.WriteLine("DEBUG:\nOBJECT EVENTS: " + value.Events.ToString()); IFFSaver.WriteDataList <IList <KeyValuePair <int, GMEvent> > >(value.Events, __s, __iff, delegate(IList <KeyValuePair <int, GMEvent> > _list, Stream ___s, IFF ___iff, long ___index) { ___s.PatchOffset(___index); IFFSaver.WriteDataList <KeyValuePair <int, GMEvent> >(_list, ___s, ___iff, delegate(KeyValuePair <int, GMEvent> _entry, Stream ____s, IFF ____iff, long ____index) { ____s.PatchOffset(____index); ____s.WriteInteger(_entry.Key); IFFSaver.WriteGMEvent(_entry.Value, ____s, ____iff); }); }); }); }
private static void WriteWaveforms(GMAssets _data, Stream _s, IFF _iff) { IFFSaver.WriteDataList <Wave>(IFFSaver.ms_Waves, _s, _iff, delegate(Wave _wave, Stream __s, IFF __iff, long __index) { int num = 4; int num2 = num - 1; while ((__s.Position & (long)num2) != 0L) { __s.WriteByte(0); } __s.PatchOffset(__index); __s.WriteInteger(_wave.RawWavFile.Length); __s.Write(_wave.RawWavFile, 0, _wave.RawWavFile.Length); if (Program.WriteWaves && _wave.FileName.ToLower().EndsWith("wav")) { File.WriteAllBytes(Path.Combine(Program.OutputDir, Path.GetFileName(_wave.FileName)), _wave.RawWavFile); } }); Console.WriteLine("Converting to at3.."); int NumSounds = _data.Sounds.Count; for (int i = 0; i < NumSounds; i++) { if (!(_data.Sounds[i].ToString() == "[, ]")) { GMSound Sound = _data.Sounds[i].Value; string OriginalName = Sound.OrigName; string Extension = Path.GetExtension(Sound.OrigName); string AudioFile = Path.Combine(Program.OutputDir, OriginalName); if (Extension.ToLower() == ".mid" || Extension.ToLower() == ".midi") { Console.WriteLine("Converting " + OriginalName + " To .WAV"); File.WriteAllBytes(AudioFile, Sound.Data); Process FluidSynth = new Process(); FluidSynth.StartInfo.FileName = Path.Combine(Application.StartupPath, "fluidsynth.exe"); FluidSynth.StartInfo.WorkingDirectory = Application.StartupPath; FluidSynth.StartInfo.CreateNoWindow = true; FluidSynth.StartInfo.UseShellExecute = false; FluidSynth.StartInfo.RedirectStandardOutput = true; FluidSynth.StartInfo.RedirectStandardError = true; //Change "gm.sf2" to whatever soundfont you want. FluidSynth.StartInfo.Arguments = "-F \"" + Path.ChangeExtension(AudioFile, "wav") + "\" \"gm.sf2\" \"" + AudioFile + "\""; Console.WriteLine(FluidSynth.StartInfo.FileName + " " + FluidSynth.StartInfo.Arguments); FluidSynth.Start(); FluidSynth.WaitForExit(); if (FluidSynth.ExitCode != 0) { Console.WriteLine(FluidSynth.StandardOutput.ReadToEnd() + FluidSynth.StandardError.ReadToEnd()); return; } FluidSynth.Dispose(); } else if (Path.GetExtension(OriginalName).ToLower() == ".mp3") { Console.WriteLine("Converting " + OriginalName + " To .WAV"); MemoryStream Mp3Stream = new MemoryStream(Sound.Data); Mp3FileReader mp3 = new Mp3FileReader(Mp3Stream); WaveStream pcm = WaveFormatConversionStream.CreatePcmStream(mp3); WaveFileWriter.CreateWaveFile(Path.ChangeExtension(AudioFile, "wav"), pcm); pcm.Close(); mp3.Close(); pcm.Dispose(); mp3.Dispose(); } else { continue; } String OutputPath = Path.Combine(Program.OutputDir, "_iso_temp", "PSP_GAME", "USRDIR", Path.ChangeExtension(OriginalName, "at3")); Console.WriteLine("Output: " + OutputPath); Process At3Tool = new Process(); At3Tool.StartInfo.FileName = Path.Combine(Application.StartupPath, "at3tool.exe"); At3Tool.StartInfo.WorkingDirectory = Application.StartupPath; At3Tool.StartInfo.CreateNoWindow = true; At3Tool.StartInfo.UseShellExecute = false; At3Tool.StartInfo.RedirectStandardOutput = true; At3Tool.StartInfo.RedirectStandardError = true; At3Tool.StartInfo.Arguments = "-e \"" + Path.ChangeExtension(AudioFile, "wav") + "\" \"" + OutputPath + "\""; Console.WriteLine(At3Tool.StartInfo.FileName + " " + At3Tool.StartInfo.Arguments); At3Tool.Start(); At3Tool.WaitForExit(); if (At3Tool.ExitCode != 0) { Console.WriteLine(At3Tool.StandardOutput.ReadToEnd() + At3Tool.StandardError.ReadToEnd()); return; } At3Tool.Dispose(); if (File.Exists(AudioFile)) { File.Delete(AudioFile); } File.Delete(Path.ChangeExtension(AudioFile, "wav")); } } Console.WriteLine("Done"); }
private static void WriteRooms(IList <KeyValuePair <string, GMRoom> > _data, Stream _s, IFF _iff) { IFFSaver.WriteDataKVP <GMRoom>(_data, _s, _iff, delegate(KeyValuePair <string, GMRoom> _kvp, Stream __s, IFF __iff, long __index) { __s.PatchOffset(__index); __iff.AddString(__s, _kvp.Key); GMRoom value = _kvp.Value; __iff.AddString(__s, value.Caption); __s.WriteInteger(value.Width); __s.WriteInteger(value.Height); __s.WriteInteger(value.Speed); __s.WriteBoolean(value.Persistent); __s.WriteInteger(value.Colour); __s.WriteBoolean(value.ShowColour); __iff.AddString(__s, value.Code); __s.WriteBoolean(value.EnableViews); long position = __s.Position; __s.WriteInteger(0); long position2 = __s.Position; __s.WriteInteger(0); long position3 = __s.Position; __s.WriteInteger(0); long position4 = __s.Position; __s.WriteInteger(0); __s.PatchOffset(position); IFFSaver.WriteDataList <GMBack>(value.Backgrounds, __s, __iff, delegate(GMBack _back, Stream ___s, IFF ___iff, long ___index) { ___s.PatchOffset(___index); ___s.WriteBoolean(_back.Visible); ___s.WriteBoolean(_back.Foreground); ___s.WriteInteger(_back.Index); ___s.WriteInteger(_back.X); ___s.WriteInteger(_back.Y); ___s.WriteBoolean(_back.HTiled); ___s.WriteBoolean(_back.VTiled); ___s.WriteInteger(_back.HSpeed); ___s.WriteInteger(_back.VSpeed); ___s.WriteBoolean(_back.Stretch); }); __s.PatchOffset(position2); IFFSaver.WriteDataList <GMView>(value.Views, __s, __iff, delegate(GMView _view, Stream ___s, IFF ___iff, long ___index) { ___s.PatchOffset(___index); ___s.WriteBoolean(_view.Visible); ___s.WriteInteger(_view.XView); ___s.WriteInteger(_view.YView); ___s.WriteInteger(_view.WView); ___s.WriteInteger(_view.HView); ___s.WriteInteger(_view.XPort); ___s.WriteInteger(_view.YPort); ___s.WriteInteger(_view.WPort); ___s.WriteInteger(_view.HPort); ___s.WriteInteger(_view.HBorder); ___s.WriteInteger(_view.VBorder); ___s.WriteInteger(_view.HSpeed); ___s.WriteInteger(_view.VSpeed); ___s.WriteInteger(_view.Index); }); __s.PatchOffset(position3); IFFSaver.WriteDataList <GMInstance>(value.Instances, __s, __iff, delegate(GMInstance _inst, Stream ___s, IFF ___iff, long ___index) { ___s.PatchOffset(___index); ___s.WriteInteger(_inst.X); ___s.WriteInteger(_inst.Y); ___s.WriteInteger(_inst.Index); ___s.WriteInteger(_inst.Id); ___iff.AddString(___s, _inst.Code); ___s.WriteSingle((float)_inst.ScaleX); ___s.WriteSingle((float)_inst.ScaleY); ___s.WriteInteger((int)_inst.Colour); ___s.WriteSingle((float)_inst.Rotation); }); __s.PatchOffset(position4); IFFSaver.WriteDataList <GMTile>(value.Tiles, __s, __iff, delegate(GMTile _tile, Stream ___s, IFF ___iff, long ___index) { ___s.PatchOffset(___index); ___s.WriteInteger(_tile.X); ___s.WriteInteger(_tile.Y); ___s.WriteInteger(_tile.Index); ___s.WriteInteger(_tile.XO); ___s.WriteInteger(_tile.YO); ___s.WriteInteger(_tile.W); ___s.WriteInteger(_tile.H); ___s.WriteInteger(_tile.Depth); ___s.WriteInteger(_tile.Id); ___s.WriteSingle((float)_tile.XScale); ___s.WriteSingle((float)_tile.YScale); ___s.WriteInteger(_tile.Blend + ((int)(_tile.Alpha * 255.0) << 24)); }); }); }