static void Main(string[] args) { var KeyWords = new ConstTable(@"Tables/KeyWords.txt"); var Delimiters = new ConstTable(@"Tables/Delimiters.txt"); var Operations = new ConstTable(@"Tables/Operations.txt"); var Constants = new VarTable(); var Identifiers = new VarTable(); var Goto = new ConstTable(@"Tables/Goto.txt"); var Labels = new VarTable(); string TestFile = "test3"; LexicAnalyzer LA = new LexicAnalyzer(KeyWords, Delimiters, Operations, Constants, Identifiers); Token[] LexicAnalysisResult = LA.AnalyzeSource(TestFile); SyntacticAnalyzer SA = new SyntacticAnalyzer(KeyWords, Delimiters, Operations, Constants, Identifiers, Goto, Labels); try { SA.AnalyzeTokens(LexicAnalysisResult); Console.WriteLine("Синтаксическтй анализ успешно завершен."); } catch (Exception Ex) { Console.WriteLine("Ошибка: " + Ex.Message); File.WriteAllText(Directory.GetCurrentDirectory() + @"\" + TestFile + ".syn.out.txt", "Ошибка: " + Ex.Message); } CodeBuilder CB = new CodeBuilder(KeyWords, Operations, Constants, Identifiers, Goto, Labels); CB.BuildCode(SA.Output); File.WriteAllText(Directory.GetCurrentDirectory() + @"\" + TestFile + ".asm", CB.ToString()); Console.WriteLine($"Построение кода успешно завершено. Выходной файл: {TestFile}.asm"); }
public void ShowAttackChangeHP(bool left, SpriteRenderer sr, int max, int src, int dest, int speed, float waitTime, UnityAction onComplete = null) { UI_BattleAttackInfo ui = left ? Left_BattleAttackInfo : Right_BattleAttackInfo; gameMode.unitShower.SetHP(sr, max, src, dest, ConstTable.UI_VALUE_BAR_SPEED()); ui.SetHP(max, src, dest, ConstTable.UI_VALUE_BAR_SPEED(), waitTime, onComplete); }
public Transform AddUnit(EnumCharacterCamp t, string name, Sprite[] stay, Sprite[] move, Vector2Int tilePos) { Transform root = GetUnitTransformRoot(t); GameObject unit = new GameObject(name); GameObject hp = new GameObject("hp"); unit.transform.SetParent(root, false); var hp_sp = hp.AddComponent <SpriteRenderer>(); Utils.GameUtil.DelayFuncEndOfFrame(() => hp_sp.size = new Vector2(HP_WIDTH, HP_HEIGHT)); hp_sp.drawMode = SpriteDrawMode.Sliced; hp_sp.sortingOrder = 1; hp_sp.sprite = BarSprite; hp_sp.color = ConstTable.CAMP_COLOR(t, 1.0f); hp.transform.SetParent(unit.transform, false); hp.transform.localPosition = new Vector3(-0.50f, 0.08f, 0); hp.transform.localScale = Vector3.one; hp.SetActive(false); var sr = unit.AddComponent <SpriteRenderer>(); sr.sharedMaterial = UnitMaterials[(int)t]; MultiSpriteAnimator anim = unit.AddComponent <MultiSpriteAnimator>(); anim.SetAnimatorContent(MultiSpriteAnimator.EAnimateType.Stay, stay); anim.SetAnimatorContent(MultiSpriteAnimator.EAnimateType.Move, move); anim.SetActiveAnimator(MultiSpriteAnimator.EAnimateType.Stay); PositionMath.SetUnitLocalPosition(unit.transform, tilePos); keyValue.Add(tilePos, anim); return(unit.transform); }
void Awake() { render = GetComponent <SpriteRenderer>(); HPBar = transform.GetChild(0).gameObject; ConstSwitchTime = new float[countOfType] { ConstTable.UNIT_STAY_SWITCH_TIME(), ConstTable.UNIT_MOVE_SWITCH_TIME() }; }
public void Show(EnumCharacterCamp camp, int Turn, UnityAction onHide) { base.Show(); RegisterHideEvent(onHide); text.text = camp.ToString() + " Turn " + Turn; text.color = ConstTable.CAMP_COLOR(camp); AnimatePos(true, MoveOut); }
public LexicAnalyzer( ConstTable KeyWords, ConstTable Delimiters, ConstTable Operations, VarTable Constants, VarTable Identifiers) { FSM = new FiniteStateMachine(KeyWords, Delimiters, Operations, Constants, Identifiers); }
/// <summary> /// Конструктор. /// </summary> public FiniteStateMachine() { State = States.Start; KeyWords = new ConstTable(@"Tables/KeyWords.txt"); Delimiters = new ConstTable(@"Tables/Delimiters.txt"); Operations = new ConstTable(@"Tables/Operations.txt"); Constants = new VarTable(); Identifiers = new VarTable(); Letters = new ConstTable(@"Tables/Letters.txt"); Digits = new ConstTable(@"Tables/Digits.txt"); Buffer = ""; StepBack = false; }
static void Main(string[] args) { var KeyWords = new ConstTable(@"Tables/KeyWords.txt"); var Delimiters = new ConstTable(@"Tables/Delimiters.txt"); var Operations = new ConstTable(@"Tables/Operations.txt"); var Constants = new VarTable(); var Identifiers = new VarTable(); LexicAnalyzer La = new LexicAnalyzer(KeyWords, Delimiters, Operations, Constants, Identifiers); Token[] res = La.AnalyzeSource("test2"); foreach (string s in La.Output) { Console.WriteLine(s); } Console.WriteLine(Constants); Console.WriteLine(Identifiers); }
public override void OnEnter() { RPGCharacter ch = null; if (CharacterID >= 0) { ch = gameMode.ChapterManager.GetCharacterFromID(CharacterID); Assert.IsNotNull(ch, CharacterID + " id 角色不存在"); gameMode.BattlePlayer.KillUnit(CharacterID, ConstTable.UNIT_DISAPPEAR_SPEED(Speed), Continue); } else { ch = gameMode.ChapterManager.GetCharacterFromCoord(TilePos); Assert.IsNotNull(ch, TilePos + "处不存在角色"); gameMode.BattlePlayer.KillUnitAt(TilePos, ConstTable.UNIT_DISAPPEAR_SPEED(Speed), Continue); } }
public void Show(string[] talkData) { mTalkData = talkData; scriptLineIndex = 0; bTop = false; scriptLineIndex = 0; lastLineIndex = 0; bTyping = false; bStopType = false; Char_Top.sprite = null; ContentBox_Top.text = NameBox_Top.text = null; Char_Bottom.sprite = null; ContentBox_Bottom.text = NameBox_Bottom.text = null; TypeTime = ConstTable.SHOW_TEXT_TYPE_TIME(); SoundManage.Instance.LowerBGM(); gameObject.SetActive(true); }
public CodeBuilder( ConstTable KeyWords, ConstTable Operations, VarTable Constants, VarTable Identifiers, ConstTable Goto, VarTable Labels ) { this.KeyWords = KeyWords; this.Operations = Operations; this.Constants = Constants; this.Identifiers = Identifiers; this.Goto = Goto; this.Labels = Labels; output = new StringBuilder(); }
public override void Action() { Debug.Log("开始AI行动"); sequenceEvents = new List <Sequence.SequenceEvent>(); //判定人物是否在一半视野内,如果不在则进行移动 bool isInHalfView = gameMode.slgCamera.IsTargetInHalfView(unit.GetTileCoord()); if (isInHalfView) { return; } var moveCamera = AddSequenceEvent <Sequence.CameraMoveToTile>(); moveCamera.TilePos = unit.GetTileCoord(); moveCamera.MoveTime = ConstTable.CAMERA_MOVE_TIME(); var waitTime = AddSequenceEvent <Sequence.WaitTime>(); waitTime.duration = 1.0f; }
/// <summary> /// Конструктор. /// </summary> public FiniteStateMachine( ConstTable KeyWords, ConstTable Delimiters, ConstTable Operations, VarTable Constants, VarTable Identifiers ) { State = States.Start; this.KeyWords = KeyWords; this.Delimiters = Delimiters; this.Operations = Operations; this.Constants = Constants; this.Identifiers = Identifiers; Letters = new ConstTable(@"Tables/Letters.txt"); Digits = new ConstTable(@"Tables/Digits.txt"); Buffer = ""; StepBack = false; }
public override void OnEnter() { Vector2Int startPos = Routine.First(); Vector2Int endPos = Routine.Last(); Assert.IsFalse(startPos == endPos, "移动点和终结点相同"); RPGCharacter ch = null; if (CharacterID >= 0) { ch = gameMode.ChapterManager.GetCharacterFromID(CharacterID); Assert.IsNotNull(ch, startPos + "处不存在角色"); var chPos = ch.GetTileCoord(); Assert.IsTrue(startPos == chPos, "ID:" + CharacterID + " 移动起始点" + startPos + "与角色所在位置" + chPos + "不相符"); } else { ch = gameMode.ChapterManager.GetCharacterFromCoord(startPos); Assert.IsNotNull(ch, startPos + "处不存在角色"); } ch.Logic.SetTileCoord(endPos); if (CameraFollow) { gameMode.slgCamera.StartFollowTransform(ch.GetTransform(), true); } if (WaitUntilFinished) { gameMode.BattlePlayer.MoveUnitByRoutine(Routine, ConstTable.UNIT_MOVE_SPEED(Speed), Continue); } else { gameMode.BattlePlayer.MoveUnitByRoutine(Routine, ConstTable.UNIT_MOVE_SPEED(Speed), null); Continue(); } }
private async void CompileButton_Click(object sender, RoutedEventArgs e) { var str = EditField.Text; var inp = new StringAsFileBuffer(str); _lexer = new LexAn(); try { _lexer.Scan(inp); } catch (FormatException ex) { MessageBox.Show(ex.Message, "Lexical error"); Log = "Error: " + ex.Message; return; } catch (ArgumentException ex) { MessageBox.Show(ex.Message, "Compilation error"); Log = "Error: " + ex.Message; return; } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Inner compiler error"); Log = "Please contact the developer " + ex.ToString(); return; } var result = ""; foreach (var s in _lexer.Output) { result += s + " "; } Log = "Lexical output: " + result; Binding b = new Binding(); b.Source = Identifiers; b.Mode = BindingMode.OneWay; BindingOperations.ClearBinding(IdentifiersTable, DataGrid.ItemsSourceProperty); IdentifiersTable.SetBinding(DataGrid.ItemsSourceProperty, b); Binding bs = new Binding(); bs.Source = Constants; bs.Mode = BindingMode.OneWay; BindingOperations.ClearBinding(ConstTable, DataGrid.ItemsSourceProperty); ConstTable.SetBinding(DataGrid.ItemsSourceProperty, bs); var syntax = new SyntaxAnalyser(_lexer); var loading = new Loading(); loading.Show(); loading.progress.Maximum = _lexer.Output.Count - 1; syntax.LexIndexChanged += (i) => ProgressUpdate(loading, i); await Task.Run(() => syntax.BuildAST()); loading.Close(); Log = syntax.IsValid ? "Valid" : "Invalid"; if (!syntax.IsValid) { Log = syntax.ErrorMessage; } else { var root = treeView.Items[0]; DrawTree((TreeViewItem)root, syntax.Tree.Root); tabs.SelectedIndex = 1; } }
static bool GetLexem(string name) { if (IsLexem(name)) { int c = 0; for (int i = 0; i < lexem.Length; i++) { if (name == lexem[i]) { c = i + 1; } } LexemTable.Add(new Lexem(++LexemNumber, NumberOfLines, name, c, 0)); return(true); } if (IsId(name)) { string type; if (IsInitialized(name, out type)) { int code = 0; bool key = false; for (int i = 0; i < IdTable.Count; i++) { if ((name == IdTable[i].IdName)) { if (type != IdTable[i].IdType) { return(false); } key = true; code = IdTable[i].IdCode; break; } } if (!key) { IdTable.Add(new Id(name, ++IdCodeNumber, type)); code = IdCodeNumber; } LexemTable.Add(new Lexem(++LexemNumber, NumberOfLines, name, 46, code)); } else { return(false); } return(true); } if (IsConst(name)) { bool key = false; int Number = 0; for (int i = 0; i < ConstCodeNumber; i++) { if (ConstTable[i].ConstName == name) { key = true; Number = ConstTable[i].ConstCode; break; } } if (!key) { ConstTable.Add(new Const(name, ++ConstCodeNumber)); Number = ConstCodeNumber; } LexemTable.Add(new Lexem(++LexemNumber, NumberOfLines, name, 47, Number)); return(true); } return(false); }
static void Main(string[] args) { var KeyWords = new ConstTable(@"Tables/KeyWords.txt"); var Delimiters = new ConstTable(@"Tables/Delimiters.txt"); var Operations = new ConstTable(@"Tables/Operations.txt"); var Constants = new VarTable(); var Identifiers = new VarTable(); var Goto = new ConstTable(@"Tables/Goto.txt"); var Labels = new VarTable(); string TestFile = "test1"; LexicAnalyzer LA = new LexicAnalyzer(KeyWords, Delimiters, Operations, Constants, Identifiers); Token[] LexicAnalysisResult = LA.AnalyzeSource(TestFile); SyntacticAnalyzer SA = new SyntacticAnalyzer(KeyWords, Delimiters, Operations, Constants, Identifiers, Goto, Labels); try { SA.AnalyzeTokens(LexicAnalysisResult); Console.WriteLine("Синтаксическтй анализ успешно завершен."); var Tokens = new List <string>(); var Text = new List <string>(); foreach (Token[] Line in SA.Output) { string buffer = ""; string textBuffer = ""; foreach (Token T in Line) { buffer += T; if (T.TableID == KeyWords.ID) { textBuffer += KeyWords.Find(T.Index) + " "; } if (T.TableID == Operations.ID) { textBuffer += Operations.Find(T.Index) + " "; } if (T.TableID == Constants.ID) { textBuffer += Constants.Find(T.Index) + " "; } if (T.TableID == Identifiers.ID) { textBuffer += Identifiers.Find(T.Index) + " "; } if (T.TableID == Goto.ID) { textBuffer += Goto.Find(T.Index) + " "; } if (T.TableID == Labels.ID) { textBuffer += Labels.Find(T.Index) + " "; } } Tokens.Add(buffer); Text.Add(textBuffer); } File.WriteAllLines(Directory.GetCurrentDirectory() + @"\" + TestFile + ".syn.out.txt", Tokens); File.WriteAllLines(Directory.GetCurrentDirectory() + @"\" + TestFile + ".syn.text.out.txt", Text); } catch (Exception Ex) { Console.WriteLine("Ошибка: " + Ex.Message); File.WriteAllText(Directory.GetCurrentDirectory() + @"\" + TestFile + ".syn.out.txt", "Ошибка: " + Ex.Message); } }
public SyntacticAnalyzer( ConstTable KeyWords, ConstTable Delimiters, ConstTable Operations, VarTable Constants, VarTable Identifiers, ConstTable Goto, VarTable Labels ) { this.KeyWords = KeyWords; this.Delimiters = Delimiters; this.Operations = Operations; this.Constants = Constants; this.Identifiers = Identifiers; this.Goto = Goto; this.Labels = Labels; Output = new List <Token[]>(); Priority = new Dictionary <Token, int> { { Operations["+"], 2 }, { Operations["-"], 2 }, { Operations["=="], 1 }, { Operations["<="], 1 }, { Operations[">="], 1 }, { Operations["<"], 1 }, { Operations[">"], 1 }, { Operations["="], 0 } }; var BODYTerminals = new List <Token> { KeyWords["int"], KeyWords["while"], Delimiters["}"] }; BODYTerminals.AddRange(Identifiers.ToArray()); var D1Terminals = new Token[] { Operations["="], Delimiters[";"] }; var EXPRTerminals = new List <Token> { Delimiters[";"] }; EXPRTerminals.AddRange(Constants.ToArray()); EXPRTerminals.AddRange(Identifiers.ToArray()); var ICTerminals = new List <Token>(Constants.ToArray()); ICTerminals.AddRange(Identifiers.ToArray()); var W_BODYTerminals = new List <Token>(Identifiers.ToArray()); W_BODYTerminals.Add(Delimiters["{"]); var COMPTerminals = new Token[] { Operations["=="], Operations["<="], Operations[">="], Operations["<"], Operations[">"] }; var XTerminals = new Token[] { Operations["+"], Operations["-"], Delimiters[";"] }; var OPTerminals = new Token[] { Operations["+"], Operations["-"] }; Table = new StateDescriptor[] { new StateDescriptor(KeyWords["void"], 1, false, false, false, true), //0 PROG new StateDescriptor(KeyWords["void"], 2, true, false, false, true), //1 new StateDescriptor(KeyWords["main"], 3, true, false, false, true), //2 new StateDescriptor(Delimiters["("], 4, true, false, false, true), //3 new StateDescriptor(Delimiters[")"], 5, true, false, false, true), //4 new StateDescriptor(Delimiters["{"], 6, true, false, false, true), //5 new StateDescriptor(BODYTerminals.ToArray(), 8, false, true, false, true), //6 BODY new StateDescriptor(Delimiters["}"], -1, true, false, false, true), //7 new StateDescriptor(KeyWords["int"], 12, false, false, true, false), //8 BODY1 new StateDescriptor(KeyWords["while"], 23, false, false, false, false), //9 BODY2 new StateDescriptor(Identifiers.ToArray(), 46, false, false, false, false), //10 BODY3 new StateDescriptor(Delimiters["}"], 75, false, false, false, true), //11 BODY4 new StateDescriptor(KeyWords["int"], 13, true, false, false, true), //12 new StateDescriptor(Identifiers.ToArray(), 15, false, true, false, true), //13 DECL new StateDescriptor(BODYTerminals.ToArray(), 8, false, false, false, true), //14 BODY new StateDescriptor(Identifiers.ToArray(), 16, true, false, false, true), //15 new StateDescriptor(D1Terminals, 18, false, true, false, true), //16 D1 new StateDescriptor(Delimiters[";"], -1, true, false, true, true), //17 new StateDescriptor(Operations["="], 20, false, false, false, false), //18 D11 new StateDescriptor(Delimiters[";"], 22, false, false, false, true), //19 D12 new StateDescriptor(Operations["="], 21, true, false, false, true), //20 new StateDescriptor(EXPRTerminals.ToArray(), 60, false, false, false, true), //21 EXPR new StateDescriptor(Delimiters[";"], -1, false, false, true, true), //22 EPS new StateDescriptor(KeyWords["while"], 24, true, false, false, true), //23 new StateDescriptor(Delimiters["("], 25, true, false, false, true), //24 new StateDescriptor(ICTerminals.ToArray(), 29, false, true, false, true), //25 L_EXPR new StateDescriptor(Delimiters[")"], 27, true, false, false, true), //26 new StateDescriptor(W_BODYTerminals.ToArray(), 51, false, true, false, true), //27 W_BODY new StateDescriptor(BODYTerminals.ToArray(), 8, false, false, false, true), //28 BODY new StateDescriptor(ICTerminals.ToArray(), 32, false, true, false, true), //29 LOP new StateDescriptor(COMPTerminals, 36, false, true, false, true), //30 COMP new StateDescriptor(ICTerminals.ToArray(), 32, false, false, false, true), //31 LOP new StateDescriptor(Identifiers.ToArray(), 34, false, false, false, false), //32 LOP1 new StateDescriptor(Constants.ToArray(), 35, false, false, false, true), //33 LOP1 new StateDescriptor(Identifiers.ToArray(), -1, true, false, true, true), //34 new StateDescriptor(Constants.ToArray(), -1, true, false, true, true), //35 new StateDescriptor(Operations["=="], 41, false, false, false, false), //36 COMP1 new StateDescriptor(Operations["<="], 42, false, false, false, false), //37 COMP2 new StateDescriptor(Operations[">="], 43, false, false, false, false), //38 COMP3 new StateDescriptor(Operations["<"], 44, false, false, false, false), //39 COMP4 new StateDescriptor(Operations[">"], 45, false, false, false, true), //40 COMP5 new StateDescriptor(Operations["=="], -1, true, false, true, true), //41 new StateDescriptor(Operations["<="], -1, true, false, true, true), //42 new StateDescriptor(Operations[">="], -1, true, false, true, true), //43 new StateDescriptor(Operations["<"], -1, true, false, true, true), //44 new StateDescriptor(Operations[">"], -1, true, false, true, true), //45 new StateDescriptor(Identifiers.ToArray(), 47, true, false, false, true), //46 new StateDescriptor(Operations["="], 48, true, false, false, true), //47 new StateDescriptor(EXPRTerminals.ToArray(), 60, false, true, false, true), //48 EXPR new StateDescriptor(Delimiters[";"], 50, true, false, false, true), //49 new StateDescriptor(BODYTerminals.ToArray(), 8, false, false, false, true), //50 BODY new StateDescriptor(Delimiters["{"], 53, false, false, false, false), //51 W_BODY1 new StateDescriptor(Identifiers.ToArray(), 56, false, false, false, true), //52 W_BODY1 new StateDescriptor(Delimiters["{"], 54, true, false, false, true), //53 new StateDescriptor(BODYTerminals.ToArray(), 8, false, true, false, true), //54 BODY new StateDescriptor(Delimiters["}"], -1, true, false, true, true), //55 new StateDescriptor(Identifiers.ToArray(), 57, true, false, false, true), //56 new StateDescriptor(Operations["="], 58, true, false, false, true), //57 new StateDescriptor(EXPRTerminals.ToArray(), 60, false, true, false, true), //58 EXPR new StateDescriptor(Delimiters[";"], -1, true, false, true, true), //59 new StateDescriptor(Constants.ToArray(), 62, false, false, false, false), //60 EXPR1 new StateDescriptor(Identifiers.ToArray(), 64, false, false, false, true), //61 EXPR2 new StateDescriptor(Constants.ToArray(), 63, true, false, false, true), //62 new StateDescriptor(XTerminals, 66, false, false, false, true), //63 X new StateDescriptor(Identifiers.ToArray(), 65, true, false, false, true), //64 new StateDescriptor(XTerminals, 66, false, false, false, true), //65 X new StateDescriptor(OPTerminals, 68, false, false, false, false), //66 X1 new StateDescriptor(Delimiters[";"], 70, false, false, false, true), //67 X2 new StateDescriptor(OPTerminals, 71, false, true, false, true), //68 OP new StateDescriptor(EXPRTerminals.ToArray(), 60, false, false, false, true), //69 EXPR new StateDescriptor(Delimiters[";"], -1, false, false, true, true), //70 EPS new StateDescriptor(Operations["+"], 73, false, false, false, false), //71 OP1 new StateDescriptor(Operations["-"], 74, false, false, false, true), //72 OP2 new StateDescriptor(Operations["+"], -1, true, false, true, true), //73 new StateDescriptor(Operations["-"], -1, true, false, true, true), //74 new StateDescriptor(Delimiters["}"], -1, false, false, true, true), //75 EPS }; }
private void HP() { if (AttackInfo.damageToAttack > 0) { int maxHP1 = atk.Logic.GetMaxHP(); int srcHp1 = atk.Logic.GetCurrentHP(); int destHP1 = atk.Logic.Damage(AttackInfo.damageToAttack); if (destHP1 == 0) { gameMode.UIManager.ShowAttackChangeHP(!IsLeft, defSr, maxHP1, srcHp1, destHP1, ConstTable.UI_VALUE_BAR_SPEED(), WaitTime, null); } else { gameMode.UIManager.ShowAttackChangeHP(!IsLeft, defSr, maxHP1, srcHp1, destHP1, ConstTable.UI_VALUE_BAR_SPEED(), WaitTime, null); } } if (AttackInfo.hit) { int maxHP = def.Logic.GetMaxHP(); int srcHP = def.Logic.GetCurrentHP(); int destHP = def.Logic.Damage(AttackInfo.damageToDefender); if (destHP == 0) { gameMode.UIManager.ShowAttackChangeHP(IsLeft, atkSr, maxHP, srcHP, destHP, ConstTable.UI_VALUE_BAR_SPEED(), WaitTime, () => Dead(def)); } else { gameMode.UIManager.ShowAttackChangeHP(IsLeft, atkSr, maxHP, srcHP, destHP, ConstTable.UI_VALUE_BAR_SPEED(), WaitTime, Continue); } AttackInfo.damageToAttack = 10; } else { //miss Avoid(); } }
public void ExecuteMove(Vector2Int destPos) { Vector2Int srcPos = currentCharacter.GetTileCoord(); CurrentCharacterLogic.SetTileCoord(destPos); CurrentCharacterLogic.ConsumeActionPoint(EnumActionType.Move); ChangeState(EBattleState.Lock); ClearRangeAction(); gameMode.BattlePlayer.MoveUnitAfterAction(currentCharacter.GetCamp(), srcPos, destPos, ConstTable.UNIT_MOVE_SPEED(), CheckRangeEvent); }
private void Dead(RPGCharacter ch) { gameMode.BattlePlayer.KillUnit(ch, ConstTable.UNIT_DISAPPEAR_SPEED(), Continue, true); }