public static void EnqueueCommand(CMD_DATA cmd) { for (CMD_DATA cp = FF9StateSystem.Battle.FF9Battle.cmd_queue; cp != null; cp = cp.next) { if (cmd.info.priority != 0 && cp.next != null) { if (cmd.cmd_no > 59 || cmd.cmd_no == 54) { if (cp.next.cmd_no < 60 && cp.next.cmd_no != 54) { InsertCommand(cmd, cp); break; } } else if (cmd.cmd_no == 59) { if (cp.next.cmd_no < 59 && cp.next.cmd_no != 54) { InsertCommand(cmd, cp); break; } } else if (cp.next.info.priority == 0) { InsertCommand(cmd, cp); break; } } else if (cp.next == null) { InsertCommand(cmd, cp); break; } } }
public static void StartBtlSeq(Int32 pBtlID, Int32 pTarID, Int32 pSeqNo) { if (btlseq.seq_work_set.SeqData[pSeqNo] == 0) { return; } BTL_DATA next; for (next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next) { if (((Int32)next.btl_id & pBtlID) != 0) { break; } } if (next == null) { return; } CMD_DATA cmd_DATA = next.cmd[0]; cmd_DATA.cmd_no = 0; cmd_DATA.sub_no = (Byte)pSeqNo; cmd_DATA.tar_id = (UInt16)pTarID; cmd_DATA.regist = next; cmd_DATA.aa = FF9StateSystem.Battle.FF9Battle.enemy_attack[pSeqNo]; cmd_DATA.info = new CMD_DATA.SELECT_INFO(); SEQ_WORK seq_WORK; if ((seq_WORK = btlseq.EntrySequence(cmd_DATA)) == null) { return; } seq_WORK.Flags.EventMode = true; }
private static String FormatMagicSwordAbility(CMD_DATA pCmd) { // TODO: Move it to an external file String abilityName = FF9TextTool.ActionAbilityName(pCmd.sub_no); String result; if (TryFormatRussianMagicSwordAbility(abilityName, out result)) { return(result); } String commandTitle = FF9TextTool.BattleCommandTitleText(0); switch (Localization.GetSymbol()) { case "JP": return($"{abilityName}{commandTitle}"); case "FR": case "IT": case "ES": return($"{commandTitle}{abilityName}"); default: return($"{abilityName} {commandTitle}"); } }
public static SEQ_WORK EntrySequence(CMD_DATA pCmd) { SEQ_WORK[] seqWork = btlseq.seq_work_set.SeqWork; Int16 num; for (num = 0; num < 4; num = (Int16)(num + 1)) { if (seqWork[(Int32)num].CmdPtr == null) { break; } } if (num < 0) { return((SEQ_WORK)null); } seqWork[(Int32)num].Flags = new SeqFlag(); seqWork[(Int32)num].CmdPtr = pCmd; seqWork[(Int32)num].CurPtr = btlseq.seq_work_set.SeqData[(Int32)pCmd.sub_no]; seqWork[(Int32)num].OldPtr = 0; seqWork[(Int32)num].IncCnt = 0; seqWork[(Int32)num].DecCnt = 0; seqWork[(Int32)num].AnmCnt = 0; seqWork[(Int32)num].AnmIDOfs = btlseq.seq_work_set.AnmOfsList[(Int32)pCmd.sub_no]; seqWork[(Int32)num].SfxTime = 0; seqWork[(Int32)num].TurnTime = 0; seqWork[(Int32)num].SVfxTime = 0; seqWork[(Int32)num].FadeTotal = 0; FF9StateSystem.Battle.FF9Battle.seq_work_set.CameraNo = 0; return(seqWork[(Int32)num]); }
public static bool KillCommand2(BTL_DATA btl) { bool flag = false; btl.bi.cmd_idle = 0; CMD_DATA cmd1 = FF9StateSystem.Battle.FF9Battle.cmd_queue; while (cmd1 != null) { CMD_DATA cmd2 = cmd1.next; if (cmd2 != null && cmd2.regist == btl && cmd2.cmd_no < 54) { if (cmd2.cmd_no < 48) { flag = true; } ResetItemCount(cmd2); DequeueCommand(cmd1, true); } else { cmd1 = cmd2; } } return(flag); }
public static Boolean CheckCounterAbility(BTL_DATA btl, BTL_DATA target, CMD_DATA cmd) { if (!Status.checkCurStat(btl, 1107300611u) && cmd.cmd_no < 48) { if ((btl.sa[1] & 16u) != 0u && (cmd.aa.Category & 8) != 0) { Int32 num = (Int32)btl.elem.wpr; if ((btl.sa[1] & 128u) != 0u) { num *= 2; } if (num > Comn.random16() % 100) { btl_cmd.SetCounter(btl, 49u, 176, target.btl_id); return(true); } } if ((btl.sa[1] & 4194304u) != 0u && (cmd.aa.Category & 128) != 0) { btl_cmd.SetCounter(btl, 50u, (Int32)cmd.sub_no, target.btl_id); return(true); } } return(false); }
private static void ResetItemCount(CMD_DATA cmd) { if (cmd.cmd_no != 14 && cmd.cmd_no != 15 && cmd.cmd_no != 51) { return; } UIManager.Battle.ItemUnuse(cmd.sub_no); }
// ReSharper restore PossibleNullReferenceException public static bool CheckMagicCondition(CMD_DATA cmd) { if (!Status.checkCurStat(cmd.regist, 8U) || (cmd.aa.Category & 2) == 0) { return(true); } UIManager.Battle.SetBattleFollowMessage(21); return(false); }
public static void InsertCommand(CMD_DATA cmd, CMD_DATA cp) { if (cmd == cp) { return; } cmd.next = cp.next; cp.next = cmd; cmd.info.stat = 1; }
public void TryEscape() { CMD_DATA curCmdPtr = btl_util.getCurCmdPtr(); if (curCmdPtr != null && curCmdPtr.regist.bi.player == 0) { return; } SByte playerCount = 0; SByte enemyCount = 0; Int16 playerLevels = 0; Int16 enemyLevels = 0; for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next) { BattleUnit unit = new BattleUnit(next); if (unit.IsPlayer) { ++playerCount; playerLevels += next.level; } else { ++enemyCount; enemyLevels += next.level; } } if (enemyCount == 0) { enemyCount = 1; } if (playerCount == 0) { playerCount = 1; } if (enemyLevels == 0) { enemyLevels = 1; } if (playerLevels == 0) { playerLevels = 1; } const UInt32 fleeIterationScript = 0056; Int16 rate = (Int16)(200 / (enemyLevels / enemyCount) * (playerLevels / playerCount) / 16); if (rate > Comn.random16() % 100) { btl_cmd.SetCommand(FF9StateSystem.Battle.FF9Battle.cmd_escape, fleeIterationScript, 1U, 15, 1U); } }
public static void KillSpecificCommand(BTL_DATA btl, byte cmd_no) { for (CMD_DATA cmd = FF9StateSystem.Battle.FF9Battle.cmd_queue; cmd != null; cmd = cmd.next) { if (cmd.next != null && cmd.next.regist == btl && cmd.next.cmd_no == cmd_no) { DequeueCommand(cmd, true); break; } } }
public static bool CheckSpecificCommand(BTL_DATA btl, byte cmd_no) { for (CMD_DATA cmdData = FF9StateSystem.Battle.FF9Battle.cmd_queue; cmdData != null; cmdData = cmdData.next) { if (cmdData.regist == btl && cmdData.cmd_no == cmd_no) { return(true); } } CMD_DATA curCmdPtr = btl_util.getCurCmdPtr(); return(curCmdPtr != null && curCmdPtr.cmd_no == cmd_no); }
public static bool CheckUsingCommand(CMD_DATA cmd) { for (CMD_DATA cmdData = FF9StateSystem.Battle.FF9Battle.cmd_queue; cmdData != null; cmdData = cmdData.next) { if (cmd == cmdData) { return(true); } } CMD_DATA curCmdPtr = btl_util.getCurCmdPtr(); return(curCmdPtr != null && curCmdPtr == cmd); }
private static void DequeueCommand(CMD_DATA cmd, bool escape_check) { CMD_DATA cmdData = cmd.next; cmd.next = cmdData.next; cmdData.info.stat = 0; cmdData.info.priority = 0; if (!escape_check || cmdData.cmd_no != 56) { return; } FF9StateSystem.Battle.FF9Battle.cmd_status &= 65534; }
private static String FormatMagicSwordAbility(CMD_DATA pCmd) { // TODO: Move it to an external file String abilityName = FF9TextTool.ActionAbilityName(pCmd.sub_no); switch (abilityName) { case "Огонь": return("Огненный клинок"); case "Огонь II": return("Огненный клинок II"); case "Огонь III": return("Огненный клинок III"); case "Буран": return("Ледяной клинок"); case "Буран II": return("Ледяной клинок II"); case "Буран III": return("Ледяной клинок III"); case "Молния": return("Электрический клинок"); case "Молния II": return("Электрический клинок II"); case "Молния III": return("Электрический клинок III"); case "Био": return("Ядовитый клинок"); case "Вода": return("Водный клинок"); case "Взрыв": return("Взрывной клинок"); case "Судный день": return("Клинок Судного дня"); } String str2 = Localization.GetSymbol() == "JP" ? String.Empty : " "; return(abilityName + str2 + FF9TextTool.BattleCommandTitleText(0)); }
private static bool CheckMpCondition(CMD_DATA cmd) { short mp = cmd.aa.MP; if (battle.GARNET_SUMMON_FLAG != 0 && (cmd.aa.Type & 4) != 0) { mp *= 4; } if (cmd.cmd_no == 50 || btl_calc.ConsumeMp(cmd.regist, mp)) { return(true); } UIManager.Battle.SetBattleFollowMessage(22); return(false); }
public static void RunSequence(CMD_DATA pCmd) { if (FF9StateSystem.Battle.FF9Battle.seq_work_set.SeqData[(Int32)pCmd.sub_no] == 0) { return; } if (btlseq.EntrySequence(pCmd) == null) { return; } if (pCmd.regist.bi.player == 0) { Vector3 eulerAngles = pCmd.regist.rot.eulerAngles; pCmd.regist.rot.eulerAngles = new Vector3(eulerAngles.x, 0f, eulerAngles.z); } }
public static Int32 SeqExecCalc(SEQ_WORK pSeqWork, BTL_DATA pMe) { btlseq.BattleLog("SeqExecCalc"); CMD_DATA cmdPtr = pSeqWork.CmdPtr; UInt16 tar_id = cmdPtr.tar_id; for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next) { if ((next.btl_id & tar_id) != 0) { btl_cmd.ExecVfxCommand(next); } } pSeqWork.CurPtr++; return(1); }
public void SetBattleCommandTitle(CMD_DATA pCmd) { String str1 = String.Empty; switch (pCmd.cmd_no) { case 14: case 15: str1 = FF9TextTool.ItemName(pCmd.sub_no); break; case 50: str1 = pCmd.aa.Name; break; default: if (pCmd.sub_no < 192) { Int32 id = CmdTitleTable[pCmd.sub_no].MappedId; switch (id) { case 254: // Magic sword str1 = FormatMagicSwordAbility(pCmd); break; case 255: str1 = FF9TextTool.ActionAbilityName(pCmd.sub_no); break; case 0: break; default: str1 = id >= 192 ? FF9TextTool.BattleCommandTitleText((id & 63) + 1) : FF9TextTool.ActionAbilityName(id); break; } } break; } if (String.IsNullOrEmpty(str1) || (pCmd.cmd_no == 7 && pCmd.sub_no == 96)) { return; } SetBattleTitle(str1, 1); }
private static bool CheckTargetCondition(FF9StateBattleSystem btlsys, CMD_DATA cmd) { ushort num1 = 0; if (cmd.tar_id == 0) { return(false); } ushort num2; switch (cmd.cmd_no) { case 14: case 51: num2 = ff9item._FF9Item_Info[btl_util.btlItemNum(cmd.sub_no)].info.dead; break; case 59: return(true); default: num2 = cmd.aa.Info.dead; break; } for (BTL_DATA btl = btlsys.btl_list.next; btl != null; btl = btl.next) { if (btl.bi.target != 0 && (btl.btl_id & cmd.tar_id) != 0 && (num2 != 0 && btl.bi.player != 0 || !Status.checkCurStat(btl, 256U))) { num1 |= btl.btl_id; } } if (num1 != 0) { cmd.tar_id = num1; return(true); } if (cmd.info.cursor == 0 && num2 == 0) { cmd.tar_id = btl_util.GetRandomBtlID(cmd.tar_id & 15U); if (cmd.tar_id != 0) { return(true); } } return(false); }
public static void ClearCommand(CMD_DATA cmd) { cmd.next = null; cmd.aa = null; cmd.tar_id = 0; cmd.cmd_no = 0; cmd.sub_no = 0; cmd.info.cursor = 0; cmd.info.stat = 0; cmd.info.priority = 0; cmd.info.cover = 0; cmd.info.dodge = 0; cmd.info.reflec = 0; cmd.info.meteor_miss = 0; cmd.info.short_summon = 0; cmd.info.mon_reflec = 0; }
public static void KillCommand(CMD_DATA cmd) { BTL_DATA btlData = cmd.regist; for (CMD_DATA cmd1 = FF9StateSystem.Battle.FF9Battle.cmd_queue; cmd1 != null; cmd1 = cmd1.next) { if (cmd1.next == cmd) { if (btlData != null && cmd != btlData.cmd[3] && cmd != btlData.cmd[4]) { btlData.bi.cmd_idle = 0; } DequeueCommand(cmd1, false); break; } } }
public static void KillNormalCommand(FF9StateBattleSystem btlsys) { CMD_DATA cp = btlsys.cmd_queue; while (cp != null) { CMD_DATA ncp = cp.next; if (ncp != null && ncp.cmd_no != 54 && ncp.cmd_no < 58) { ManageDequeueCommand(cp, ncp); } else { cp = ncp; } } }
public static ushort CheckReflec(CMD_DATA cmd) { ushort num1 = 0; if (cmd.cmd_no != 14 && cmd.cmd_no != 15 && (cmd.cmd_no != 51 && (cmd.aa.Category & 1) != 0) && ((int)cmd.regist.sa[0] & 1073741824) == 0) { uint num2 = cmd.tar_id >= 16 ? 1U : 0U; ushort[] numArray = new ushort[4]; short num3; short num4 = num3 = 0; for (BTL_DATA btl = FF9StateSystem.Battle.FF9Battle.btl_list.next; btl != null; btl = btl.next) { if ((btl.btl_id & cmd.tar_id) != 0) { if (!Status.checkCurStat(btl, 1U) && btl_stat.CheckStatus(btl, 536870912U)) { num1 |= btl.btl_id; ++num4; } } else if (!Status.checkCurStat(btl, 256U) && btl.bi.player == (int)num2 && btl.bi.target != 0) { numArray[num3++] = btl.btl_id; } } if (num4 != 0 && num3 != 0) { for (int index = 0; index < 4; ++index) { cmd.regist.reflec.tar_id[index] = index >= num4 ? (ushort)0 : numArray[Comn.random8() % num3]; } if (num1 == cmd.tar_id) { cmd.info.reflec = 1; cmd.tar_id = MargeReflecTargetID(cmd.regist.reflec); } else { cmd.info.reflec = 2; cmd.tar_id = (ushort)(cmd.tar_id & (uint)~num1); } } } return(num1); }
public static void KillCommand3(BTL_DATA btl) { CMD_DATA cmd1 = FF9StateSystem.Battle.FF9Battle.cmd_queue; while (cmd1 != null) { CMD_DATA cmd2 = cmd1.next; if (cmd2 != null && cmd2.regist == btl) { ResetItemCount(cmd2); DequeueCommand(cmd1, true); } else { cmd1 = cmd2; } } }
public static bool CheckSpecificCommand2(byte cmd_no) { bool flag = false; for (CMD_DATA cmdData = FF9StateSystem.Battle.FF9Battle.cmd_queue; cmdData != null; cmdData = cmdData.next) { if (cmdData.cmd_no == cmd_no) { flag = true; } } CMD_DATA curCmdPtr = btl_util.getCurCmdPtr(); if (curCmdPtr != null && curCmdPtr.cmd_no == cmd_no) { flag = true; } return(flag); }
public static void KillAllCommand(FF9StateBattleSystem btlsys) { CMD_DATA cp = btlsys.cmd_queue; while (cp != null) { CMD_DATA ncp = cp.next; if (ncp != null && ncp.cmd_no < 59) { ManageDequeueCommand(cp, ncp); } else { cp = ncp; } } btlsys.cmd_status &= 65523; btlsys.phantom_no = (byte)(btlsys.phantom_cnt = 0); }
public static void ReqFinishCommand() { FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle; CMD_DATA cmd = stateBattleSystem.cur_cmd; if (cmd.info.reflec == 2) { cmd.tar_id = MargeReflecTargetID(cmd.regist.reflec); btl_vfx.SetBattleVfx(cmd, (uint)cmd.aa.Info.vfx_no, null); stateBattleSystem.cmd_mode = 2; } else { if (Status.checkCurStat(cmd.regist, 8192U) && cmd.cmd_no == 60 && !btl_mot.checkMotion(cmd.regist, 4)) { return; } stateBattleSystem.cmd_mode = 4; } }
private void SendAutoAttackCommand(Int32 playerIndex) { BattleUnit player = FF9StateSystem.Battle.FF9Battle.GetUnit(playerIndex); CMD_DATA cmd = player.Data.cmd[0]; if (cmd != null && btl_cmd.CheckUsingCommand(cmd)) { return; } CurrentPlayerIndex = playerIndex; _currentCommandIndex = CommandMenu.Attack; BattleUnit enemy = GetFirstAliveEnemy(); if (enemy != null) { btl_cmd.SetCommand(player.Data.cmd[0], 1U, 176U, enemy.Id, 0U); InputFinishList.Add(CurrentPlayerIndex); } CurrentPlayerIndex = -1; }
public static void ManageDequeueCommand(CMD_DATA cp, CMD_DATA ncp) { if (cp == null) { return; } FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle; BTL_DATA btl = ncp.regist; if (ncp.cmd_no < 48 && btl != null && !Status.checkCurStat(btl, 256U)) { btl.sel_mode = 0; if (btl_mot.checkMotion(btl, 9) && (btl.bi.slot_no != 6 || stateBattleSystem.cur_cmd != null && stateBattleSystem.cur_cmd.cmd_no != 21) && (btl.bi.slot_no != 1 || stateBattleSystem.cur_cmd != null && stateBattleSystem.cur_cmd.cmd_no != 31 && stateBattleSystem.cur_cmd.cmd_no != 23)) { btl_mot.setMotion(btl, 32); btl.evt.animFrame = 0; btl.bi.cmd_idle = 0; } } ResetItemCount(ncp); DequeueCommand(cp, true); }