public static void CheckBattleMenuOff(BattleUnit btl) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; BattleUnit btl1 = null; foreach (BattleUnit next in ff9Battle.EnumerateBattleUnits()) { if (next.PlayerIndex == CharacterIndex.Eiko) { btl1 = next; } if (next.IsPlayer == btl.IsPlayer && (!next.IsUnderStatus(BattleStatus.BattleEnd) || (next.CurrentHp == 0 || next.IsUnderStatus(BattleStatus.Death)) && next.IsUnderStatus(BattleStatus.AutoLife) || btl_cmd.CheckSpecificCommand(next.Data, BattleCommandId.SysReraise))) { return; } } if (btl1 != null && btl_cmd.CheckSpecificCommand(btl1.Data, BattleCommandId.SysLastPhoenix)) { return; } UIManager.Battle.FF9BMenu_EnableMenu(false); btl_cmd.KillNormalCommand(ff9Battle); ff9Battle.btl_escape_key = 0; }
public static Boolean ManageBattleSong(FF9StateGlobal sys, UInt32 ticks, UInt32 song_id) { if ((sys.btl_flag & 16) == 0) { btlsnd.ff9btlsnd_song_vol_intplall((Int32)ticks, 0); sys.btl_flag = (Byte)(sys.btl_flag | 16); } if ((sys.btl_flag & 2) == 0) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; if ((Int64)(ff9Battle.player_load_fade = (SByte)((Int32)ff9Battle.player_load_fade + 4)) < (Int64)((UInt64)ticks)) { return(false); } btlsnd.ff9btlsnd_song_load((Int32)song_id); sys.btl_flag = (Byte)(sys.btl_flag | 2); } if (btlsnd.ff9btlsnd_sync() != 0) { return(false); } if ((sys.btl_flag & 32) == 0) { btlsnd.ff9btlsnd_song_play((Int32)song_id); sys.btl_flag = (Byte)(sys.btl_flag | 32); } return(true); }
public static void InitCommand(BTL_DATA btl) { FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle; if (stateBattleSystem.btl_phase == 2) { btl.tar_mode = 1; } btl.sel_mode = 0; btl.finger_disp = false; //int index1 = btl.bi.player == 0 ? 24 + (btl.bi.line_no - 4) * 3 : btl.bi.line_no * 6; //CMD_DATA cmdData = stateBattleSystem.cmd_buffer[index1]; for (int index2 = 0; index2 < 6; ++index2) { if (btl.bi.player != 0 || index2 < 3) { btl.cmd[index2] = new CMD_DATA { regist = btl }; ClearCommand(btl.cmd[index2]); } else { btl.cmd[index2] = null; } } ClearReflecData(btl); }
private static void UpdateData() { for (BTL_DATA btl = FF9StateSystem.Battle.FF9Battle.btl_list.next; btl != null; btl = btl.next) { if (btl.bi.slave != 0 || btl.bi.disappear != 0 || btl.bi.shadow == 0) { continue; } FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle; Int32 BoneNo = ff9btl.ff9btl_set_bone(btl.shadow_bone[0], btl.shadow_bone[1]); if (btl.bi.player != 0) { if ((stateBattleSystem.cmd_status & 1) == 0) { if ((btl.escape_key ^ stateBattleSystem.btl_escape_key) != 0) { btl_mot.SetDefaultIdle(btl); } btl.escape_key = stateBattleSystem.btl_escape_key; } btlseq.FF9DrawShadowCharBattle(stateBattleSystem.map.shadowArray, btl.bi.slot_no, 0, BoneNo); } else if (btl.die_seq < 4) { btlseq.FF9DrawShadowCharBattle(stateBattleSystem.map.shadowArray, 9 + btl.bi.slot_no, 0, BoneNo); } } }
public static void InitCommandSystem(FF9StateBattleSystem btlsys) { btlsys.cur_cmd = null; btlsys.cmd_mode = 0; btlsys.cmd_status = 2; btlsys.cmd_queue.regist = btlsys.cmd_escape.regist = null; ClearCommand(btlsys.cmd_queue); ClearCommand(btlsys.cmd_escape); }
public static void InitSelectCursor(FF9StateBattleSystem btlsys) { uint num1 = (uint)((FF9StateSystem.Battle.FF9Battle.btl_cnt & 15) << 8); List <Vector3> vector3List1 = new List <Vector3>(); List <Vector3> vector3List2 = new List <Vector3>(); List <Color32> color32List = new List <Color32>(); List <int> intList = new List <int>(); Vector3 vector3_1 = new Vector3(0.0f, 0.0f, 0.0f); vector3List1.Add(vector3_1); int num2 = 0; while (num2 < 3) { float f = (float)(num1 / 4096.0 * 360.0); Vector3 vector3_2 = new Vector3(vector3_1.x - (int)(68.0 * Mathf.Cos(f)), vector3_1.y - 133f, vector3_1.z - (int)(68.0 * Mathf.Sin(f))); vector3_2.y *= -1f; vector3List1.Add(vector3_2); ++num2; num1 = (num1 + 1265U) % 4096U; } vector3List2.Add(vector3List1[0]); vector3List2.Add(vector3List1[2]); vector3List2.Add(vector3List1[1]); vector3List2.Add(vector3List1[0]); vector3List2.Add(vector3List1[3]); vector3List2.Add(vector3List1[2]); vector3List2.Add(vector3List1[0]); vector3List2.Add(vector3List1[1]); vector3List2.Add(vector3List1[3]); vector3List2.Add(vector3List1[1]); vector3List2.Add(vector3List1[2]); vector3List2.Add(vector3List1[3]); for (int index = 0; index < vector3List2.Count; ++index) { byte num3 = (byte)Mathf.Floor(index / 3f); byte num4 = index >= 9 ? (byte)160 : (byte)(188 - 60 * num3); color32List.Add(new Color32(num4, num4, 0, byte.MaxValue)); intList.Add(index); } Mesh mesh = new Mesh { vertices = vector3List2.ToArray(), triangles = intList.ToArray(), colors32 = color32List.ToArray() }; mesh.RecalculateNormals(); GameObject gameObject = btlsys.s_cur = new GameObject("selectCursor"); MeshRenderer meshRenderer = gameObject.AddComponent <MeshRenderer>(); gameObject.AddComponent <MeshFilter>().mesh = mesh; Material material = new Material(Shader.Find("PSX/BattleMap_SelectCursor_Abr_1")); meshRenderer.material = material; gameObject.SetActive(false); }
public static void DispSelectCursor(FF9StateGlobal sys, FF9StateBattleSystem btlsys, BTL_DATA btl) { GameObject gameObject = btlsys.s_cur; Vector3 localPosition = btl.gameObject.transform.localPosition; Vector3 eulerAngles = gameObject.transform.localRotation.eulerAngles; gameObject.transform.localPosition = new Vector3(localPosition.x, localPosition.y + btl.height, localPosition.z); float num = (float)((((btlsys.btl_cnt & 15) << 8) + 1265) % 4096 / 4096.0 * 360.0); gameObject.transform.localRotation = Quaternion.Euler(eulerAngles.x, -num, eulerAngles.z); }
public static void SetEnemyDieSound(BTL_DATA btl, UInt16 snd_no) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; if (ff9Battle.enemy_die == 0 && btl.bi.die_snd_f == 0) { ff9Battle.enemy_die = 8; btl_util.SetBattleSfx(btl, snd_no, 127); btl.bi.die_snd_f = 1; } }
public static void SetDefaultShader(BTL_DATA btl) { BBGINFO bbgInfoPtr = battlebg.nf_GetBbgInfoPtr(); FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; if ((ff9Battle.btl_load_status & 4) == 0 || (ff9Battle.btl_load_status & 32) == 0 || FF9StateSystem.Battle.isFade) { return; } btl_util.GeoSetABR(btl.gameObject, "PSX/BattleMap_StatusEffect"); btl_util.GeoSetColor2DrawPacket(btl.gameObject, bbgInfoPtr.chr_r, bbgInfoPtr.chr_g, bbgInfoPtr.chr_b, Byte.MaxValue); }
private static void BattleSubSystem(FF9StateGlobal sys, FF9StateBattleSystem btlsys) { if (btlsys.enemy_die != 0) { --btlsys.enemy_die; } btlseq.Sequencer(); battlebg.nf_BattleBG(); SFX.UpdatePlugin(); btl2d.Btl2dMain(); HonoluluBattleMain.battleSPS.GenerateSPS(); }
public static void Btl2dInit() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; ff9Battle.btl2d_work_set.NewID = 0; ff9Battle.btl2d_work_set.Timer = 0; ff9Battle.btl2d_work_set.OldDisappear = Byte.MaxValue; BTL2D_ENT[] entry = ff9Battle.btl2d_work_set.Entry; for (Int16 num = 0; num < 16; num = (Int16)(num + 1)) { entry[num].BtlPtr = null; } }
public static BattleUnit FindBattleUnitUnlimited(UInt16 btl_id) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; for (Int32 i = 0; i < 8; i++) { if (ff9Battle.btl_data[i].btl_id == btl_id) { return(new BattleUnit(ff9Battle.btl_data[i])); } } return(null); }
private void PauseBattle() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; ff9Battle.attr |= 256; for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next) { if (next.animation != null) { next.animation.enabled = false; } } }
public static void ClearSysPhantom(BTL_DATA btl) { if (btl.bi.player == 0 || btl.bi.slot_no != 2) { return; } FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle; KillSpecificCommand(btl, 57); stateBattleSystem.cmd_status &= 65523; stateBattleSystem.phantom_no = 0; stateBattleSystem.phantom_cnt = 0; }
private void Update() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next) { if (!Status.checkCurStat(next, BattleStatus.Jump)) { this.CheckRenderTexture(next.texanimptr); this.CheckRenderTexture(next.tranceTexanimptr); } } }
private void ResumeBattle() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; ff9Battle.attr &= 65279; for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next) { if (next.animation != null) { next.animation.enabled = true; } } }
private static BTL_DATA SeqSubGetTarget(UInt16 pTarID) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; BTL_DATA next; for (next = ff9Battle.btl_list.next; next != null; next = next.next) { if ((next.btl_id & pTarID) != 0) { break; } } return(next); }
public static void CheckForecastMenuOff(BTL_DATA btl) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next) { if (next.bi.player == 0 && !Status.checkCurStat(next, BattleStatus.Death)) { return; } } UIManager.Battle.FF9BMenu_EnableMenu(false); btl_cmd.KillNormalCommand(ff9Battle); ff9Battle.btl_escape_key = 0; }
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 void InitBattleMap() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; battlebg.nf_InitBattleBG(ff9Battle.map.btlBGInfoPtr, ff9Battle.map.btlBGTexAnimPtr); ff9Battle.btl_load_status |= 1; btl_cmd.InitCommandSystem(ff9Battle); btl_cmd.InitSelectCursor(ff9Battle); btlseq.SetupBattleScene(); battle.btl_bonus.Event = ff9Battle.btl_scene.Info.AfterEvent != 0; if (!FF9StateSystem.Battle.isDebug) { PersistenSingleton <EventEngine> .Instance.ServiceEvents(); } SceneDirector.FF9Wipe_FadeInEx(32); ff9Battle.btl_phase = 2; }
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 Int32 SeqExecRunCamera(SEQ_WORK pSeqWork, BTL_DATA pMe) { btlseq.BattleLog("SeqExecRunCamera"); FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; SEQ_WORK_SET seq_WORK_SET = ff9Battle.seq_work_set; if (btlseq.wSeqCode != 32) { if (pSeqWork.CmdPtr.aa.Info.DefaultCamera == false) { if (FF9StateSystem.Settings.cfg.camera == 1UL) { goto IL_16C; } UInt32 num = pMe.stat.cur; for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next) { if ((next.btl_id & pSeqWork.CmdPtr.tar_id) != 0) { num |= next.stat.cur; } } if ((num & 335544320u) != 0u) { goto IL_16C; } if (Comn.random8() >= 128) { goto IL_16C; } } } Int16[] array = new Int16[3]; btlseq.SeqSubTargetAveragePos(pSeqWork.CmdPtr.tar_id, out array[0], out array[2]); array[1] = 0; seq_WORK_SET.CamTrgCPos = new Vector3((Single)array[0], (Single)array[1], (Single)array[2]); seq_WORK_SET.CamExe = pMe; seq_WORK_SET.CamTrg = btlseq.SeqSubGetTarget(pSeqWork.CmdPtr.tar_id); SFX.SetCameraTarget(seq_WORK_SET.CamTrgCPos, seq_WORK_SET.CamExe, seq_WORK_SET.CamTrg); ff9Battle.seq_work_set.CameraNo = btlseq.sequenceReader.ReadByte(); SFX.SetEnemyCamera(pMe); IL_16C: pSeqWork.CurPtr += 2; return(1); }
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); }
private static Boolean BattleIdleLoop(FF9StateGlobal sys, FF9StateBattleSystem btlsys) { //uint id = sys.id; Boolean flag = true; foreach (BattleUnit next in FF9StateSystem.Battle.FF9Battle.EnumerateBattleUnits()) { BTL_DATA data = next.Data; if (data.bi.disappear == 0) { btlseq.DispCharacter(data); if (btlsys.btl_phase == 3) { data.bi.stop_anim = 0; if (data.evt.animFrame >= GeoAnim.geoAnimGetNumFrames(data)) { if (!next.IsUnderStatus(BattleStatus.Death)) { btl_mot.setMotion(next, data.bi.def_idle); } data.evt.animFrame = 0; } if (!next.IsUnderStatus(BattleStatus.Petrify) && !btl_mot.checkMotion(data, data.bi.def_idle) && !btl_mot.checkMotion(data, 4)) { flag = false; } } else if (btlsys.btl_phase == 6 && next.IsPlayer && !next.IsUnderStatus((BattleStatus)4355U) && btlsys.btl_scene.Info.WinPose != 0 && (next.Player.Data.info.win_pose != 0 && data.evt.animFrame >= GeoAnim.geoAnimGetNumFrames(data))) { btl_mot.setMotion(next, 19); data.evt.animFrame = 0; } btl_stat.SetStatusVfx(next); } btl_mot.DieSequence(data); } if (btlsys.btl_phase == 7 && btlsys.btl_scene.Info.NoGameOver == 0 && !btl_util.ManageBattleSong(sys, 30U, 6U)) { flag = false; } battle.BattleSubSystem(sys, btlsys); return(flag); }
private static Boolean BattleIdleLoop(FF9StateGlobal sys, FF9StateBattleSystem btlsys) { //uint id = sys.id; Boolean flag = true; for (BTL_DATA next = btlsys.btl_list.next; next != null; next = next.next) { if (next.bi.disappear == 0) { btlseq.DispCharacter(next); if (btlsys.btl_phase == 3) { next.bi.stop_anim = 0; if (next.evt.animFrame >= GeoAnim.geoAnimGetNumFrames(next)) { if (!Status.checkCurStat(next, 256U)) { btl_mot.setMotion(next, next.bi.def_idle); } next.evt.animFrame = 0; } if (!Status.checkCurStat(next, 1U) && !btl_mot.checkMotion(next, next.bi.def_idle) && !btl_mot.checkMotion(next, 4)) { flag = false; } } else if (btlsys.btl_phase == 6 && next.bi.player != 0 && (!Status.checkCurStat(next, 4355U) && btlsys.btl_scene.Info.WinPose != 0) && (btl_util.getPlayerPtr(next).info.win_pose != 0 && next.evt.animFrame >= GeoAnim.geoAnimGetNumFrames(next))) { btl_mot.setMotion(next, 19); next.evt.animFrame = 0; } btl_stat.SetStatusVfx(next); } btl_mot.DieSequence(next); } if (btlsys.btl_phase == 7 && btlsys.btl_scene.Info.NoGameOver == 0 && !btl_util.ManageBattleSong(sys, 30U, 6U)) { flag = false; } battle.BattleSubSystem(sys, btlsys); return(flag); }
public static void InitBattleSystem() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; ff9Battle.btl_list.next = null; ff9Battle.btl_cnt = 0; ff9Battle.btl_phase = 0; ff9Battle.btl_seq = 0; ff9Battle.btl_fade_time = 0; ff9Battle.btl_escape_key = 0; ff9Battle.btl_escape_fade = 32; ff9Battle.btl_load_status = 0; ff9Battle.player_load_fade = 0; ff9Battle.enemy_load_fade = 0; ff9Battle.phantom_no = 0; ff9Battle.phantom_cnt = 0; ff9Battle.enemy_die = 0; battle.btl_bonus.member_flag = 0; ClearBattleBonus(); }
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 static void BattleMainLoop(FF9StateGlobal sys, FF9StateBattleSystem btlsys) { //uint id = sys.id; FF9StateSystem.Settings.SetTranceFull(); Boolean flag = false; for (BTL_DATA next = btlsys.btl_list.next; next != null; next = next.next) { if (next.bi.disappear == 0) { btlseq.DispCharacter(next); } if (!FF9StateSystem.Battle.isDebug && UIManager.Battle.CurrentPlayerIndex != -1 && (next.btl_id == 1 << UIManager.Battle.CurrentPlayerIndex && (btlsys.cmd_status & 2) != 0) && (next.flags & geo.GEO_FLAGS_CLIP) == 0) { flag = true; btl_cmd.DispSelectCursor(sys, btlsys, next); } btl_para.CheckPointData(next); // ============ Warning ============ if (Configuration.Battle.Speed == 0 || next.sel_mode != 0 || next.sel_menu != 0 || next.cur.hp == 0 || next.bi.atb == 0) { btl_stat.CheckStatusLoop(next, false); } // ================================= } if (flag) { if (!btlsys.s_cur.activeSelf) { btlsys.s_cur.SetActive(true); } } else { btlsys.s_cur.SetActive(false); } btl_cmd.CommandEngine(btlsys); battle.BattleSubSystem(sys, btlsys); }
public Boolean CanEscape() { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; if (ff9Battle.btl_scene.Info.Runaway == 0) { return(false); } for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next) { BattleUnit unit = new BattleUnit(next); const BattleStatus status = BattleStatus.Stone | BattleStatus.Poison | BattleStatus.Zombie | BattleStatus.Disable | BattleStatus.Stop | BattleStatus.Sleep | BattleStatus.Freeze | BattleStatus.Jump; if (next.bi.player != 0 && !unit.IsUnderStatus(status)) { return(true); } } return(false); }
private void FF9ChangeMap(Int32 MapNo) { FF9StateFieldSystem stateFieldSystem = FF9StateSystem.Field.FF9Field; FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle; FF9StateWorldSystem stateWorldSystem = FF9StateSystem.World.FF9World; switch (this._ff9Sys.mode) { case 1: stateFieldSystem.loc.map.nextMapNo = (Int16)MapNo; break; case 2: stateBattleSystem.map.nextMapNo = (Int16)MapNo; break; case 3: stateWorldSystem.map.nextMapNo = (Int16)MapNo; break; } }