private void X_N_JumpEditor_Click(object sender, EventArgs e) { if (InputFormRef.IsPleaseWaitDialog(this)) {//2重割り込み禁止 return; } uint ID = (uint)AddressList.SelectedIndex; string filehint = AddressList.Text; //少し時間がかかるので、しばらくお待ちください表示. using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(this)) //テンポラリディレクトリを利用する using (U.MakeTempDirectory tempdir = new U.MakeTempDirectory()) { string filename = Path.Combine(tempdir.Dir, "anime.txt"); ImageUtilSkillSystemsAnimeCreator.Export(filename, (uint)ANIMATION.Value); if (!File.Exists(filename)) { R.ShowStopError("アニメーションエディタを表示するために、アニメーションをエクスポートしようとしましたが、アニメをファイルにエクスポートできませんでした。\r\n\r\nファイル:{0}", filename); return; } ToolAnimationCreatorForm f = (ToolAnimationCreatorForm)InputFormRef.JumpFormLow <ToolAnimationCreatorForm>(); f.Init(ToolAnimationCreatorUserControl.AnimationTypeEnum.Skill , ID, filehint, filename); f.Show(); } }
private void AnimationExportButton_Click(object sender, EventArgs e) { string title = R._("保存するファイル名を選択してください"); string filter = R._("スキルアニメスクリプト|*.txt|アニメGIF|*.gif|Dump All|*.txt|All files|*"); SaveFileDialog save = new SaveFileDialog(); save.Title = title; save.Filter = filter; save.AddExtension = true; Program.LastSelectedFilename.Load(this, "", save, "skill_" + this.AddressList.Text.Trim()); DialogResult dr = save.ShowDialog(); if (dr != DialogResult.OK) { return; } if (save.FileNames.Length <= 0 || !U.CanWriteFileRetry(save.FileNames[0])) { return; } string filename = save.FileNames[0]; Program.LastSelectedFilename.Save(this, "", save); if (save.FilterIndex == 2) {//GIF ImageUtilSkillSystemsAnimeCreator.ExportGif(filename, (uint)ANIMATION.Value); } else if (save.FilterIndex == 3) {//All ImageUtilSkillSystemsAnimeCreator.Export(filename, (uint)ANIMATION.Value); filename = U.ChangeExtFilename(filename, ".gif"); ImageUtilSkillSystemsAnimeCreator.ExportGif(filename, (uint)ANIMATION.Value); } else {//Script ImageUtilSkillSystemsAnimeCreator.Export(filename, (uint)ANIMATION.Value); } //エクスプローラで選択しよう U.SelectFileByExplorer(filename); }
public static void ExportAllData(string filename) { InputFormRef InputFormRef; if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem) { return; } string basedir = Path.GetDirectoryName(filename); List <string> lines = new List <string>(); { uint baseiconP = FindIconPointer(); uint basetextP = FindTextPointer(); uint baseanimeP = FindAnimePointer(); if (baseiconP == U.NOT_FOUND) { return; } if (basetextP == U.NOT_FOUND) { return; } if (baseanimeP == U.NOT_FOUND) { return; } InputFormRef = Init(null, basetextP); uint textAddr = InputFormRef.BaseAddress; uint anime = Program.ROM.p32(baseanimeP); for (uint i = 0; i < InputFormRef.DataCount; i++, anime += 4, textAddr += 2) { if (!U.isSafetyOffset(anime)) { break; } StringBuilder sb = new StringBuilder(); sb.Append(U.ToHexString(Program.ROM.u16(textAddr + 0))); uint addr = Program.ROM.p32(anime); sb.Append("\t"); sb.Append(U.ToHexString(addr)); lines.Add(sb.ToString()); if (!U.isExtrendsROMArea(addr) || addr == 0) {//既存領域内なので新しいアニメで上書きする. continue; } //拡張領域のアニメはexportしないといけないようだ. //内部に非拡張領域のデータを使いまわしていることがあるため string animedir = Path.Combine(basedir, "anime" + U.ToHexString(i)); U.mkdir(animedir); string anime_filename = Path.Combine(animedir, "anime.txt"); ImageUtilSkillSystemsAnimeCreator.Export(anime_filename, addr); } } File.WriteAllLines(filename, lines); }