static string ReOpen(string romRebuildFilename, string orignalFilename, int useFreeArea, uint freeAreaMinimumSize, uint freeAreaStartAddress, string appendFreeAreaFilename, uint useShareSameData) { ROM rom = new ROM(); string version; bool r = rom.Load(orignalFilename, out version); if (!r) { R.ShowStopError("未対応のROMです。\r\ngame version={0}", version); return(""); } using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait()) { r = ToolROMRebuildForm.ApplyROMRebuild(pleaseWait, rom, romRebuildFilename , useFreeArea , freeAreaMinimumSize , freeAreaStartAddress , appendFreeAreaFilename , useShareSameData); if (!r) { U.SelectFileByExplorer(ToolROMRebuildApply.GetLogFilename(romRebuildFilename)); return(""); } } string newFilename = U.ChangeExtFilename(romRebuildFilename, ".gba"); rom.Save(newFilename, false); return(newFilename); }
public void TestPlayThisVersion(int pos) { if (pos < 0) { Debug.Assert(false); return; } ROM rom = Program.ROM.Clone(); //undoの実行 for (int i = this.UndoBuffer.Count - 1; i >= pos; i--) { Patch(this.UndoBuffer[i], rom); } string t = U.MakeFilename("emulator"); rom.Save(t, true); MainFormUtil.RunAs("emulator", t); }
bool DownloadAndExtract(string download_url, InputFormRef.AutoPleaseWait pleaseWait) { string romdir = Path.GetDirectoryName(Program.ROM.Filename); string update7z = Path.GetTempFileName(); //ダウンロード try { U.DownloadFile(update7z, download_url, pleaseWait); } catch (Exception ee) { BrokenDownload(R.ExceptionToString(ee)); return(false); } if (!File.Exists(update7z)) { BrokenDownload(R._("ダウンロードしたはずのファイルがありません。")); return(false); } if (U.GetFileSize(update7z) <= 256) { BrokenDownload(R._("ダウンロードしたファイルが小さすぎます。")); File.Delete(update7z); return(false); } pleaseWait.DoEvents("Extract..."); if (UPSUtil.IsUPSFile(update7z)) { string upsName = Path.Combine(romdir, RecomendUPSName(download_url)); File.Copy(update7z, upsName, true); } else { //解凍 try { using (U.MakeTempDirectory t = new U.MakeTempDirectory()) { string r = ArchSevenZip.Extract(update7z, t.Dir); if (r != "") { BrokenDownload(R._("ダウンロードしたファイルを解凍できませんでした。") + "\r\n" + r); return(false); } U.CopyDirectory1Trim(t.Dir, romdir); } } catch (Exception ee) { BrokenDownload(R.ExceptionToString(ee)); File.Delete(update7z); return(false); } } File.Delete(update7z); pleaseWait.DoEvents("Select Vanilla ROM"); string[] ups_files = U.Directory_GetFiles_Safe(romdir, "*.ups", SearchOption.AllDirectories); if (ups_files.Length <= 0) { BrokenDownload(R._("UPSファイルが見つかりませんでした")); return(false); } ToolWorkSupport_SelectUPSForm f = (ToolWorkSupport_SelectUPSForm)InputFormRef.JumpFormLow <ToolWorkSupport_SelectUPSForm>(); f.OpenUPS(ups_files[0]); if (f.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return(false); } pleaseWait.DoEvents("UPS"); string orignalROMFilename = f.GetOrignalFilename(); if (orignalROMFilename == "") { return(false); } for (int i = 0; i < ups_files.Length; i++) { ROM rom = new ROM(); string version; bool rr = rom.Load(orignalROMFilename, out version); if (!rr) { R.ShowStopError("未対応のROMです。\r\ngame version={0}", version); return(false); } rr = UPSUtil.ApplyUPS(rom, ups_files[i]); if (!rr) { R.ShowStopError("UPSパッチを適応できませんでした" + "\r\n" + ups_files[i]); } string savegba = U.ChangeExtFilename(ups_files[i], ".gba"); rom.Save(savegba, true); } pleaseWait.DoEvents("ReOpen..."); MainFormUtil.ForceReopen(); return(true); }
private void ApplyUPSPatchButton_Click(object sender, EventArgs e) { if (InputFormRef.IsPleaseWaitDialog(this)) {//2重割り込み禁止 return; } string errorMessage = MainFormUtil.CheckOrignalROM(OrignalFilename.Text); if (errorMessage != "") { R.ShowStopError("無改造ROMを指定してください。" + "\r\n" + errorMessage); OrignalFilename.ErrorMessage = R._("無改造ROMを指定してください。" + "\r\n" + errorMessage); return; } OrignalFilename.ErrorMessage = ""; ROM rom = new ROM(); string version; bool r = rom.Load(OrignalFilename.Text, out version); if (!r) { R.ShowStopError("未対応のROMです。\r\ngame version={0}", version); return; } using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(this)) { r = UPSUtil.ApplyUPS(rom, this.UPSFilename); if (!r) { R.ShowStopError("UPSパッチを適応できませんでした"); return; } } this.DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); if (this.UseReOpen) {//メインフォームを開きなおさないといけない場合 MainFormUtil.ReOpenMainForm(); } if (this.IsSaveFileCheckBox.Checked) { string newFilename = U.ChangeExtFilename(this.UPSFilename, ".gba"); rom.Save(newFilename, false); //エクスプローラで選択しよう U.SelectFileByExplorer(newFilename); //保存したROMを開く. Program.LoadROM(newFilename, this.ForceVersion); } else { //保存しない場合、メモリ上の存在になる. Program.LoadVirtualROM(rom, this.UPSFilename); } }