Beispiel #1
0
 void ApplyDrawFontPatch()
 {
     HowDoYouLikePatch2Form.CheckAndShowPopupDialog(HowDoYouLikePatch2Form.TYPE.DrawFont_By_Translate);
 }
        public static bool CheckAndShowPopupDialog(TYPE type)
        {
            Func <bool> checkFunc     = null;
            string      reason        = "";
            string      patchName1    = "";
            string      patchName2    = "";
            string      patchShowName = null;
            string      patchCombo    = "";

            if (type == TYPE.Anti_Huffman_By_Translate)
            {
                checkFunc  = PatchUtil.SearchAntiHuffmanPatch;
                reason     = R._("翻訳された文章がハフマン符号化テーブルを超えている可能性があります。\r\nAntiHuffmanPatchを適応しておくことをお勧めします。");
                patchName1 = "Anti-Huffman";///No Translate
            }
            if (type == TYPE.Anti_Huffman_By_English)
            {
                checkFunc  = PatchUtil.SearchAntiHuffmanPatch;
                reason     = R._("英語版で、テキストを変更するためには、Anti-Huffman Patchが必要です。");
                patchName1 = "Anti-Huffman";///No Translate
            }
            else if (type == TYPE.C01Hack_By_ImageBattleAnimation)
            {
                checkFunc  = PatchUtil.SearchC01HackPatch;
                reason     = R._("このアニメーションには、C01 命令が使われています。\r\n現在、C01ハックパッチは、まだインストールされていません。\r\nアニメーションを再生するためには、\r\nC01ハックを有効にした方がいいと思われますが、どうしますか?\r\n");
                patchName1 = "01command_hack"; ///No Translate
                patchName2 = "01コマンドハック";      ///No Translate
            }
            else if (type == TYPE.C48Hack_By_ImageBattleAnimation)
            {
                checkFunc  = PatchUtil.SearchC48HackPatch;
                reason     = R._("このアニメーションには、C48 命令(or Sxx命令)が使われています。\r\n現在、C48ハックパッチは、まだインストールされていません。\r\nアニメーションを再生するためには、\r\nC48ハックを有効にした方がいいと思われますが、どうしますか?\r\n");
                patchName1 = "48command_hack"; ///No Translate
                patchName2 = "48コマンドハック";      ///No Translate
            }
            else if (type == TYPE.NIMAP_By_SongTrack)
            {
                checkFunc = PatchUtil.SearchNIMAP;
                reason    = R._("Midi楽器はFE楽器と並び順が違うので、\r\nNIMAPを利用することをお勧めします。");
                if (Program.ROM.RomInfo.version() == 8)
                {                                                       //FE8用には更新されたバージョンを利用する.
                    patchName1 = "SOUND_NIMAP2(Native Instrument Map)"; ///No Translate
                    patchName2 = "SOUND_NIMAP2";                        ///No Translate
                }
                else
                {
                    patchName1 = "SOUND_NIMAP(Native Instrument Map)"; ///No Translate
                    patchName2 = "SOUND_NIMAP";                        ///No Translate
                }
            }
            else if (type == TYPE.Track12_Over_By_SongTrack)
            {
                checkFunc  = PatchUtil.Search16tracks12soundsPatch;
                reason     = R._("この楽曲の楽譜は、12以上のトラックが存在しています。\r\nこの曲をゲームで再生するには、16_tracks_12_soundsが必要です。\r\nこのパッチを適応しますか?");
                patchName1 = "16_tracks_12_sounds";///No Translate
            }
            else if (type == TYPE.MeleeAndMagicFix_By_Unit)
            {
                checkFunc  = PatchUtil.SearchMeleeAndMagicFixPatch;
                reason     = R._("武器と魔法を同時に利用するにはMeleeAndMagicPatchが必要です。\r\n有効にしますか?");
                patchName1 = "MeleeAndMagicFix";///No Translate
            }
            else if (type == TYPE.ItemIconExpands)
            {
                checkFunc  = PatchUtil.SearchIconExpandsPatch;
                reason     = R._("アイコンを拡張するには、テーブルを拡張する前にパッチを適応する必要があります。\r\n有効にしますか?");
                patchName1 = "Extended to item icon 0xFE";   ///No Translate
                patchName2 = "Extend Item Icon List Length"; ///No Translate
                patchCombo = "fix";
            }
            else if (type == TYPE.MagicPatch_By_Menu)
            {
                return(HowDoYouLikePatch2Form.CheckAndShowPopupDialog(HowDoYouLikePatch2Form.TYPE.MagicPatch_By_Menu));
            }
            else if (type == TYPE.Skill)
            {
                if (Program.ROM.RomInfo.version() != 8)
                {
                    return(false);
                }
                if (Program.ROM.RomInfo.is_multibyte())
                {
                    checkFunc = () =>
                    {
                        PatchUtil.skill_system_enum a = PatchUtil.SearchSkillSystem();
                        return(a == PatchUtil.skill_system_enum.FE8N ||
                               a == PatchUtil.skill_system_enum.FE8N_ver2 ||
                               a == PatchUtil.skill_system_enum.yugudora
                               );
                    };
                    reason     = R._("スキル拡張 FE8N が必要です。\r\n有効にしますか?");
                    patchName1 = "Skill Extension FE8N 2019_02_19"; ///No Translate
                    patchName2 = "skill_2019_02_19";                ///No Translate
                }
                else
                {
                    checkFunc = () =>
                    {
                        return(PatchUtil.SearchSkillSystem() == PatchUtil.skill_system_enum.SkillSystem);
                    };
                    reason     = R._("スキル拡張 SkillSystems が必要です。\r\n有効にしますか?");
                    patchName1 = "Skill20200223"; ///No Translate
                    patchName2 = "Skill20200223"; ///No Translate
                }
            }
            else if (type == TYPE.SkipWorldmapFix)
            {
                if (Program.ROM.RomInfo.version() != 8)
                {
                    return(false);
                }

                checkFunc = () =>
                {
                    return(PatchUtil.SearchSkipWorldMapPatch() != PatchUtil.mnc2_fix_enum.NO);
                };
                reason        = R._("FE8のマップをワールドマップを経由しないで移動させるには、パッチが必要です。\r\n有効にしますか?");
                patchName1    = "MNC2Fix"; ///No Translate
                patchName2    = "MNC2Fix"; ///No Translate
                patchShowName = "Skip Worldmap";
                patchCombo    = "fix";
            }
            else if (type == TYPE.CAMERA_Event_OutOfBand_Fix)
            {
                if (Program.ROM.RomInfo.version() != 8)
                {
                    return(false);
                }

                checkFunc = () =>
                {
                    return(PatchUtil.SearchCAMERA_Event_OutOfBand_FixPatch());
                };
                reason        = R._("カメラを移動する命令で、画面外に飛び出してしまうバグを修正するパッチをインストールしますか?");
                patchName1    = "Fix CAM1_CAMERA2 going out of bounds"; ///No Translate
                patchName2    = "Fix CAM1_CAMERA2 going out of bounds"; ///No Translate
                patchShowName = "Fix CAM1_CAMERA2 going out of bounds";
                patchCombo    = "Fix";
            }
            else if (type == TYPE.CAMERA_Event_NotExistsUnit_Fix)
            {
                if (Program.ROM.RomInfo.version() != 8)
                {
                    return(false);
                }

                checkFunc = () =>
                {
                    return(PatchUtil.SearchCAMERA_Event_NotExistsUnit_FixPatch());
                };
                reason        = R._("存在しないユニットを指定した時にフリーズするバグを修正するパッチをインストールしますか?");
                patchName1    = "Event26_CameraControlMaybe_Fix not to freeze even nonexistent units"; ///No Translate
                patchName2    = "Event26_CameraControlMaybe_Fix not to freeze even nonexistent units"; ///No Translate
                patchShowName = "Event26_CameraControlMaybe_Fix not to freeze even nonexistent units";
                patchCombo    = "Fix";
            }
            else if (type == TYPE.UnitStateEvent_0x34_Fix)
            {
                if (Program.ROM.RomInfo.version() != 8)
                {
                    return(false);
                }

                checkFunc = () =>
                {
                    return(PatchUtil.SearchUnitStateEvent_0x34_FixPatch());
                };
                reason        = R._("存在しないユニットを指定した時にフリーズするバグを修正するパッチをインストールしますか?");
                patchName1    = "Event34_MessWithUnitState_Fix not to freeze even nonexistent units"; ///No Translate
                patchName2    = "Event34_MessWithUnitState_Fix not to freeze even nonexistent units"; ///No Translate
                patchShowName = "Event34_MessWithUnitState_Fix not to freeze even nonexistent units";
                patchCombo    = "Fix";
            }
            else if (type == TYPE.WakuEvent_0x3B_Fix)
            {
                if (Program.ROM.RomInfo.version() != 8)
                {
                    return(false);
                }

                checkFunc = () =>
                {
                    return(PatchUtil.SearchWakuEvent_0x3B_FixPatch());
                };
                reason        = R._("存在しないユニットを指定した時にフリーズするバグを修正するパッチをインストールしますか?");
                patchName1    = "Event3B_frame_Fix not to freeze even nonexistent units"; ///No Translate
                patchName2    = "Event3B_frame_Fix not to freeze even nonexistent units"; ///No Translate
                patchShowName = "Event3B_frame_Fix not to freeze even nonexistent units";
                patchCombo    = "Fix";
            }

            Debug.Assert(checkFunc != null);
            Debug.Assert(patchName1 != "");
            Debug.Assert(reason != "");
            if (checkFunc())
            {//すでに適応されている.
                return(true);
            }
            if (patchShowName == null)
            {
                patchShowName = patchName1;
            }

            HowDoYouLikePatchForm f = (HowDoYouLikePatchForm)InputFormRef.JumpFormLow <HowDoYouLikePatchForm>();
            string tile             = R._("{0}パッチを有効にしますか?", patchShowName);

            f.Text                = tile;
            f.ReasonLabel.Text    = R._("{0}\r\n\r\n{1}", tile, reason);
            f.EnableButton.Text   = R._("{0}パッチを有効にする", patchShowName);
            f.EnableButton.Click += (sender, e) => {
                f.Close();
                PatchForm patchF = (PatchForm)InputFormRef.JumpForm <PatchForm>();
                bool      r      = patchF.ApplyPatch(patchName1, patchName2, patchCombo); ///No Translate
                if (!r)
                {
                    R.ShowStopError("パッチの自動適応に失敗しました。\r\nパッチ画面にエラーが表示されていないか確認してください。\r\n必須パッチの適応に失敗したということは、FEBuilderGBAの解凍に失敗している可能性があります。\r\nFEBuilderGBAを再インストールしてください。\r\nそれでも問題が解決しない場合は、バグとして報告してください。\r\n");
                }
                f.Close();
            };

            if (Program.IsCommandLine)
            {//コマンドラインモードだったら自動適応するしかないね。
                U.FireOnClick(f.EnableButton);
                return(checkFunc());
            }

            f.ShowDialog();

            return(checkFunc());
        }
        public static bool CheckAndShowPopupDialog(TYPE type)
        {
            Func <bool> checkFunc = null;
            string      title     = "";
            string      reason    = "";

            string patchName1    = "";
            string patchName2    = "";
            string patchShowName = null;

            string patchName3     = "";
            string patchName4     = "";
            string patchShowName3 = null;

            if (type == TYPE.MagicPatch_By_Menu)
            {
                checkFunc = () => {
                    return(ImageUtilMagic.SearchMagicSystem() != ImageUtilMagic.magic_system_enum.NO);
                };
                title = R._("魔法を追加するには、魔法システムパッチが必要です。");
                string version = Program.ROM.RomInfo.VersionToFilename();
                if (version == "FE6")
                {                                            //FE6
                    //patchName1 = "FEditorMagicCSASystem_FE6";///No Translate
                    patchName3 = "CSA_Creator_For_FE6_ver2"; ///No Translate
                }
                else if (version == "FE7J")
                {                                                 //FE7J
                    patchName1 = "Custom Spell Animation Engine"; ///No Translate
                    //patchName3 = "CSA_Creator_For_FE7U";///No Translate

//                    string no_patch = R._("残念ながら、FE7J用の魔法システムパッチは存在しません。\r\n");
//                    R.ShowStopError(title + "\r\n" + no_patch);
//                    return false;
                }
                else if (version == "FE7U")
                {                                             //FE7U
                    //patchName1 = "FEditorMagicCSASystem_FE7U";///No Translate
                    patchName3 = "CSA_Creator_For_FE7U_ver2"; ///No Translate
                }
                else if (version == "FE8J")
                {                                                       //FE8J
                    patchName1 = "magic patch (FeditorAdvMagicSystem)"; ///No Translate
                    patchName3 = "CSA_Creator_For_FE8J_ver2";           ///No Translate
                }
                else if (version == "FE8U")
                {                                              //FE8U
                    patchName1 = "FEditorMagicCSASystem_FE8U"; ///No Translate
                    patchName3 = "CSA_Creator_For_FE8U_ver2";  ///No Translate
                }

                if (patchName1 != "" && patchName3 != "")
                {
                    reason  = R._("魔法システムパッチは2つあるので、どちらかを選んでください。\r\n");
                    reason += R._("FEditorMagicCSASystemは、長い動作実績のある魔法システムです。\r\n");
                    reason += R._("CSA_Creatorは、より解像度をサポートする、新進気鋭の魔法システムです。\r\n");
                }
                else
                {
                    reason = R._("魔法システムパッチを適用してください。");
                }
            }
            else if (type == TYPE.DrawFont_By_Translate)
            {
                checkFunc = () => { return(PatchUtil.draw_font_enum.NO != PatchUtil.SearchDrawFontPatch()); };
                title     = R._("他の言語を表示するにはDrawFontパッチが必要です。");
                if (Program.ROM.RomInfo.is_multibyte())
                {
                    patchName3 = "DrawSingleByte";///No Translate
                }
                else
                {
                    patchName1 = "DrawMultiByte"; ///No Translate
                    patchName3 = "DrawUTF8";      ///No Translate

                    reason += R._("日本語へ翻訳する場合は、DrawMultiByte を選択してください。\r\n");
                    reason += R._("日本語以外へ翻訳する場合は、DrawUTF8 を選択してください\r\n");
                }
            }

            Debug.Assert(checkFunc != null);
            Debug.Assert(title != "");
            if (checkFunc())
            {//すでに適応されている.
                return(true);
            }
            if (patchShowName == null)
            {
                patchShowName = patchName1;
            }
            if (patchShowName3 == null)
            {
                patchShowName3 = patchName3;
            }

            HowDoYouLikePatch2Form f = (HowDoYouLikePatch2Form)InputFormRef.JumpFormLow <HowDoYouLikePatch2Form>();

            f.Text             = title;
            f.ReasonLabel.Text = R._("{0}\r\n\r\n{1}", title, reason);

            if (patchName1 == "")
            {
                f.EnableButton.Hide();
            }
            else
            {
                f.EnableButton.Text   = R._("{0}パッチを有効にする", patchShowName);
                f.EnableButton.Click += (sender, e) =>
                {
                    f.Close();

                    PatchForm patchF = (PatchForm)InputFormRef.JumpForm <PatchForm>();
                    patchF.ApplyPatch(patchName1, patchName2); ///No Translate
                };
            }

            if (patchName3 == "")
            {
                f.EnableButton3.Hide();
            }
            else
            {
                f.EnableButton3.Text   = R._("{0}パッチを有効にする", patchShowName3);
                f.EnableButton3.Click += (sender, e) =>
                {
                    f.Close();

                    PatchForm patchF = (PatchForm)InputFormRef.JumpForm <PatchForm>();
                    patchF.ApplyPatch(patchName3, patchName4); ///No Translate
                };
            }

            if (Program.IsCommandLine)
            {//コマンドラインモードだったら自動適応するしかないね。
                f.CommandLineClick(patchName1, patchName3);
                return(checkFunc());
            }

            f.ShowDialog();

            return(checkFunc());
        }