public static void InitBattleData(BTL_DATA btl, FF9Char ff9char) { BTL_INFO bi = btl.bi; btl_cmd.InitCommand(btl); btl_stat.InitStatus(btl); bi.dmg_mot_f = 0; bi.cmd_idle = 0; bi.death_f = 0; bi.stop_anim = 0; btl.SetDisappear(0); bi.shadow = 1; bi.cover = 0; bi.dodge = 0; bi.die_snd_f = 0; bi.select = 0; btl.escape_key = 0; btl.sel_menu = 0; btl.fig_info = 0; btl.fig = 0; btl.m_fig = 0; btl.fig_stat_info = 0; btl.fig_regene_hp = 0; btl.fig_poison_hp = 0; btl.fig_poison_mp = 0; btl.die_seq = 0; ff9char.btl = btl; btl.evt = ff9char.evt; GeoTexAnim.geoTexAnimPlay(btl.texanimptr, 2); btl_util.GeoSetColor2Source(btl.gameObject, 0, 0, 0); btl.mesh_current = 0; }
public void Remove() { battle.btl_bonus.member_flag &= (Byte) ~(1 << Data.bi.line_no); btl_cmd.ClearSysPhantom(Data); btl_cmd.KillCommand3(Data); btl_sys.SavePlayerData(Data, 1U); btl_sys.DelCharacter(Data); Data.SetDisappear(1); UIManager.Battle.DisplayInfomation(); UIManager.Battle.RemovePlayerFromAction(Data.btl_id, true); }
public static void SetEnemyFadeToPacket(BTL_DATA btl, Int32 rate) { BBGINFO bbginfo = battlebg.nf_GetBbgInfoPtr(); btl_util.GeoSetABR(btl.gameObject, "GEO_POLYFLAGS_TRANS_100_PLUS_25"); btl_util.GeoSetColor2DrawPacket(btl.gameObject, (Byte)((Int32)bbginfo.chr_r * rate >> 5), (Byte)((Int32)bbginfo.chr_g * rate >> 5), (Byte)((Int32)bbginfo.chr_b * rate >> 5), Byte.MaxValue); if (btl.bi.shadow != 0) { btl_util.GeoSetABR(btl.getShadow(), "GEO_POLYFLAGS_TRANS_100_PLUS_25"); btl_util.GeoSetColor2DrawPacket(btl.getShadow(), (Byte)((Int32)bbginfo.chr_r * rate >> 5), (Byte)((Int32)bbginfo.chr_g * rate >> 5), (Byte)((Int32)bbginfo.chr_b * rate >> 5), Byte.MaxValue); } if (rate == 0) { btl.SetDisappear(1); } }
private static void BattleTrailingLoop(FF9StateGlobal sys, FF9StateBattleSystem btlsys) { //uint id = sys.id; UInt32 num1 = 1; if (SFX.isRunning || btlsys.cmd_queue.next != null || btlsys.cur_cmd != null) { num1 = 0U; } foreach (BattleUnit next in FF9StateSystem.Battle.FF9Battle.EnumerateBattleUnits()) { BTL_DATA data = next.Data; if (data.bi.disappear == 0) { btlseq.DispCharacter(data); switch (btlsys.btl_seq) { case 0: btl_para.CheckPointData(data); if ((!next.IsPlayer && !next.IsUnderStatus((BattleStatus)4099U)) || (next.IsPlayer && next.IsUnderStatus(BattleStatus.Death)) && !btl_mot.checkMotion(data, 4)) { num1 = 0U; } break; case 1: if (next.IsPlayer && !btl_mot.checkMotion(data, 4) && !next.IsUnderStatus((BattleStatus)4099U)) { num1 = 0U; } break; case 2: if (btlsys.cmd_queue.next != null && btlsys.cur_cmd == null && (!btl_cmd.CheckSpecificCommand2(59) && !btl_cmd.CheckSpecificCommand2(60)) && (!btl_cmd.CheckSpecificCommand2(61) && !btl_cmd.CheckSpecificCommand2(62))) { num1 = 1U; } btl_para.CheckPointData(data); if (next.IsPlayer) { next.TryRemoveStatuses((BattleStatus)33592320U); } if (btlsys.cmd_mode != 0) { num1 = 0U; } if (next.IsUnderStatus(BattleStatus.Death)) { if (data.die_seq == 0 && !btl_cmd.CheckUsingCommand(data.cmd[2])) { btl_cmd.SetCommand(data.cmd[2], 60U, 0U, data.btl_id, 0U); } if (next.IsPlayer && data.die_seq != 6 || !next.IsPlayer && data.die_seq != 6) { num1 = 0U; } break; } if (!Status.checkCurStat(data, 33558531U) && !btl_mot.checkMotion(data, 0) && !btl_mot.checkMotion(data, 1)) { num1 = 0U; } break; case 3: btl_cmd.KillAllCommand(btlsys); if (next.IsUnderStatus(BattleStatus.Death)) { if (data.die_seq == 0) { data.die_seq = 1; } if (!btl_mot.checkMotion(data, 4) || btl_cmd.CheckSpecificCommand(data, 61)) { num1 = 0U; } break; } if (next.IsPlayer && !Status.checkCurStat(data, 1107431747U)) { FF9StateSystem.Battle.isFade = true; data.pos[2] -= 100f; btl_util.SetFadeRate(data, btlsys.btl_escape_fade); if (btlsys.btl_escape_fade <= 0) { data.SetDisappear(1); break; } num1 = 0U; if (btlsys.btl_escape_fade == 32) { btlsnd.ff9btlsnd_sndeffect_play(2906, 0, SByte.MaxValue, 128); btlsnd.ff9btlsnd_sndeffect_play(2907, 0, SByte.MaxValue, 128); btlsnd.ff9btlsnd_sndeffect_play(2908, 0, SByte.MaxValue, 128); btlsys.btl_escape_fade -= 2; } } break; } btl_stat.SetStatusVfx(next); } btl_mot.DieSequence(data); } if (btlsys.btl_seq == 3 && btlsys.btl_escape_fade < 32 && btlsys.btl_escape_fade != 0) { btlsys.btl_escape_fade -= 2; } if ((Int32)num1 != 0) { switch (btlsys.btl_seq) { case 0: case 4: sys.btl_flag |= 64; sys.btl_result = 1; if (btlsys.btl_scene.Info.WinPose != 0) { if (btl_util.ManageBattleSong(sys, 30U, 5U)) { for (BTL_DATA next = btlsys.btl_list.next; next != null; next = next.next) { if (next.bi.player != 0) { /*int num2 = (int)*/ btl_stat.RemoveStatuses(next, 3221208064U); if (!Status.checkCurStat(next, 4355U)) { if (next.cur.hp > 0) { Int32 num3 = btl_mot.GetDirection(next); next.evt.rotBattle.eulerAngles = new Vector3(next.evt.rotBattle.eulerAngles.x, num3, next.evt.rotBattle.eulerAngles.z); next.rot.eulerAngles = new Vector3(next.rot.eulerAngles.x, num3, next.rot.eulerAngles.z); next.bi.def_idle = !btl_stat.CheckStatus(next, 197122U) ? (Byte)0 : (Byte)1; next.bi.cmd_idle = 0; if (btl_util.getPlayerPtr(next).info.win_pose != 0) { btl_mot.setMotion(next, 18); } else { btl_mot.setMotion(next, next.bi.def_idle); } next.evt.animFrame = 0; } else { /*int num4 = (int)*/ btl_stat.AlterStatus(next, 256U); } } } } SFX.SetCamera(2); } else { break; } } else if (btlsys.btl_scene.Info.FieldBGM != 0) { sys.btl_flag |= 8; } btlsys.btl_phase = 6; break; case 1: sys.btl_result = 3; btlsys.btl_phase = 7; break; case 2: if (btlsys.btl_scene.Info.WinPose == 0 && btlsys.btl_scene.Info.FieldBGM != 0) { sys.btl_flag |= 8; } btlsys.btl_phase = 1; btl_cmd.KillAllCommand(btlsys); btl_cmd.InitCommandSystem(btlsys); for (BTL_DATA next = btlsys.btl_list.next; next != null; next = next.next) { btl_cmd.InitCommand(next); if (next.bi.player == 0) { Int32 num2 = btl_mot.GetDirection(next); next.evt.rotBattle.eulerAngles = new Vector3(next.evt.rotBattle.eulerAngles.x, num2, next.evt.rotBattle.eulerAngles.z); next.rot.eulerAngles = new Vector3(next.rot.eulerAngles.x, num2, next.rot.eulerAngles.z); } } break; case 3: UInt32 gil = (UInt32)battle.btl_bonus.gil; sys.btl_flag |= 64; for (BTL_DATA next = btlsys.btl_list.next; next != null; next = next.next) { if (next.bi.player == 0) { gil += btl_util.getEnemyTypePtr(next).bonus.gil; } } if (btlsys.btl_scene.Info.WinPose == 0 && btlsys.btl_scene.Info.FieldBGM != 0) { sys.btl_flag |= 8; } sys.btl_result = 4; btlsys.btl_phase = 8; btl_sys.ClearBattleBonus(); if ((sys.btl_flag & 4) != 0) { UInt32 num2 = gil / 10U; if (sys.party.gil > num2) { sys.party.gil -= num2; } else { num2 = sys.party.gil; sys.party.gil = 0U; } UIManager.Battle.SetBattleFollowMessage(30, num2); break; } if (btl_abil.CheckPartyAbility(1U, 16384U)) { battle.btl_bonus.escape_gil = true; battle.btl_bonus.gil = (Int32)(gil / 10U); } break; } if (btlsys.btl_phase != 5) { btlsys.btl_seq = btlsys.btl_phase != 6 || btlsys.btl_scene.Info.WinPose != 0 ? (Byte)0 : (Byte)1; } } else { btl_cmd.CommandEngine(btlsys); } battle.BattleSubSystem(sys, btlsys); }
public static void ExecVfxCommand(BTL_DATA target) { CMD_DATA curCmdPtr = btl_util.getCurCmdPtr(); if (curCmdPtr == null) { Debug.LogError("no command!"); } else { BTL_DATA caster = curCmdPtr.regist; byte num = curCmdPtr.cmd_no; switch (num) { case 12: label_7: caster.tar_mode = 2; caster.SetDisappear(1); break; case 14: label_8: UIManager.Battle.ItemUse(curCmdPtr.sub_no); btl_calc.CalcMain(caster, target, curCmdPtr, ff9item._FF9Item_Info[btl_util.btlItemNum(curCmdPtr.sub_no)].Ref.prog_no); break; case 15: UIManager.Battle.ItemUse(curCmdPtr.sub_no); btl_calc.CalcMain(caster, target, curCmdPtr, curCmdPtr.aa.Ref.prog_no); break; default: switch (num) { case 49: case 52: label_6: btl_calc.CalcMain(caster, target, curCmdPtr, caster.weapon.Ref.prog_no); return; case 51: goto label_8; default: switch (num) { case 1: goto label_6; case 3: goto label_7; default: if (num == 58) { ushort battleId = btl_scrp.GetBattleID(1U); ushort statusBtlId = btl_util.GetStatusBtlID(1U, 4355U); if (battleId == 0 || battleId == statusBtlId) { FF9StateBattleSystem btlsys = FF9StateSystem.Battle.FF9Battle; UIManager.Battle.FF9BMenu_EnableMenu(false); if (btlsys.btl_phase != 5) { btlsys.btl_phase = 5; btlsys.btl_seq = 0; KillAllCommand(btlsys); } } btl_calc.CalcMain(caster, target, curCmdPtr, curCmdPtr.aa.Ref.prog_no); return; } btl_calc.CalcMain(caster, target, curCmdPtr, curCmdPtr.aa.Ref.prog_no); return; } } } } }
private static void FinishCommand(FF9StateBattleSystem btlsys) { CMD_DATA cmd = btlsys.cur_cmd; BTL_DATA btl1 = cmd.regist; if (cmd.cmd_no < 48) { if (cmd == btl1.cmd[0] && cmd.cmd_no != 3 && cmd.cmd_no != 12) { ResetCurrentBattlerActiveTime(btl1); } else if (cmd.cmd_no == 21 && btl1.bi.slot_no == 6 && (cmd == btl1.cmd[3] && !CheckUsingCommand(btl1.cmd[0]))) { ResetCurrentBattlerActiveTime(btl1); } else if (cmd.cmd_no == 10) { /*int num = (int)*/ btl_stat.RemoveStatus(btl1, 1073741824U); FF9StateSystem.Battle.FF9Battle.cmd_status &= 65519; } else if (cmd.cmd_no == 11) { /*int num = (int)*/ btl_stat.AlterStatus(btl1, 1073741824U); btl1.tar_mode = 2; btl1.SetDisappear(1); FF9StateSystem.Battle.FF9Battle.cmd_status &= 65519; } if (Status.checkCurStat(btl1, 16384U) && cmd.cmd_no != 3 && cmd.cmd_no != 12) { byte num1 = (byte)((300 - btl1.level) / btl1.elem.wpr * 10); if (cmd.cmd_no == 21 || cmd.cmd_no == 23) { num1 /= 2; } if (FF9StateSystem.Settings.IsTranceFull) { num1 = 0; } if (btl1.trance > num1) { btl1.trance -= num1; } else if (!FF9StateSystem.Battle.isDebug) { /*int num2 = (int)*/ btl_stat.RemoveStatus(btl1, 16384U); } if (cmd.cmd_no == 18 && btlsys.phantom_no != 0) { btlsys.cmd_status |= 4; btlsys.phantom_cnt = setPhantomCount(btl1); } } } else if (cmd.cmd_no == 57) { btlsys.cmd_status &= 65527; btlsys.phantom_cnt = setPhantomCount(btl1); } else if (cmd.cmd_no < 53 && CheckUsingCommand(btl1.cmd[0])) { btl1.bi.cmd_idle = 1; } if (cmd.info.cover != 0) { for (BTL_DATA btl2 = FF9StateSystem.Battle.FF9Battle.btl_list.next; btl2 != null; btl2 = btl2.next) { if (btl2.bi.player != 0) { btl_mot.setBasePos(btl2); if (btl2.bi.cover != 0) { btl2.bi.cover = 0; btl_mot.SetDefaultIdle(btl2); } } } } if (cmd.info.dodge != 0) { BTL_DATA btl2 = btl_scrp.GetBtlDataPtr(cmd.tar_id); btl2.bi.dodge = 0; if (btl2.bi.player != 0) { btl_mot.SetDefaultIdle(btl2); } else if (btl2.bi.slave != 0) { btl2 = btl_util.GetMasterEnemyBtlPtr(); } btl2.pos[2] = btl2.base_pos[2]; } if (cmd.regist != null && cmd == btl1.cmd[0]) { UIManager.Battle.RemovePlayerFromAction(cmd.regist.btl_id, true); } ClearCommand(cmd); btlsys.cur_cmd = null; btlsys.cmd_mode = 0; if (btl1 != null && btl1.bi.player != 0 && FF9StateSystem.Settings.IsATBFull) { btl1.cur.at = (short)(btl1.max.at - 1); } if (FF9StateSystem.Battle.isDebug) { return; } HonoluluBattleMain.playerEnterCommand = true; }
public static void SetCharacterData(BTL_DATA btl, UInt32 id, UInt32 val) { FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle; switch (id) { case 32u: for (Int32 i = 0; i < btl.meshCount; i++) { btl.SetIsEnabledMeshRenderer(i, true); } btl.getShadow().SetActive(true); btl.SetIsEnabledWeaponRenderer(true); btl.SetIsEnabledBattleModelRenderer(true); btl_sys.AddCharacter(btl); break; case 33u: for (Int32 j = 0; j < btl.meshCount; j++) { btl.SetIsEnabledMeshRenderer(j, false); } btl.getShadow().SetActive(false); btl.SetIsEnabledWeaponRenderer(false); btl.SetIsEnabledBattleModelRenderer(false); btl_cmd.KillCommand2(btl); btl_sys.DelCharacter(btl); break; case 34u: if (btl_cmd.KillCommand2(btl)) { btl.sel_mode = 0; } break; case 35u: btl.max.hp = (UInt16)val; break; case 36u: btl.cur.hp = (UInt16)val; break; case 37u: btl.max.mp = (Int16)val; break; case 38u: btl.cur.mp = (Int16)val; break; case 40u: btl.cur.at = (Int16)val; break; case 48u: btl.def_attr.invalid = (Byte)val; break; case 49u: btl.def_attr.absorb = (Byte)val; break; case 50u: btl.def_attr.half = (Byte)val; break; case 51u: btl.def_attr.weak = (Byte)val; break; case 52u: if (ff9Battle.btl_phase == 2) { btl.tar_mode = 0; btl.bi.target = 0; btl.bi.atb = 0; btl.bi.select = 0; } else { btl.tar_mode = (Byte)(2u + val); } break; case 53u: btl.SetDisappear((Byte)val); if (val == 0u || ff9Battle.btl_phase == 2) { } break; case 54u: btl.bi.shadow = (Byte)val; if (btl.bi.shadow != 0) { btl.getShadow().SetActive(true); } else { btl.getShadow().SetActive(false); } break; case 55u: geo.geoScaleSet(btl, (Int32)val); btlshadow.FF9ShadowSetScaleBattle(btl_util.GetFF9CharNo(btl), (Byte)(btl.shadow_x * val >> 12), (Byte)(btl.shadow_z * val >> 12)); break; case 56u: geo.geoScaleReset(btl); btlshadow.FF9ShadowSetScaleBattle(btl_util.GetFF9CharNo(btl), btl.shadow_x, btl.shadow_z); break; case 59u: btl_mot.HideMesh(btl, (UInt16)val, false); btl.mesh_current = (UInt16)(btl.mesh_current | (UInt16)val); break; case 60u: btl_mot.ShowMesh(btl, (UInt16)val, false); btl.mesh_current = (UInt16)(btl.mesh_current & (UInt16)(~(UInt16)val)); break; case 61u: GeoTexAnim.geoTexAnimPlay(btl.texanimptr, (Int32)val); break; case 62u: GeoTexAnim.geoTexAnimStop(btl.texanimptr, (Int32)val); break; case 63u: GeoTexAnim.geoTexAnimPlayOnce(btl.texanimptr, (Int32)val); break; case 69u: btl.bi.def_idle = (Byte)val; break; case 71u: btl_sys.SetBonus(btl_util.getEnemyTypePtr(btl)); break; case 72u: btl.elem.str = (Byte)val; break; case 73u: btl.elem.mgc = (Byte)val; break; case 74u: btl.defence.PhisicalDefence = (Byte)val; break; case 75u: btl.defence.PhisicalEvade = (Byte)val; break; case 76u: btl.defence.MagicalDefence = (Byte)val; break; case 77u: btl.defence.MagicalEvade = (Byte)val; break; case 78u: btl.cur.at = btl.max.at; btl.sel_mode = 1; btl_cmd.SetCommand(btl.cmd[0], BattleCommandId.SummonEiko, 187u, (UInt16)val, 8u); UIManager.Battle.FF9BMenu_EnableMenu(true); break; } }
public static UInt32 RemoveStatus(BTL_DATA btl, UInt32 status) { STAT_INFO stat = btl.stat; if (((Int32)stat.permanent & (Int32)status) != 0 || ((Int32)stat.cur & (Int32)status) == 0 || btl.bi.player == 0 && FF9StateSystem.Battle.FF9Battle.btl_phase == 5 && (status & 4099L) != 0L) { return(1); } stat.cur &= ~status; switch ((BattleStatus)status) { case BattleStatus.Petrify: SetStatusClut(btl, false); break; case BattleStatus.Zombie: case BattleStatus.Heat: case BattleStatus.Freeze: if (Status.checkCurStat(btl, 50333760U)) { SetStatusPolyColor(btl); } break; case BattleStatus.Death: btl.die_seq = 0; btl.bi.dmg_mot_f = 0; btl.bi.cmd_idle = 0; btl.bi.death_f = 0; btl.bi.stop_anim = 0; btl.escape_key = 0; if (btl_mot.checkMotion(btl, 4) || btl_mot.checkMotion(btl, 8)) { GeoTexAnim.geoTexAnimPlay(btl.texanimptr, 2); if (btl.bi.player != 0) { GeoTexAnim.geoTexAnimPlay(btl.tranceTexanimptr, 2); } btl_mot.setMotion(btl, 6); btl.evt.animFrame = 0; } if (FF9StateSystem.Battle.FF9Battle.cur_cmd.regist != btl || FF9StateSystem.Battle.FF9Battle.cur_cmd.cmd_no > 48) { btl.sel_mode = 0; } btl_cmd.KillSpecificCommand(btl, 60); if (((Int32)btl.stat.permanent & 262144) != 0) { SetOprStatusCount(btl, 18U); } break; case BattleStatus.Confuse: Vector3 eulerAngles = btl.rot.eulerAngles; eulerAngles.y = btl.evt.rotBattle.eulerAngles.y; btl.rot = Quaternion.Euler(eulerAngles); StatusCommandCancel(btl, status); break; case BattleStatus.Berserk: StatusCommandCancel(btl, status); if (Status.checkCurStat(btl, 50333760U)) { SetStatusPolyColor(btl); } break; case BattleStatus.Trance: btl.trance = 0; if (Status.checkCurStat(btl, 1073741824U)) { RemoveStatus(btl, 1073741824U); btl.SetDisappear(0); btl_mot.setBasePos(btl); btl_mot.setMotion(btl, btl.bi.def_idle); btl.evt.animFrame = 0; } btl_cmd.SetCommand(btl.cmd[4], 59U, 0U, btl.btl_id, 0U); break; case BattleStatus.Haste: case BattleStatus.Slow: btl_para.InitATB(btl); break; case BattleStatus.Float: Single value = 0f; btl.pos[1] = value; btl.base_pos[1] = value; break; case BattleStatus.Vanish: btl_mot.ShowMesh(btl, btl.mesh_banish, true); break; case BattleStatus.Doom: if (btl.deathMessage != null) { Singleton <HUDMessage> .Instance.ReleaseObject(btl.deathMessage); btl.deathMessage = null; } break; case BattleStatus.Mini: geo.geoScaleReset(btl); btlshadow.FF9ShadowSetScaleBattle(btl_util.GetFF9CharNo(btl), btl.shadow_x, btl.shadow_z); break; case BattleStatus.Jump: btl.tar_mode = 3; btl.bi.atb = 1; if (btl.bi.player != 0 && !FF9StateSystem.Settings.IsATBFull) { btl.cur.at = 0; } btl.sel_mode = 0; btl.cmd[3].cmd_no = 0; btl.cmd[3].tar_id = 0; break; case BattleStatus.GradualPetrify: if (btl.petrifyMessage != null) { Singleton <HUDMessage> .Instance.ReleaseObject(btl.petrifyMessage); btl.petrifyMessage = null; } btl_cmd.KillSpecificCommand(btl, 62); break; } HonoluluBattleMain.battleSPS.RemoveBtlSPSObj(btl, status); return(2); }