// 「ハイパーモード」コマンド private void HyperModeCommand() { //// MOD START MARGE //// If MainWidth <> 15 Then //if (GUI.NewGUIMode) //{ // // MOD END MARGE // Status.ClearUnitStatus(); //} GUI.LockGUI(); var uname = GeneralLib.LIndex(SelectedUnit.FeatureData("ハイパーモード"), 2); var fname = SelectedUnit.FeatureName("ハイパーモード"); if (Map.IsStatusView) { // ユニットステータスコマンドの場合 if (!SelectedUnit.IsFeatureAvailable("ハイパーモード")) { uname = GeneralLib.LIndex(SelectedUnit.FeatureData("ノーマルモード"), 1); } // ハイパーモードを発動 SelectedUnit.Transform(uname); // ユニットリストの表示を更新 Event.MakeUnitList(smode: ""); // ステータスウィンドウの表示を更新 Status.DisplayUnitStatus(SelectedUnit.CurrentForm()); // コマンドを終了 GUI.UnlockGUI(); CommandState = "ユニット選択"; return; } // ハイパーモードを発動可能かどうかチェック { var withBlock1 = SelectedUnit.OtherForm(uname); if (!withBlock1.IsAbleToEnter(SelectedUnit.x, SelectedUnit.y) && !string.IsNullOrEmpty(Map.MapFileName)) { GUI.Confirm("この地形では変形できません", "", GuiConfirmOption.Ok); GUI.UnlockGUI(); CancelCommand(); return; } } // ダイアログでメッセージを表示させるため追加パイロットをあらかじめ作成 AddAdditionalPilotIfNotExist(uname, SelectedUnit); { // BGMを変更 if (SelectedUnit.IsFeatureAvailable("ハイパーモードBGM")) { var loopTo11 = SelectedUnit.CountFeature(); for (var i = 1; i <= loopTo11; i++) { var fdata = SelectedUnit.Feature(i).Data; if (SelectedUnit.Feature(i).Name == "ハイパーモードBGM" && (GeneralLib.LIndex(fdata, 1) ?? "") == uname) { var BGM = Sound.SearchMidiFile(Strings.Mid(fdata, Strings.InStr(fdata, " ") + 1)); if (Strings.Len(BGM) > 0) { Sound.ChangeBGM(BGM); GUI.Sleep(500); } break; } } } // メッセージを表示 SelectedUnit.PilotMassageIfDefined(new string[] { "ハイパーモード(" + SelectedUnit.Name + "=>" + uname + ")", "ハイパーモード(" + uname + ")", "ハイパーモード(" + fname + ")" }); // アニメ表示 SelectedUnit.PlayAnimation(new string[] { "ハイパーモード(" + SelectedUnit.Name + "=>" + uname + ")", "ハイパーモード(" + uname + ")", "ハイパーモード(" + fname + ")", "ハイパーモード", }); } // ハイパーモード発動 SelectedUnit.Transform(uname); // ハイパーモード・ノーマルモードの自動発動をチェック SelectedUnit.CurrentForm().CheckAutoHyperMode(); SelectedUnit.CurrentForm().CheckAutoNormalMode(); SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y]; // 変形イベント { var withBlock4 = SelectedUnit.CurrentForm(); Event.HandleEvent("変形", withBlock4.MainPilot().ID, withBlock4.Name); } if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; Status.ClearUnitStatus(); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } SRC.IsCanceled = false; // カーソル自動移動 if (SelectedUnit.Status == "出撃") { if (SRC.AutoMoveCursor) { GUI.MoveCursorPos("ユニット選択", SelectedUnit); } Status.DisplayUnitStatus(SelectedUnit); } CommandState = "ユニット選択"; GUI.UnlockGUI(); }
// 「分離」コマンド private void SplitCommand() { string uname, tname, fname; //// MOD START MARGE //// If MainWidth <> 15 Then //if (GUI.NewGUIMode) //{ // // MOD END MARGE // Status.ClearUnitStatus(); //} GUI.LockGUI(); if (Map.IsStatusView) { // ユニットステータスコマンドの場合 // 分離を実施 { var u = SelectedUnit; if (u.IsFeatureAvailable("パーツ分離")) { tname = GeneralLib.LIndex(u.FeatureData("パーツ分離"), 2); u.Transform(tname); } else { u.Split(); } SRC.UList.CheckAutoHyperMode(); SRC.UList.CheckAutoNormalMode(); Status.DisplayUnitStatus(Map.MapDataForUnit[u.x, u.y]); } // ユニットリストの表示を更新 Event.MakeUnitList(smode: ""); // コマンドを終了 CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } { var u = SelectedUnit; if (u.IsFeatureAvailable("パーツ分離")) { // パーツ分離を行う場合 var confirmRes = GUI.Confirm("パーツを分離しますか?", "パーツ分離", GuiConfirmOption.OkCancel | GuiConfirmOption.Question); if (confirmRes == GuiDialogResult.Cancel) { GUI.UnlockGUI(); CancelCommand(); return; } tname = GeneralLib.LIndex(u.FeatureData("パーツ分離"), 2); if (!u.OtherForm(tname).IsAbleToEnter(u.x, u.y)) { GUI.Confirm("この地形では分離できません", "分離", GuiConfirmOption.Ok); GUI.UnlockGUI(); CancelCommand(); return; } // BGM変更 if (u.IsFeatureAvailable("分離BGM")) { var BGM = Sound.SearchMidiFile(u.FeatureData("分離BGM")); if (Strings.Len(BGM) > 0) { Sound.StartBGM(u.FeatureData("分離BGM")); GUI.Sleep(500); } } fname = u.FeatureName("パーツ分離"); // メッセージを表示 SelectedUnit.PilotMassageIfDefined(new string[] { "分離(" + u.Name + ")", "分離(" + fname + ")", "分離", }); // アニメ表示 SelectedUnit.PlayAnimation(new string[] { "分離(" + u.Name + ")", "分離(" + fname + ")", "分離", }); // パーツ分離 uname = u.Name; u.Transform(tname); SelectedUnit = Map.MapDataForUnit[u.x, u.y]; Status.DisplayUnitStatus(SelectedUnit); } else { // 通常の分離を行う場合 var confirmRes = GUI.Confirm("分離しますか?", "分離", GuiConfirmOption.OkCancel | GuiConfirmOption.Question); if (confirmRes == GuiDialogResult.Cancel) { GUI.UnlockGUI(); CancelCommand(); return; } // BGM変更 if (u.IsFeatureAvailable("分離BGM")) { var BGM = Sound.SearchMidiFile(u.FeatureData("分離BGM")); if (Strings.Len(BGM) > 0) { Sound.StartBGM(u.FeatureData("分離BGM")); GUI.Sleep(500); } } fname = u.FeatureName("分離"); // メッセージを表示 SelectedUnit.PilotMassageIfDefined(new string[] { "分離(" + u.Name + ")", "分離(" + fname + ")", "分離", }); // アニメ表示 SelectedUnit.PlayAnimation(new string[] { "分離(" + u.Name + ")", "分離(" + fname + ")", "分離", }); // 分離 uname = u.Name; u.Split(); // 選択ユニットを再設定 SelectedUnit = SRC.UList.Item(GeneralLib.LIndex(u.FeatureData("分離"), 2)); Status.DisplayUnitStatus(SelectedUnit); } } // 分離イベント Event.HandleEvent("分離", SelectedUnit.MainPilot().ID, uname); if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; Status.ClearUnitStatus(); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } SRC.IsCanceled = false; // カーソル自動移動 if (SRC.AutoMoveCursor) { GUI.MoveCursorPos("ユニット選択", SelectedUnit); } // ハイパーモード&ノーマルモードの自動発動チェック SRC.UList.CheckAutoHyperMode(); SRC.UList.CheckAutoNormalMode(); CommandState = "ユニット選択"; GUI.UnlockGUI(); // XXX RedrawScreen 元はしてなかった気がする GUI.RedrawScreen(); }
// 「変形」コマンド private void TransformCommand() { // MOD START MARGE //// If MainWidth <> 15 Then //if (GUI.NewGUIMode) //{ // // MOD END MARGE // Status.ClearUnitStatus(); //} GUI.LockGUI(); var fdata = SelectedUnit.FeatureData("変形"); if (Map.IsStatusView) { // ユニットステータスコマンドの場合 var forms = GeneralLib.ToL(fdata).Skip(1) .Select(x => SelectedUnit.OtherForm(x)) .Where(x => x.IsAvailable()) .Select(x => new ListBoxItem { ListItemID = x.Name, Text = x.Nickname0, }).ToList(); var ret = 1; if (forms.Count > 1) { GUI.TopItem = 1; ret = GUI.ListBox(new ListBoxArgs { lb_caption = SelectedUnit.IsHero() ? "変身先" : "変形先", lb_info = "名前", lb_mode = "カーソル移動", Items = forms, }); if (ret == 0) { CancelCommand(); GUI.UnlockGUI(); return; } } var uname = forms[ret - 1].ListItemID; var targetUnit = SRC.UDList.Item(uname); // 変形を実施 var u = SelectedUnit; u.Transform(uname); // ユニットリストの表示を更新 Event.MakeUnitList(smode: ""); // ステータスウィンドウの表示を更新 Status.DisplayUnitStatus(u.CurrentForm()); // コマンドを終了 // XXX RedrawScreen 元はしてなかった気がする GUI.RedrawScreen(); GUI.UnlockGUI(); CommandState = "ユニット選択"; return; } { // 変形可能な形態の一覧を作成 var forms = GeneralLib.ToL(fdata).Skip(1) .Select(x => SelectedUnit.OtherForm(x)) .Where(x => x.IsAvailable()) .Select(x => new ListBoxItem { ListItemID = x.Name, Text = x.Nickname0, ListItemFlag = !(x.IsAbleToEnter(SelectedUnit.x, SelectedUnit.y) || Map.IsStatusView) }).ToList(); // 変形先の形態を選択 int ret; if (forms.Count() == 1) { if (forms.First().ListItemFlag) { GUI.Confirm("この地形では" + GeneralLib.LIndex(fdata, 1) + "できません", "", GuiConfirmOption.Ok); CancelCommand(); GUI.UnlockGUI(); return; } ret = 1; } else { GUI.TopItem = 1; ret = GUI.ListBox(new ListBoxArgs { lb_caption = SelectedUnit.IsHero() ? "変身先" : "変形先", lb_info = "名前", lb_mode = "カーソル移動", HasFlag = true, Items = forms, }); if (ret == 0) { CancelCommand(); GUI.UnlockGUI(); return; } } var uname = forms[ret - 1].ListItemID; var targetUnit = SRC.UDList.Item(uname); string BGM; { var u = SelectedUnit; // ダイアログでメッセージを表示させるため追加パイロットをあらかじめ作成 AddAdditionalPilotIfNotExist(uname, u); // BGMの変更 if (u.IsFeatureAvailable("変形BGM")) { foreach (var fd in u.Features.Where(x => x.Name == "変形BGM") .Where(x => GeneralLib.LIndex(x.Data, 1) == uname)) { BGM = Sound.SearchMidiFile(Strings.Mid(fd.Data, Strings.InStr(fd.Data, " ") + 1)); if (Strings.Len(BGM) > 0) { Sound.ChangeBGM(BGM); GUI.Sleep(500); } break; } } // メッセージを表示 SelectedUnit.PilotMassageIfDefined(new string[] { "変形(" + u.Name + "=>" + uname + ")", "変形(" + uname + ")", "変形(" + u.FeatureName("変形") + ")", }); // アニメ表示 SelectedUnit.PlayAnimationIfDefined(new string[] { "変形(" + u.Name + "=>" + uname + ")", "変形(" + uname + ")", "変形(" + u.FeatureName("変形") + ")", }); } // 変形 var prev_uname = SelectedUnit.Name; SelectedUnit.Transform(uname); SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y]; // 変形をキャンセルする? if (SelectedUnit.Action == 0) { var confirmRet = GUI.Confirm( "この形態ではこれ以上の行動が出来ません。" + Constants.vbCr + Constants.vbLf + "それでも変形しますか?", "変形", GuiConfirmOption.OkCancel | GuiConfirmOption.Question); if (confirmRet == GuiDialogResult.Cancel) { SelectedUnit.Transform(prev_uname); SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y]; if (SelectedUnit.IsConditionSatisfied("消耗")) { SelectedUnit.DeleteCondition("消耗"); } } GUI.RedrawScreen(); } // 変形イベント { Event.HandleEvent("変形", SelectedUnit.CurrentForm().MainPilot().ID, SelectedUnit.CurrentForm().Name); } if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; Status.ClearUnitStatus(); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } SRC.IsCanceled = false; // ハイパーモード・ノーマルモードの自動発動をチェック SelectedUnit.CurrentForm().CheckAutoHyperMode(); SelectedUnit.CurrentForm().CheckAutoNormalMode(); // カーソル自動移動 if (SelectedUnit.Status == "出撃") { if (SRC.AutoMoveCursor) { GUI.MoveCursorPos("ユニット選択", SelectedUnit); } Status.DisplayUnitStatus(SelectedUnit); } // XXX RedrawScreen 元はしてなかった気がする GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); } }