Пример #1
0
    public static UInt32 GetCharacterData(BTL_DATA btl, UInt32 id)
    {
        UInt32 result = 16777215u;

        switch (id)
        {
        case 35u:
            result = btl.max.hp;
            break;

        case 36u:
            result = btl.cur.hp;
            break;

        case 37u:
            result = (UInt32)btl.max.mp;
            break;

        case 38u:
            result = (UInt32)btl.cur.mp;
            break;

        case 39u:
            result = (UInt32)btl.max.at;
            break;

        case 41u:
            if (btl.bi.player != 0)
            {
                result = btl_util.getPlayerPtr(btl).level;
            }
            else
            {
                result = btl_util.getEnemyTypePtr(btl).level;
            }
            break;

        case 42u:
            result = ((UInt32)btl.stat.invalid >> 24);
            break;

        case 43u:
            result = ((UInt32)btl.stat.invalid & 16777215u);
            break;

        case 44u:
            result = (UInt32)btl.stat.permanent >> 24;
            break;

        case 45u:
            result = ((UInt32)btl.stat.permanent & 16777215u);
            break;

        case 46u:
            result = (UInt32)btl.stat.cur >> 24;
            break;

        case 47u:
            result = ((UInt32)btl.stat.cur & 16777215u);
            break;

        case 48u:
            result = btl.def_attr.invalid;
            break;

        case 49u:
            result = btl.def_attr.absorb;
            break;

        case 50u:
            result = btl.def_attr.half;
            break;

        case 51u:
            result = btl.def_attr.weak;
            break;

        case 52u:
            result = btl.bi.target;
            break;

        case 53u:
            result = btl.bi.disappear;
            break;

        case 57u:
            result = (UInt32)btl.dms_geo_id;
            break;

        case 58u:
            result = btl.mesh_current;
            break;

        case 64u:
            result = btl.bi.row;
            break;

        case 65u:
            result = btl.bi.line_no;
            break;

        case 66u:
            result = btl_util.getPlayerPtr(btl).info.serial_no;
            break;

        case 67u:
            result = btl_util.getPlayerPtr(btl).category;
            break;

        case 68u:
            result = btl_util.getEnemyTypePtr(btl).category;
            break;

        case 69u:
            result = btl.bi.def_idle;
            break;

        case 70u:
            result = btl.bi.slot_no;
            break;

        case 72u:
            result = btl.elem.str;
            break;

        case 73u:
            result = btl.elem.mgc;
            break;

        case 74u:
            result = btl.defence.PhisicalDefence;
            break;

        case 75u:
            result = btl.defence.PhisicalEvade;
            break;

        case 76u:
            result = btl.defence.MagicalDefence;
            break;

        case 77u:
            result = btl.defence.MagicalEvade;
            break;
        }
        return(result);
    }
Пример #2
0
    public static void OrganizePlayerData(PLAYER p, BTL_DATA btl, UInt16 cnt, UInt16 btl_no)
    {
        btl.btl_id = (UInt16)(1 << (Int32)btl_no);
        BONUS btl_bonus = battle.btl_bonus;

        btl_bonus.member_flag = (Byte)(btl_bonus.member_flag | (Byte)(1 << (Int32)cnt));
        btl.bi.player         = 1;
        btl.bi.slot_no        = p.info.slot_no;
        btl.bi.target         = 1;
        btl.bi.line_no        = (Byte)cnt;
        btl.bi.slave          = 0;
        if (battle.TRANCE_GAUGE_FLAG == 0 || (p.category & 16) != 0 || (btl.bi.slot_no == 2 && battle.GARNET_DEPRESS_FLAG != 0))
        {
            btl.bi.t_gauge = 0;
            btl.trance     = 0;
        }
        else
        {
            btl.bi.t_gauge = 1;
            btl.trance     = p.trance;
        }
        btl.tar_bone = 0;
        btl.sa       = p.sa;
        btl.elem.dex = p.elem.dex;
        btl.elem.str = p.elem.str;
        btl.elem.mgc = p.elem.mgc;
        btl.elem.wpr = p.elem.wpr;
        btl.level    = p.level;
        btl.max      = p.max;
        btl_init.CopyPoints(btl.cur, p.cur);
        Byte    serial_no = p.info.serial_no;
        FF9Char ff9Char   = new FF9Char();

        ff9Char.btl = btl;
        ff9Char.evt = btl.evt;
        FF9StateSystem.Common.FF9.charArray.Add((Int32)p.info.slot_no, ff9Char);
        btl_init.InitBattleData(btl, ff9Char);
        btl.mesh_banish = UInt16.MaxValue;
        btl_stat.InitCountDownStatus(btl);
        btl.max.at = (Int16)((60 - btl.elem.dex) * 40 << 2);
        btl_para.InitATB(btl);
        if (FF9StateSystem.Battle.FF9Battle.btl_scene.Info.StartType == 0)
        {
            btl.cur.at = 0;
        }
        else if (FF9StateSystem.Battle.FF9Battle.btl_scene.Info.StartType == 1)
        {
            btl.cur.at = (Int16)(btl.max.at - 1);
        }
        else
        {
            btl.cur.at = (Int16)(Comn.random16() % (Int32)btl.max.at);
        }
        btl_mot.SetPlayerDefMotion(btl, (UInt32)p.info.serial_no, (UInt32)btl_no);
        BattlePlayerCharacter.InitAnimation(btl);
        btl_eqp.InitWeapon(p, btl);
        btl.defence.PhisicalDefence = p.defence.PhisicalDefence;
        btl.defence.PhisicalEvade   = p.defence.PhisicalEvade;
        btl.defence.MagicalDefence  = p.defence.MagicalDefence;
        btl.defence.MagicalEvade    = p.defence.MagicalEvade;
        btl_eqp.InitEquipPrivilegeAttrib(p, btl);
        btl_util.GeoSetColor2Source(btl.weapon_geo, 0, 0, 0);
        if (btl.cur.hp * 6 < btl.max.hp)
        {
            btl.stat.cur |= 512u;
        }
        btl_stat.AlterStatuses(btl, (UInt32)p.status & 4294967294u);
        if ((p.status & 1) != 0)
        {
            btl_stat.AlterStatus(btl, 1u);
        }
        btl_abil.CheckStatusAbility(btl);
        btl.base_pos = btl.evt.posBattle;
        Int16 geoID = btl.dms_geo_id;

        btl.height = 0;
        btl.radius = 0;

        FF9BattleDBHeightAndRadius.TryFindHeightAndRadius(geoID, ref btl.height, ref btl.radius);

        if (btl.cur.hp == 0 && btl_stat.AlterStatus(btl, 256u) == 2u)
        {
            btl.die_seq = 5;
            btl_mot.DecidePlayerDieSequence(btl);
            return;
        }
        btl.bi.def_idle = Convert.ToByte(btl_stat.CheckStatus(btl, 197122u));
        btl_mot.setMotion(btl, btl.bi.def_idle);
        btl.evt.animFrame = 0;
    }
Пример #3
0
    public static void DispCharacter(BTL_DATA btl)
    {
        PosObj evt = btl.evt;

        if (btl.bi.slave == 0)
        {
            if (btl.bi.player != 0 && btl_mot.checkMotion(btl, 17))
            {
                Vector3 eulerAngles = btl.rot.eulerAngles;
                eulerAngles.y = 180f;
                btl.gameObject.transform.localRotation = Quaternion.Euler(eulerAngles);
            }
            else
            {
                btl.gameObject.transform.localRotation = btl.rot;
            }
            if ((!(HonoluluBattleMain.battleSceneName == "EF_E006") && !(HonoluluBattleMain.battleSceneName == "EF_E007")) || btl != FF9StateSystem.Battle.FF9Battle.btl_data[5])
            {
                btl.gameObject.transform.localPosition = btl.pos;
            }
            btl_mot.PlayAnim(btl);
            if ((UInt16)evt.animFrame >= GeoAnim.geoAnimGetNumFrames(btl))
            {
                if (!btl_mot.SetDefaultIdle(btl))
                {
                    btl.evt.animFrame = 0;
                }
                else if (Status.checkCurStat(btl, 33558531u))
                {
                    PosObj evt2 = btl.evt;
                    evt2.animFrame = (Byte)(evt2.animFrame - 1);
                }
            }
            if (!Status.checkCurStat(btl, 33558531u) && btl.bi.stop_anim == 0)
            {
                if (btl.animation != (UnityEngine.Object)null)
                {
                    btl.animation.enabled = true;
                }
                PosObj posObj = evt;
                posObj.animFrame = (Byte)(posObj.animFrame + 1);
            }
            else if (btl.animation != (UnityEngine.Object)null)
            {
                btl.animation.enabled = false;
            }
            Int32 num  = btl.meshCount;
            Int32 num2 = 0;
            Int32 num3 = 0;
            btl.flags = (UInt16)(btl.flags & (UInt16)(~geo.GEO_FLAGS_RENDER));
            for (Int32 i = 0; i < num; i++)
            {
                if (geo.geoMeshChkFlags(btl, i) == 0)
                {
                    btl.flags = (UInt16)(btl.flags | geo.GEO_FLAGS_RENDER);
                    btl.SetIsEnabledMeshRenderer(i, true);
                    num3++;
                }
                else
                {
                    btl.SetIsEnabledMeshRenderer(i, false);
                    num2++;
                }
            }
            if (num2 == num)
            {
                btl.SetIsEnabledBattleModelRenderer(false);
                if ((btl.bi.slot_no == 2 && btl.bi.player != 0) || (btl.bi.player == 0 && btl.dms_geo_id == 671))
                {
                    Renderer[] componentsInChildren = btl.gameObject.transform.GetChildByName("long_hair").GetComponentsInChildren <Renderer>();
                    Renderer[] array = componentsInChildren;
                    for (Int32 j = 0; j < (Int32)array.Length; j++)
                    {
                        Renderer renderer = array[j];
                        renderer.enabled = false;
                    }
                    Renderer[] componentsInChildren2 = btl.gameObject.transform.GetChildByName("short_hair").GetComponentsInChildren <Renderer>();
                    Renderer[] array2 = componentsInChildren2;
                    for (Int32 k = 0; k < (Int32)array2.Length; k++)
                    {
                        Renderer renderer2 = array2[k];
                        renderer2.enabled = false;
                    }
                }
            }
            if (num3 == num)
            {
                btl.SetIsEnabledBattleModelRenderer(true);
                if ((btl.bi.slot_no == 2 && btl.bi.player != 0) || (btl.bi.player == 0 && btl.dms_geo_id == 671))
                {
                    Byte serialNumber = btl_util.getSerialNumber(btl);
                    if (Configuration.Graphics.GarnetHair != 2 && (serialNumber == 4 || serialNumber == 3 || Configuration.Graphics.GarnetHair == 1))
                    {
                        Renderer[] componentsInChildren3 = btl.gameObject.transform.GetChildByName("long_hair").GetComponentsInChildren <Renderer>();
                        Renderer[] array3 = componentsInChildren3;
                        for (Int32 l = 0; l < (Int32)array3.Length; l++)
                        {
                            Renderer renderer3 = array3[l];
                            renderer3.enabled = true;
                        }
                    }
                    else
                    {
                        Renderer[] componentsInChildren4 = btl.gameObject.transform.GetChildByName("short_hair").GetComponentsInChildren <Renderer>();
                        Renderer[] array4 = componentsInChildren4;
                        for (Int32 m = 0; m < (Int32)array4.Length; m++)
                        {
                            Renderer renderer4 = array4[m];
                            renderer4.enabled = true;
                        }
                    }
                }
                else if (btl.bi.slot_no == 0 && btl.bi.player != 0)
                {
                    Byte serialNumber2 = btl_util.getSerialNumber(btl);
                    if (serialNumber2 == 1)
                    {
                        btl.SetIsEnabledBattleModelRenderer(false);
                    }
                }
            }
            if (!Status.checkCurStat(btl, 1073741824u))
            {
                GeoTexAnim.geoTexAnimService(btl.texanimptr);
                GeoTexAnim.geoTexAnimService(btl.tranceTexanimptr);
            }
            if (btl.weapon_geo != (UnityEngine.Object)null)
            {
                num             = btl.weaponMeshCount;
                btl.weaponFlags = (UInt16)(btl.weaponFlags & (UInt16)(~geo.GEO_FLAGS_RENDER));
                for (Int32 n = 0; n < num; n++)
                {
                    if (geo.geoWeaponMeshChkFlags(btl, n) == 0)
                    {
                        btl.weaponFlags = (UInt16)(btl.weaponFlags | geo.GEO_FLAGS_RENDER);
                        btl.weaponRenderer[n].enabled = true;
                    }
                    else
                    {
                        btl.weaponRenderer[n].enabled = false;
                    }
                }
            }
            return;
        }
        BattleUnit masterEnemyBtlPtr = btl_util.GetMasterEnemyBtlPtr();

        if (masterEnemyBtlPtr == null)
        {
            return;
        }
        btl.rot = masterEnemyBtlPtr.Data.rot;
        btl_mot.setSlavePos(btl, ref btl.base_pos);
        btl_mot.setBasePos(btl);
    }
Пример #4
0
    public BattleUnit GetUnit(Int32 index)
    {
        BTL_DATA data = btl_data[index];

        return(new BattleUnit(data));
    }
Пример #5
0
    public static void InitPlayerData(FF9StateBattleSystem btlsys)
    {
        ObjList objList = new ObjList();

        if (!FF9StateSystem.Battle.isDebug)
        {
            objList = PersistenSingleton <EventEngine> .Instance.GetActiveObjList().next;
        }
        Int16  num2;
        Int16  num = num2 = 0;
        PLAYER p;

        while (num2 < 4)
        {
            p = FF9StateSystem.Common.FF9.party.member[(Int32)num2];
            if (p != null)
            {
                BTL_DATA btl_DATA = btlsys.btl_data[(Int32)num];
                btl_DATA.dms_geo_id = (Int16)FF9BattleDB.GEO.FirstOrDefault((KeyValuePair <Int32, String> x) => x.Value == btl_init.model_id[(Int32)p.info.serial_no]).Key;
                btl_init.OrganizePlayerData(p, btl_DATA, (UInt16)num2, (UInt16)num);
                btl_init.SetBattleModel(btl_DATA);
                if (Status.checkCurStat(btl_DATA, 256u))
                {
                    GeoTexAnim.geoTexAnimStop(btl_DATA.texanimptr, 2);
                    GeoTexAnim.geoTexAnimPlayOnce(btl_DATA.texanimptr, 0);
                    if (btl_DATA.bi.player != 0)
                    {
                        GeoTexAnim.geoTexAnimStop(btl_DATA.tranceTexanimptr, 2);
                        GeoTexAnim.geoTexAnimPlayOnce(btl_DATA.tranceTexanimptr, 0);
                    }
                }
                else
                {
                    GeoTexAnim.geoTexAnimPlay(btl_DATA.texanimptr, 2);
                }
                if (!FF9StateSystem.Battle.isDebug)
                {
                    objList = objList.next;
                }
                num = (Int16)(num + 1);
                btl_sys.AddCharacter(btl_DATA);
            }
            num2 = (Int16)(num2 + 1);
        }
        while (num < 4)
        {
            btlsys.btl_data[(Int32)num].btl_id = 0;
            num = (Int16)(num + 1);
        }
        btlsys.btl_load_status = (Byte)(btlsys.btl_load_status | 16);
        btl_init.SetupBattlePlayer();
        if (btlsys.btl_scene.Info.StartType == 0)
        {
            for (BTL_DATA btl_DATA = btlsys.btl_list.next; btl_DATA != null; btl_DATA = btl_DATA.next)
            {
                if (btl_DATA.bi.player != 0)
                {
                    btl_DATA.cur.at = 0;
                }
            }
        }
        else if (btlsys.btl_scene.Info.StartType == 1)
        {
            for (BTL_DATA btl_DATA = btlsys.btl_list.next; btl_DATA != null; btl_DATA = btl_DATA.next)
            {
                if (btl_DATA.bi.player == 0)
                {
                    btl_DATA.cur.at = 0;
                }
            }
        }
    }
Пример #6
0
    public static void SetBattleVfx(CMD_DATA cmd, UInt32 fx_no, Int16[] arg)
    {
        BTL_VFX_REQ fx_req = FF9StateSystem.Battle.FF9Battle.fx_req;

        PSX_LIBGTE.VECTOR vector = default(PSX_LIBGTE.VECTOR);
        vector.vx = 0;
        vector.vy = 0;
        vector.vz = 0;
        UInt16 num = 0;

        fx_req.exe = cmd.regist;
        if (arg != null)
        {
            fx_req.monbone[0] = (Byte)arg[0];
            fx_req.monbone[1] = (Byte)arg[1];
            fx_req.arg0       = (Int16)((Byte)arg[2]);
            fx_req.flgs       = (UInt16)((Byte)arg[3]);
        }
        else
        {
            fx_req.monbone[0] = (fx_req.monbone[1] = 0);
            fx_req.flgs       = 0;
            fx_req.arg0       = 0;
        }
        fx_req.trgno        = (fx_req.rtrgno = 0);
        cmd.regist.fig      = (cmd.regist.m_fig = 0);
        cmd.regist.fig_info = 0;
        if (cmd.info.reflec == 0)
        {
            num = btl_cmd.CheckReflec(cmd);
            if (cmd.cmd_no == BattleCommandId.Item || cmd.cmd_no == BattleCommandId.AutoPotion)
            {
                fx_req.flgs = 2;
            }
            else if (cmd.cmd_no == BattleCommandId.MagicSword)
            {
                fx_req.flgs = 4;
            }
            else if (cmd.cmd_no == BattleCommandId.SysPhantom || cmd.cmd_no == BattleCommandId.SysLastPhoenix)
            {
                fx_req.flgs = 1;
            }
        }
        else if (cmd.info.reflec == 2)
        {
            cmd.info.reflec = 1;
            if (cmd.regist.bi.player == 0)
            {
                cmd.info.mon_reflec = 1;
            }
            fx_req.flgs = 17;
        }
        for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next)
        {
            if ((next.btl_id & cmd.tar_id) != 0)
            {
                BTL_DATA[]  trg         = fx_req.trg;
                BTL_VFX_REQ btl_VFX_REQ = fx_req;
                SByte       b;
                btl_VFX_REQ.trgno     = (SByte)((b = btl_VFX_REQ.trgno) + 1);
                trg[(Int32)((Byte)b)] = next;
                next.fig      = (next.m_fig = 0);
                next.fig_info = 0;
                vector.vx    += (Int32)next.base_pos[0];
                vector.vz    += (Int32)next.base_pos[2];
            }
            if ((next.btl_id & num) != 0)
            {
                BTL_DATA[]  rtrg         = fx_req.rtrg;
                BTL_VFX_REQ btl_VFX_REQ2 = fx_req;
                SByte       b;
                btl_VFX_REQ2.rtrgno    = (SByte)((b = btl_VFX_REQ2.rtrgno) + 1);
                rtrg[(Int32)((Byte)b)] = next;
            }
            if (cmd.cmd_no == BattleCommandId.MagicSword && btl_util.getSerialNumber(next) == 2)
            {
                fx_req.mexe = next;
            }
        }
        fx_req.trgcpos.vx = vector.vx / (Int32)fx_req.trgno;
        fx_req.trgcpos.vy = 0;
        fx_req.trgcpos.vz = vector.vz / (Int32)fx_req.trgno;
        ENEMY_TYPE[] enemy_type = FF9StateSystem.Battle.FF9Battle.enemy_type;
        SFX.Begin(fx_req.flgs, fx_req.arg0, fx_req.monbone, fx_req.trgcpos);
        SFX.SetExe(fx_req.exe);
        SFX.SetMExe(fx_req.mexe);
        SFX.SetTrg(fx_req.trg, fx_req.trgno);
        SFX.SetRTrg(fx_req.rtrg, fx_req.rtrgno);
        SFX.Play((Int32)fx_no);
    }
Пример #7
0
 internal BattleUnit(BTL_DATA data)
 {
     Data = data;
 }
Пример #8
0
    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;
    }
Пример #9
0
 public static void CheckCommandLoop(CMD_DATA cmd)
 {
     if (!SFX.isRunning)
     {
         BTL_DATA btlData = cmd.regist;
         if (!FF9StateSystem.Battle.isDebug && (UIManager.Battle.BtlWorkLibra || UIManager.Battle.BtlWorkPeep))
         {
             return;
         }
         if (cmd.cmd_no == 4)
         {
             if (btl_mot.checkMotion(btlData, 12))
             {
                 if (btlData.evt.animFrame < GeoAnim.geoAnimGetNumFrames(btlData))
                 {
                     return;
                 }
                 btl_mot.setMotion(btlData, 13);
                 btlData.evt.animFrame = 0;
             }
         }
         else if (cmd.cmd_no == 7)
         {
             if (btl_mot.checkMotion(btlData, 9))
             {
                 if (btlData.evt.animFrame < GeoAnim.geoAnimGetNumFrames(btlData, btlData.currentAnimationName))
                 {
                     return;
                 }
                 btl_mot.setMotion(btlData, (byte)(29U + btlData.bi.row));
                 btlData.evt.animFrame = 0;
             }
             if (btl_mot.checkMotion(btlData, (byte)(29U + btlData.bi.row)))
             {
                 ushort numFrames = GeoAnim.geoAnimGetNumFrames(btlData);
                 ushort num1      = btlData.evt.animFrame;
                 if (num1 < numFrames)
                 {
                     ushort num2 = (ushort)(num1 + 1U);
                     btlData.pos[2] = btlData.bi.row == 0 ? 400 * num2 / numFrames - 1960 : -400 * num2 / numFrames - 1560;
                     btlData.gameObject.transform.localPosition = btlData.pos;
                     return;
                 }
                 ExecVfxCommand(btlData);
                 btl_mot.setMotion(btlData, 32);
                 btlData.evt.animFrame = 0;
                 return;
             }
             if (btl_mot.checkMotion(btlData, 32))
             {
                 if (btlData.evt.animFrame < GeoAnim.geoAnimGetNumFrames(btlData))
                 {
                     return;
                 }
                 btl_mot.setMotion(btlData, 0);
                 btlData.evt.animFrame = 0;
             }
         }
         BattleAchievement.UpdateCommandAchievement(cmd);
         ReqFinishCommand();
         if (cmd.cmd_no != 59)
         {
             return;
         }
         btl_stat.SetPresentColor(btlData);
     }
     else
     {
         if (cmd.cmd_no != 59 || SFX.frameIndex != 75)
         {
             return;
         }
         BTL_DATA btl = cmd.regist;
         if (Status.checkCurStat(btl, 16384U))
         {
             btl_vfx.SetTranceModel(btl, true);
             BattleAchievement.UpdateTranceStatus();
         }
         else
         {
             btl_vfx.SetTranceModel(btl, false);
         }
     }
 }
Пример #10
0
    private static void Btl2dStatIcon()
    {
        FF9StateBattleSystem ff9Battle      = FF9StateSystem.Battle.FF9Battle;
        BTL2D_WORK           btl2d_work_set = ff9Battle.btl2d_work_set;
        Vector3 rot;

        rot.x = 0f;
        rot.z = 0f;
        for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next)
        {
            if (next.bi.disappear == 0)
            {
                if ((next.flags & geo.GEO_FLAGS_CLIP) == 0)
                {
                    if ((btl2d_work_set.OldDisappear & next.btl_id) == 0)
                    {
                        BattleStatus num = next.stat.cur | next.stat.permanent;
                        if ((num & BattleStatus.Death) == 0u)
                        {
                            if ((num & STATUS_2D_ICON) != 0u)
                            {
                                if (next.bi.player == 0 || !btl_mot.checkMotion(next, 17))
                                {
                                    Int32   num2 = ff9.rsin(fixedPointAngle: (Int32)(next.rot.eulerAngles.y / 360f * 4096f));
                                    Int32   num3 = ff9.rcos(fixedPointAngle: (Int32)(next.rot.eulerAngles.y / 360f * 4096f));
                                    Int16   num4;
                                    Byte[]  array;
                                    SByte[] array2;
                                    SByte[] array3;
                                    if (next.bi.player != 0)
                                    {
                                        num4   = FF9StateSystem.Common.FF9.player[next.bi.slot_no].info.serial_no;
                                        array  = btl2d.wBonePC[num4];
                                        array2 = btl2d.wYofsPC[num4];
                                        array3 = btl2d.wZofsPC[num4];
                                    }
                                    else
                                    {
                                        ENEMY_TYPE et = ff9Battle.enemy[next.bi.slot_no].et;
                                        array  = et.icon_bone;
                                        array2 = et.icon_y;
                                        array3 = et.icon_z;
                                    }
                                    Int32 num5 = 0;
                                    num4 = 12;
                                    for (;;)
                                    {
                                        Int16 num6 = num4;
                                        num4 = (Int16)(num6 - 1);
                                        if (num6 == 0)
                                        {
                                            break;
                                        }
                                        btl2d.STAT_ICON_TBL stat_ICON_TBL = btl2d.wStatIconTbl[num5];
                                        if ((num & stat_ICON_TBL.Mask) != 0u)
                                        {
                                            if ((num & stat_ICON_TBL.Mask2) == 0u)
                                            {
                                                Int16 num7 = (Int16)(array2[stat_ICON_TBL.Pos] << 4);
                                                Int16 num8 = (Int16)(array3[stat_ICON_TBL.Pos] << 4);
                                                if ((next.flags & geo.GEO_FLAGS_SCALE) != 0)
                                                {
                                                    num7 = (Int16)((Int32)(num7 * next.gameObject.transform.localScale.y));
                                                    num8 = (Int16)((Int32)(num8 * next.gameObject.transform.localScale.z));
                                                }
                                                Vector3 position = next.gameObject.transform.GetChildByName("bone" + array[stat_ICON_TBL.Pos].ToString("D3")).position;
                                                Vector3 pos;
                                                pos.x = position.x + (num8 * num2 >> 12);
                                                pos.y = position.y - num7;
                                                pos.z = position.z + (num8 * num3 >> 12);
                                                if (stat_ICON_TBL.Type != 0)
                                                {
                                                    rot.y = 0f;
                                                    HonoluluBattleMain.battleSPS.UpdateBtlStatus(next, stat_ICON_TBL.Mask, pos, rot, btl2d_work_set.Timer);
                                                }
                                                else
                                                {
                                                    Int32 ang = stat_ICON_TBL.Ang;
                                                    if (ang != 0)
                                                    {
                                                        Int32 num9 = (Int32)(next.rot.eulerAngles.y / 360f * 4095f);
                                                        num9  = (num9 + 3072 & 4095);
                                                        rot.y = num9 / 4095f * 360f;
                                                    }
                                                    else
                                                    {
                                                        rot.y = 0f;
                                                    }
                                                    HonoluluBattleMain.battleSPS.UpdateBtlStatus(next, stat_ICON_TBL.Mask, pos, rot, btl2d_work_set.Timer);
                                                }
                                            }
                                        }
                                        num5++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Пример #11
0
    private static void Btl2dStatCount()
    {
        btl2d.STAT_CNT_TBL[] array = new btl2d.STAT_CNT_TBL[]
        {
            new btl2d.STAT_CNT_TBL(BattleStatus.Doom, 11, 0),
            new btl2d.STAT_CNT_TBL(BattleStatus.GradualPetrify, 15, 1)
        };
        FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle;
        BattleStatus         status    = BattleStatus.Doom | BattleStatus.GradualPetrify;
        Int16 num2 = 2;

        for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next)
        {
            if (next.bi.disappear == 0)
            {
                if ((next.flags & geo.GEO_FLAGS_CLIP) == 0)
                {
                    if ((ff9Battle.btl2d_work_set.OldDisappear & next.btl_id) == 0)
                    {
                        BattleStatus cur = next.stat.cur;
                        if ((cur & BattleStatus.Death) == 0u)
                        {
                            if ((cur & status) != 0u)
                            {
                                Int16 num3;
                                Int16 num4;
                                Int16 num5;
                                if (next.bi.player != 0)
                                {
                                    num3 = FF9StateSystem.Common.FF9.player[next.bi.slot_no].info.serial_no;
                                    num4 = btl2d.wBonePC[num3][5];
                                    num5 = btl2d.wYofsPC[num3][5];
                                }
                                else
                                {
                                    ENEMY_TYPE et = ff9Battle.enemy[next.bi.slot_no].et;
                                    num4 = et.icon_bone[5];
                                    num5 = et.icon_y[5];
                                }
                                if ((next.flags & geo.GEO_FLAGS_SCALE) != 0)
                                {
                                    num5 = (Int16)((Int32)(num5 * next.gameObject.transform.localScale.y));
                                }
                                Transform childByName = next.gameObject.transform.GetChildByName("bone" + num4.ToString("D3"));
                                Int32     num6        = -(num5 << 4);
                                Int32     num7        = 0;
                                num3 = num2;
                                for (;;)
                                {
                                    Int16 num8 = num3;
                                    num3 = (Int16)(num8 - 1);
                                    if (num8 == 0)
                                    {
                                        break;
                                    }
                                    btl2d.STAT_CNT_TBL stat_CNT_TBL = array[num7];
                                    if ((cur & stat_CNT_TBL.Mask) != 0u)
                                    {
                                        Int16 cdown_max;
                                        if ((cdown_max = next.stat.cnt.cdown_max) < 1)
                                        {
                                            break;
                                        }
                                        Int16 num9;
                                        if ((num9 = next.stat.cnt.conti[stat_CNT_TBL.Idx]) < 0)
                                        {
                                            break;
                                        }
                                        Int16 num10 = next.cur.at_coef;
                                        num4 = (Int16)(num9 * 10 / cdown_max);
                                        UInt16 num11;
                                        if (num9 <= 0)
                                        {
                                            num11 = 2;
                                        }
                                        else
                                        {
                                            num5  = (Int16)((num9 - num10) * 10 / cdown_max);
                                            num11 = (UInt16)((num4 == num5) ? 0 : 2);
                                        }
                                        Int32 num12;
                                        if (stat_CNT_TBL.Col != 0)
                                        {
                                            Byte b = (Byte)((num4 << 4) + 32);
                                            num12 = (b << 16 | b << 8 | b);
                                        }
                                        else
                                        {
                                            num12 = 16777216;
                                        }
                                        num12 |= num11 << 24;
                                        num4   = (Int16)(num4 + 1);
                                        if (num4 > 10)
                                        {
                                            num4 = 10;
                                        }
                                        if (num7 == 0)
                                        {
                                            if (next.deathMessage == null)
                                            {
                                                next.deathMessage = Singleton <HUDMessage> .Instance.Show(childByName, "10", HUDMessage.MessageStyle.DEATH_SENTENCE, new Vector3(0f, num6), 0);

                                                UIManager.Battle.DisplayParty();
                                            }
                                            else
                                            {
                                                next.deathMessage.Label = num4.ToString();
                                            }
                                        }
                                        else if (num7 == 1)
                                        {
                                            if (next.petrifyMessage == null)
                                            {
                                                next.petrifyMessage = Singleton <HUDMessage> .Instance.Show(childByName, "10", HUDMessage.MessageStyle.PETRIFY, new Vector3(0f, num6), 0);

                                                UIManager.Battle.DisplayParty();
                                            }
                                            else
                                            {
                                                String str = "[" + (num12 & 16777215).ToString("X6") + "]";
                                                next.petrifyMessage.Label = str + num4.ToString();
                                            }
                                        }
                                    }
                                    num7++;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Пример #12
0
    public static void Btl2dMain()
    {
        FF9StateBattleSystem ff9Battle      = FF9StateSystem.Battle.FF9Battle;
        BTL2D_WORK           btl2d_work_set = ff9Battle.btl2d_work_set;
        Int16 num = btl2d_work_set.NewID;

        for (Int16 num2 = 0; num2 < 16; num2 = (Int16)(num2 + 1))
        {
            BTL2D_ENT btl2D_ENT = btl2d_work_set.Entry[num];
            if (btl2D_ENT.BtlPtr != null)
            {
                if (btl2D_ENT.Type > 2)
                {
                    btl2D_ENT.BtlPtr = null;
                }
                else if (btl2D_ENT.Delay != 0)
                {
                    BTL2D_ENT btl2D_ENT2 = btl2D_ENT;
                    btl2D_ENT2.Delay = (Byte)(btl2D_ENT2.Delay - 1);
                }
                else
                {
                    String text = String.Empty;
                    HUDMessage.MessageStyle style = HUDMessage.MessageStyle.DAMAGE;
                    if (btl2D_ENT.Type == 0)
                    {
                        if (btl2D_ENT.Work.Num.Color == 0)
                        {
                            style = HUDMessage.MessageStyle.DAMAGE;
                        }
                        else
                        {
                            style = HUDMessage.MessageStyle.RESTORE_HP;
                        }
                        text = btl2D_ENT.Work.Num.Value.ToString();
                    }
                    else if (btl2D_ENT.Type == 1)
                    {
                        if (btl2D_ENT.Work.Num.Color == 0)
                        {
                            style = HUDMessage.MessageStyle.DAMAGE;
                        }
                        else
                        {
                            style = HUDMessage.MessageStyle.RESTORE_MP;
                        }
                        text = btl2D_ENT.Work.Num.Value.ToString() + " " + Localization.Get("MPCaption");
                    }
                    else if (btl2D_ENT.Type == 2)
                    {
                        if (btl2D_ENT.Work.Num.Value == 0u)
                        {
                            text  = Localization.Get("Miss");
                            style = HUDMessage.MessageStyle.MISS;
                        }
                        else if (btl2D_ENT.Work.Num.Value == 1u)
                        {
                            text  = Localization.Get("Death");
                            style = HUDMessage.MessageStyle.DEATH;
                        }
                        else if (btl2D_ENT.Work.Num.Value == 2u)
                        {
                            text  = Localization.Get("Guard");
                            style = HUDMessage.MessageStyle.GUARD;
                        }
                        else if (btl2D_ENT.Work.Num.Value == 3u)
                        {
                            text  = NGUIText.FF9YellowColor + Localization.Get("Critical") + "[-] \n " + text;
                            style = HUDMessage.MessageStyle.CRITICAL;
                        }
                    }
                    Singleton <HUDMessage> .Instance.Show(btl2D_ENT.trans, text, style, new Vector3(0f, btl2D_ENT.Yofs, 0f), 0);

                    UIManager.Battle.DisplayParty();
                    btl2D_ENT.BtlPtr = null;
                }
            }
            num = (Int16)(num + 1);
            if (num >= 16)
            {
                num = 0;
            }
        }
        btl2d.Btl2dStatCount();
        if (SFX.GetEffectJTexUsed() == 0)
        {
            btl2d.Btl2dStatIcon();
        }
        BTL2D_WORK btl2D_WORK = btl2d_work_set;

        btl2D_WORK.Timer = (UInt16)(btl2D_WORK.Timer + 1);
        Byte b = Byte.MaxValue;

        for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next)
        {
            if (next.bi.disappear == 0)
            {
                b = (Byte)(b & (Byte)(~(Byte)next.btl_id));
            }
        }
        btl2d_work_set.OldDisappear = b;
    }
Пример #13
0
    public static void Btl2dReq(BTL_DATA pBtl)
    {
        Byte   b        = 0;
        UInt16 fig_info = pBtl.fig_info;

        if (pBtl.bi.disappear == 0)
        {
            if ((fig_info & 256) != 0)
            {
                btl_para.SetTroubleDamage(new BattleUnit(pBtl));
            }
            if ((fig_info & 128) != 0)
            {
                btl2d.Btl2dReqSymbol(pBtl, 2, 0, 0);
            }
            else if ((fig_info & 96) != 0)
            {
                if ((fig_info & 32) != 0)
                {
                    btl2d.Btl2dReqSymbol(pBtl, 0, 0, 0);
                    b = 2;
                }
                if ((fig_info & 64) != 0)
                {
                    btl2d.Btl2dReqSymbol(pBtl, 1, 0, b);
                }
            }
            else
            {
                if ((fig_info & 1) != 0)
                {
                    if ((fig_info & 4) != 0)
                    {
                        BTL2D_ENT btl2D_ENT = btl2d.Btl2dReqSymbol(pBtl, 3, 128, 0);
                        b = 2;
                    }
                    if ((fig_info & 2) != 0)
                    {
                        btl2d.Btl2dReqHP(pBtl, pBtl.fig, 192, b);
                    }
                    else
                    {
                        btl2d.Btl2dReqHP(pBtl, pBtl.fig, 0, b);
                    }
                    b = (Byte)(b + 4);
                }
                if ((fig_info & 8) != 0)
                {
                    if ((fig_info & 16) != 0)
                    {
                        btl2d.Btl2dReqMP(pBtl, pBtl.m_fig, 192, b);
                    }
                    else
                    {
                        btl2d.Btl2dReqMP(pBtl, pBtl.m_fig, 0, b);
                    }
                }
            }
        }
        pBtl.fig_info = 0;
        pBtl.fig      = 0;
        pBtl.m_fig    = 0;
    }
Пример #14
0
    public Int32 GetObjSpsIndex(BTL_DATA btl, BattleStatus status)
    {
        Int32 statusSPSIndex = this.GetStatusSPSIndex(status);

        return((Int32)(btl.bi.line_no * 12) + statusSPSIndex);
    }
Пример #15
0
    // ReSharper disable PossibleNullReferenceException
    public static bool CheckCommandCondition(FF9StateBattleSystem btlsys, CMD_DATA cmd)
    {
        BTL_DATA       btlData        = cmd.regist;
        FF9StateGlobal ff9StateGlobal = FF9StateSystem.Common.FF9;

        if (btlData != null)
        {
            if (cmd.cmd_no < 55)
            {
                int num = btl_mot.setDirection(btlData);
                btlData.evt.rotBattle.eulerAngles = new Vector3(btlData.evt.rotBattle.eulerAngles.x, num, btlData.evt.rotBattle.eulerAngles.z);
                btlData.rot.eulerAngles           = new Vector3(btlData.rot.eulerAngles.x, num, btlData.rot.eulerAngles.z);
            }
            if (battle.GARNET_DEPRESS_FLAG != 0 && btlData.bi.player != 0 && (btlData.bi.slot_no == 2 && cmd.cmd_no < 48) && Comn.random8() < 64)
            {
                UIManager.Battle.SetBattleFollowMessage(27);
                return(false);
            }
            if (!CheckMagicCondition(cmd))
            {
                return(false);
            }
        }
        byte num1 = cmd.cmd_no;

        switch (num1)
        {
        case 11:
            btlData.cmd[3].tar_id = btl_util.GetStatusBtlID(1U, 0U);
            break;

        case 12:
label_12:
            /*int num2 = (int)*/
            btl_stat.AlterStatus(btlData, 1073741824U);
            btlData.cmd[3].cmd_no = cmd.cmd_no;
            btlData.cmd[3].tar_id = cmd.cmd_no != 3 ? btl_util.GetStatusBtlID(1U, 0U) : cmd.tar_id;
            cmd.tar_id            = btlData.btl_id;
            break;

        case 14:
        case 15:
label_14:
            if (ff9item.FF9Item_GetCount(cmd.sub_no) == 0)
            {
                UIManager.Battle.SetBattleFollowMessage(24);
                return(false);
            }
            if (cmd.cmd_no == 51)
            {
                UIManager.Battle.SetBattleFollowMessage(9);
            }
            break;

        case 16:
        case 18:
        case 20:
            btl_calc.DecideSummonType(cmd);
            break;

        case 22:
        case 23:
            if (cmd.sub_no == 46)
            {
                btl_calc.DecideMeteor(cmd);
            }
            break;

        case 24:
            if (cmd.sub_no == 82)
            {
                cmd.tar_id = btl_util.GetRandomBtlID((uint)(Comn.random8() & 1));
                break;
            }
            if (cmd.sub_no == 93 && ff9item.FF9Item_GetCount(cmd.aa.Ref.power) < btl_util.SumOfTarget(1U))
            {
                UIManager.Battle.SetBattleFollowMessage(24);
                return(false);
            }
            break;

        case 28:
        case 29:
            if (cmd.sub_no == 126 || cmd.sub_no == 134)
            {
                uint num3 = cmd.aa.Ref.power * (uint)btlData.level;
                if (num3 > ff9StateGlobal.party.gil)
                {
                    UIManager.Battle.SetBattleFollowMessage(20);
                    return(false);
                }
                ff9StateGlobal.party.gil -= num3;
                break;
            }
            if (cmd.sub_no == 129 || cmd.sub_no == 137)
            {
                cmd.aa.Ref.attr = (byte)(1 << Comn.random8() % 8);
            }
            break;

        case 31:
            return(btl_calc.DecideMagicSword(btlData, cmd.aa.MP));

        default:
            switch (num1)
            {
            case 49:
                BTL_DATA btlDataPtr1;
                if ((btlDataPtr1 = btl_scrp.GetBtlDataPtr(cmd.tar_id)) == null || btlDataPtr1.bi.target == 0 || Status.checkCurStat(btlDataPtr1, 256U))
                {
                    return(false);
                }
                if (btlsys.btl_scene.Info.NoNeighboring != 0 && (btlData.weapon.category & 1) != 0)
                {
                    UIManager.Battle.SetBattleFollowMessage(23);
                    return(false);
                }
                if (cmd.cmd_no == 49)
                {
                    UIManager.Battle.SetBattleFollowMessage(7);
                }
                break;

            case 50:
                BTL_DATA btlDataPtr2;
                if ((btlDataPtr2 = btl_scrp.GetBtlDataPtr(cmd.tar_id)) == null || btlDataPtr2.bi.target == 0 || Status.checkCurStat(btlDataPtr2, 256U))
                {
                    return(false);
                }
                UIManager.Battle.SetBattleFollowMessage(8);
                break;

            case 51:
                goto label_14;

            case 52:
                if (btlsys.btl_scene.Info.NoNeighboring != 0 && (btlData.weapon.category & 1) != 0)
                {
                    UIManager.Battle.SetBattleFollowMessage(23);
                    return(false);
                }
                if (cmd.cmd_no == 49)
                {
                    UIManager.Battle.SetBattleFollowMessage(7);
                }
                break;

            case 56:
                if (btlsys.btl_phase == 4)
                {
                    for (BTL_DATA btl = btlsys.btl_list.next; btl != null; btl = btl.next)
                    {
                        if (btl.bi.player != 0 && !Status.checkCurStat(btl, 1107431747U) && btl.cur.hp > 0)
                        {
                            if (!btl_mot.checkMotion(btl, 17))
                            {
                                btl_mot.setMotion(btl, 17);
                                btl.evt.animFrame = 0;
                            }
                            btlsys.btl_phase = 5;
                            btlsys.btl_seq   = 3;
                        }
                    }
                    if (btlsys.btl_phase == 5 && btlsys.btl_seq == 3)
                    {
                        UIManager.Battle.SetIdle();
                        ++ff9StateGlobal.party.escape_no;
                        if (cmd.sub_no == 0)
                        {
                            ff9StateGlobal.btl_flag |= 4;
                        }
                        KillAllCommand(btlsys);
                    }
                    else
                    {
                        btlsys.cmd_status &= 65534;
                    }
                    return(false);
                }
                break;

            case 57:
                if (cmd.sub_no != btlsys.phantom_no)
                {
                    cmd.sub_no = btlsys.phantom_no;
                    cmd.aa     = btlsys.aa_data[cmd.sub_no];
                }
                break;

            case 59:
                if (Status.checkCurStat(btlData, 16384U))
                {
                    UIManager.Battle.SetBattleFollowMessage(6);
                    btlData.dms_geo_id = btl_init.GetModelID(btl_util.getSerialNumber(btlData) + 19);
                }
                else
                {
                    btlData.dms_geo_id = btl_init.GetModelID(btl_util.getSerialNumber(btlData));
                }
                return(true);

            case 60:
                btl_sys.CheckBattleMenuOff(btlData);
                if (btlData.die_seq == 0)
                {
                    btlData.die_seq = btlData.bi.player == 0 ? btlData.bi.slave != 0 || btlData.bi.death_f == 0 ? (byte)1 : (byte)3 : (!btl_mot.checkMotion(btlData, 4) ? (byte)1 : (byte)5);
                }
                return(false);

            case 61:
                btlData.cur.hp = 1;
                /*int num4 = (int)*/
                btl_stat.RemoveStatus(btlData, 256U);
                btlData.bi.dmg_mot_f = 1;
                FF9StateSystem.Settings.SetHPFull();
                return(false);

            case 62:
                btl_stat.StatusCommandCancel(btlData, 1U);
                btlData.stat.cur |= 1U;
                btlData.bi.atb    = 0;
                btl_sys.CheckBattlePhase(btlData);
                /*int num5 = (int)*/
                btl_stat.RemoveStatus(btlData, 2147483648U);
                btl_stat.SetStatusClut(btlData, true);
                return(false);

            default:
                switch (num1)
                {
                case 1:
                    if (btlsys.btl_scene.Info.NoNeighboring != 0 && (btlData.weapon.category & 1) != 0 && cmd.tar_id > 15)
                    {
                        UIManager.Battle.SetBattleFollowMessage(23);
                        return(false);
                    }
                    break;

                case 3:
                    goto label_12;
                }
                break;
            }
            break;
        }
        return(true);
    }
Пример #16
0
    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;
                    }
                }
            }
        }
    }
Пример #17
0
    public static void SelectCommandVfx(CMD_DATA cmd)
    {
        BTL_DATA        regist = cmd.regist;
        BattleUnit      caster = regist == null ? null : new BattleUnit(regist);
        BattleCommandId cmd_no = cmd.cmd_no;

        switch (cmd_no)
        {
        case BattleCommandId.EnemyAtk:
            if (cmd.tar_id < 16 && (cmd.aa.Category & 8) != 0 && cmd.info.cursor == 0)
            {
                UInt16 num = btl_abil.CheckCoverAbility(cmd.tar_id);
                if (num != 0)
                {
                    cmd.tar_id     = num;
                    cmd.info.cover = 1;
                }
            }
            btlseq.RunSequence(cmd);
            return;

        case BattleCommandId.Counter:
        case BattleCommandId.RushAttack:
            SetBattleVfx(cmd, (UInt32)(100 + btl_util.getSerialNumber(regist)), null);
            return;

        case BattleCommandId.AutoPotion:
            SetBattleVfx(cmd, (UInt32)ff9item._FF9Item_Info[btl_util.btlItemNum(cmd.sub_no)].info.VfxIndex, null);
            return;

        case BattleCommandId.EnemyCounter:
        case BattleCommandId.EnemyDying:
        case BattleCommandId.EnemyReaction:
            btlseq.RunSequence(cmd);
            return;

        case BattleCommandId.SysTrans:
            SetBattleVfx(cmd, !caster.IsUnderStatus(BattleStatus.Trance) ? 489u : 257u, null);
            return;

        case BattleCommandId.Attack:
            SetBattleVfx(cmd, (UInt32)(100 + btl_util.getSerialNumber(regist)), null);
            return;

        case BattleCommandId.Item:
            SetBattleVfx(cmd, (UInt32)ff9item._FF9Item_Info[btl_util.btlItemNum(cmd.sub_no)].info.VfxIndex, null);
            return;

        case BattleCommandId.Defend:
            UIManager.Battle.SetBattleCommandTitle(cmd);
            btl_mot.setMotion(regist, 12);
            regist.evt.animFrame = 0;
            btl_cmd.ExecVfxCommand(regist);
            return;

        case BattleCommandId.Change:
            UIManager.Battle.SetBattleCommandTitle(cmd);
            btl_mot.setMotion(regist, 9);
            return;

        case BattleCommandId.Steal:
        {
            Byte serialNumber = btl_util.getSerialNumber(regist);
            if (serialNumber == 0)
            {
                SetBattleVfx(cmd, 200u, null);
            }
            else if (serialNumber == 1)
            {
                SetBattleVfx(cmd, 273u, null);
            }
            else if (serialNumber == 14)
            {
                SetBattleVfx(cmd, 19u, null);
            }
            else if (serialNumber == 15)
            {
                SetBattleVfx(cmd, 119u, null);
            }
            else
            {
                SetBattleVfx(cmd, 20u, null);
            }
            return;
        }

        case BattleCommandId.Throw:
            switch (ff9item._FF9Item_Data[(Int32)cmd.sub_no].shape)
            {
            case 1:
                SetBattleVfx(cmd, 272u, null);
                break;

            case 2:
                SetBattleVfx(cmd, 266u, null);
                break;

            case 3:
            case 4:
                SetBattleVfx(cmd, 267u, null);
                break;

            case 5:
                SetBattleVfx(cmd, 268u, null);
                break;

            case 6:
                SetBattleVfx(cmd, 269u, null);
                break;

            case 7:
                SetBattleVfx(cmd, 265u, null);
                break;

            case 8:
            case 9:
            case 10:
                SetBattleVfx(cmd, 270u, null);
                break;

            case 11:
                SetBattleVfx(cmd, 271u, null);
                break;

            case 12:
                SetBattleVfx(cmd, 277u, null);
                break;
            }
            return;

        case BattleCommandId.Phantom:
        {
            FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle;
            switch (cmd.sub_no)
            {
            case 49:
                ff9Battle.phantom_no = 153;
                break;

            case 51:
                ff9Battle.phantom_no = 154;
                break;

            case 53:
                ff9Battle.phantom_no = 155;
                break;

            case 55:
                ff9Battle.phantom_no = 156;
                break;

            case 58:
                ff9Battle.phantom_no = 157;
                break;

            case 60:
                ff9Battle.phantom_no = 158;
                break;

            case 62:
                ff9Battle.phantom_no = 159;
                break;

            case 64:
                ff9Battle.phantom_no = 160;
                break;
            }

            if ((cmd.aa.Info.Target == TargetType.ManyAny && cmd.info.cursor == 0) || cmd.info.meteor_miss != 0 || cmd.info.short_summon != 0 || cmd.cmd_no == BattleCommandId.HolySword1 || cmd.cmd_no == BattleCommandId.HolySword2)
            {
                SetBattleVfx(cmd, cmd.aa.Vfx2, null);
            }
            else
            {
                SetBattleVfx(cmd, (UInt32)cmd.aa.Info.VfxIndex, null);
            }

            return;
        }

        case BattleCommandId.BoundaryCheck:
        case BattleCommandId.MagicCounter:
        case BattleCommandId.SysEscape:
        case BattleCommandId.SysPhantom:
        case BattleCommandId.SysLastPhoenix:
        case BattleCommandId.Jump:
        case BattleCommandId.Escape:
        case BattleCommandId.FinishBlow:
        default:
            if ((cmd.aa.Info.Target == TargetType.ManyAny && cmd.info.cursor == 0) || cmd.info.meteor_miss != 0 || cmd.info.short_summon != 0 || cmd.cmd_no == BattleCommandId.HolySword1 || cmd.cmd_no == BattleCommandId.HolySword2)
            {
                SetBattleVfx(cmd, cmd.aa.Vfx2, null);
            }
            else
            {
                SetBattleVfx(cmd, (UInt32)cmd.aa.Info.VfxIndex, null);
            }
            return;
        }
    }
Пример #18
0
    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);
    }
Пример #19
0
 public BattleTarget(BTL_DATA data, CalcContext context)
     : base(data)
 {
     _context = context;
 }
Пример #20
0
    public static void SetCommand(CMD_DATA cmd, uint cmd_no, uint sub_no, ushort tar_id, uint cursor)
    {
        BTL_DATA btl  = cmd.regist;
        uint     num1 = cmd_no;

        switch (num1)
        {
        case 56:
            if ((FF9StateSystem.Battle.FF9Battle.cmd_status & 1) != 0)
            {
                cmd.sub_no = (byte)sub_no;
                return;
            }
            FF9StateSystem.Battle.FF9Battle.cmd_status |= 1;
            cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[180];
            break;

        case 60:
        case 61:
        case 62:
            cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[0];
            break;

        default:
            switch (num1)
            {
            case 10:
            case 11:
                FF9StateSystem.Battle.FF9Battle.cmd_status |= 16;
                cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[sub_no];
                break;

            case 14:
                cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[0];
                break;

            case 15:
                cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[190];
                break;

            default:
                if ((int)num1 != 50)
                {
                    if ((int)num1 != 51)
                    {
                        if ((int)num1 == 2)
                        {
                            if (((int)btl.sa[1] & 536870912) != 0)
                            {
                                sub_no = 181U;
                            }
                            cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[sub_no];
                            break;
                        }
                        cmd.aa = FF9StateSystem.Battle.FF9Battle.aa_data[sub_no];
                        break;
                    }
                    goto case 14;
                }
                cmd.aa = FF9StateSystem.Battle.FF9Battle.enemy_attack[sub_no];
                break;
            }
            break;
        }

        cmd.tar_id      = tar_id;
        cmd.cmd_no      = (byte)cmd_no;
        cmd.sub_no      = (byte)sub_no;
        cmd.info.cursor = (byte)cursor;
        cmd.info.cover  = 0;
        cmd.info.dodge  = 0;
        cmd.info.reflec = 0;
        if (cmd_no > 48U)
        {
            cmd.info.priority = 1;
        }
        else
        {
            /*int num2 = (int)*/
            btl_stat.RemoveStatus(btl, 32768U);
        }
        if (cmd_no < 55U)
        {
            if (btl_util.getCurCmdPtr() != btl.cmd[4])
            {
                if (btl_mot.checkMotion(btl, 0))
                {
                    btl_mot.setMotion(btl, btl.mot[10]);
                    btl.evt.animFrame = 0;
                }
                else if (btl_mot.checkMotion(btl, 1))
                {
                    btl_mot.setMotion(btl, 11);
                    btl.evt.animFrame = 0;
                }
                else if (btl_mot.checkMotion(btl, 13) && cmd_no < 48U)
                {
                    btl_mot.setMotion(btl, 14);
                    btl.evt.animFrame = 0;
                }
            }
            btl.bi.cmd_idle = 1;
        }
        EnqueueCommand(cmd);
    }
Пример #21
0
    public static void OrganizePlayerData(PLAYER p, BTL_DATA btl, UInt16 cnt, UInt16 btl_no)
    {
        btl.btl_id = (UInt16)(1 << btl_no);
        BONUS btl_bonus = battle.btl_bonus;

        btl_bonus.member_flag = (Byte)(btl_bonus.member_flag | (Byte)(1 << cnt));
        btl.bi.player         = 1;
        btl.bi.slot_no        = p.info.slot_no;
        btl.bi.target         = 1;
        btl.bi.line_no        = (Byte)cnt;
        btl.bi.slave          = 0;
        if (battle.TRANCE_GAUGE_FLAG == 0 || (p.category & 16) != 0 || (btl.bi.slot_no == 2 && battle.GARNET_DEPRESS_FLAG != 0))
        {
            btl.bi.t_gauge = 0;
            btl.trance     = 0;
        }
        else
        {
            btl.bi.t_gauge = 1;
            btl.trance     = p.trance;
        }
        btl.tar_bone = 0;
        btl.sa       = p.sa;
        btl.elem.dex = p.elem.dex;
        btl.elem.str = p.elem.str;
        btl.elem.mgc = p.elem.mgc;
        btl.elem.wpr = p.elem.wpr;
        btl.level    = p.level;
        btl.max      = p.max;
        btl_init.CopyPoints(btl.cur, p.cur);
        Byte    serial_no = p.info.serial_no;
        FF9Char ff9Char   = new FF9Char();

        ff9Char.btl = btl;
        ff9Char.evt = btl.evt;
        FF9StateSystem.Common.FF9.charArray.Add(p.info.slot_no, ff9Char);
        btl_init.InitBattleData(btl, ff9Char);
        btl.mesh_banish = UInt16.MaxValue;
        btl_stat.InitCountDownStatus(btl);
        btl.max.at = (Int16)((60 - btl.elem.dex) * 40 << 2);
        btl_para.InitATB(btl);
        if (FF9StateSystem.Battle.FF9Battle.btl_scene.Info.StartType == 0)
        {
            btl.cur.at = 0;
        }
        else if (FF9StateSystem.Battle.FF9Battle.btl_scene.Info.StartType == 1)
        {
            btl.cur.at = (Int16)(btl.max.at - 1);
        }
        else
        {
            btl.cur.at = (Int16)(Comn.random16() % btl.max.at);
        }
        btl_mot.SetPlayerDefMotion(btl, p.info.serial_no, btl_no);
        BattlePlayerCharacter.InitAnimation(btl);
        btl_eqp.InitWeapon(p, btl);
        btl.defence.PhisicalDefence = p.defence.PhisicalDefence;
        btl.defence.PhisicalEvade   = p.defence.PhisicalEvade;
        btl.defence.MagicalDefence  = p.defence.MagicalDefence;
        btl.defence.MagicalEvade    = p.defence.MagicalEvade;
        btl_eqp.InitEquipPrivilegeAttrib(p, btl);
        btl_util.GeoSetColor2Source(btl.weapon_geo, 0, 0, 0);
        if (btl.cur.hp * 6 < btl.max.hp)
        {
            btl.stat.cur |= BattleStatus.LowHP;
        }

        btl_stat.AlterStatuses(btl, (BattleStatus)p.status & (BattleStatus.Venom | BattleStatus.Virus | BattleStatus.Silence | BattleStatus.Blind | BattleStatus.Trouble | BattleStatus.Zombie | BattleStatus.EasyKill | BattleStatus.Death | BattleStatus.LowHP | BattleStatus.Confuse | BattleStatus.Berserk | BattleStatus.Stop | BattleStatus.AutoLife | BattleStatus.Trance | BattleStatus.Defend | BattleStatus.Poison | BattleStatus.Sleep | BattleStatus.Regen | BattleStatus.Haste | BattleStatus.Slow | BattleStatus.Float | BattleStatus.Shell | BattleStatus.Protect | BattleStatus.Heat | BattleStatus.Freeze | BattleStatus.Vanish | BattleStatus.Doom | BattleStatus.Mini | BattleStatus.Reflect | BattleStatus.Jump | BattleStatus.GradualPetrify));
        if ((p.status & 1) != 0)
        {
            btl_stat.AlterStatus(btl, BattleStatus.Petrify);
        }
        btl_abil.CheckStatusAbility(new BattleUnit(btl));
        btl.base_pos = btl.evt.posBattle;
        Int16 geoID = btl.dms_geo_id;

        btl.height = 0;
        btl.radius = 0;

        FF9BattleDBHeightAndRadius.TryFindHeightAndRadius(geoID, ref btl.height, ref btl.radius);

        if (btl.cur.hp == 0 && btl_stat.AlterStatus(btl, BattleStatus.Death) == 2u)
        {
            btl.die_seq = 5;
            btl_mot.DecidePlayerDieSequence(btl);
            return;
        }
        btl.bi.def_idle = Convert.ToByte(btl_stat.CheckStatus(btl, BattleStatus.IdleDying));
        btl_mot.setMotion(btl, btl.bi.def_idle);
        btl.evt.animFrame = 0;
    }
Пример #22
0
 public static short setPhantomCount(BTL_DATA btl)
 {
     return((short)((60 - btl.elem.wpr) * 4 * 50));
 }
Пример #23
0
    public static void InitEnemyData(FF9StateBattleSystem btlsys)
    {
        BTL_DATA btl_DATA = (BTL_DATA)null;
        ObjList  objList  = new ObjList();

        if (!FF9StateSystem.Battle.isDebug)
        {
            objList = PersistenSingleton <EventEngine> .Instance.GetActiveObjList().next;
        }
        Int32 monCount = (Int32)FF9StateSystem.Battle.FF9Battle.btl_scene.PatAddr[(Int32)FF9StateSystem.Battle.FF9Battle.btl_scene.PatNum].MonCount;
        Int32 i        = 0;
        Int32 j        = 4;

        while (i < monCount)
        {
            ENEMY    enemy     = btlsys.enemy[i];
            BTL_DATA btl_DATA2 = btlsys.btl_data[j];
            enemy.info.die_fade_rate = 32;
            if ((btl_DATA2.dms_geo_id = BTL_SCENE.GetMonGeoID(i)) < 0)
            {
                enemy.info.slave = 1;
            }
            else
            {
                btl_init.SetBattleModel(btl_DATA2);
                enemy.info.slave = 0;
                if (!FF9StateSystem.Battle.isDebug)
                {
                    objList = objList.next;
                }
            }
            btl_DATA2.btl_id     = (UInt16)(16 << i);
            btl_DATA2.bi.player  = 0;
            btl_DATA2.bi.slot_no = (Byte)i;
            btl_DATA2.bi.line_no = (Byte)(4 + i);
            btl_DATA2.bi.t_gauge = 0;
            btl_DATA2.bi.slave   = enemy.info.slave;
            BTL_SCENE    btl_scene    = FF9StateSystem.Battle.FF9Battle.btl_scene;
            SB2_PATTERN  sb2_PATTERN  = btl_scene.PatAddr[(Int32)FF9StateSystem.Battle.FF9Battle.btl_scene.PatNum];
            SB2_MON_PARM sb2_MON_PARM = btl_scene.MonAddr[(Int32)sb2_PATTERN.Put[i].TypeNo];
            UInt16       geoID        = sb2_MON_PARM.Geo;
            btl_DATA2.height = 0;
            btl_DATA2.radius = 0;
            FF9Char ff9char = new FF9Char();
            btl_init.InitBattleData(btl_DATA2, ff9char);
            btl_DATA2.bi.def_idle = 0;
            btl_DATA2.base_pos    = enemy.base_pos;
            String path = (btl_DATA2.dms_geo_id == -1) ? String.Empty : FF9BattleDB.GEO.GetValue((Int32)btl_DATA2.dms_geo_id);
            if (!ModelFactory.IsUseAsEnemyCharacter(path))
            {
                btl_DATA2.weapon_geo = (GameObject)null;
            }
            btl_DATA2.sa = btl_init.enemy_dummy_sa;

            FF9BattleDBHeightAndRadius.TryFindHeightAndRadius(geoID, ref btl_DATA2.height, ref btl_DATA2.radius);

            if (btl_DATA != null)
            {
                btl_DATA.next = btl_DATA2;
            }
            btl_DATA = btl_DATA2;
            i++;
            j++;
        }
        while (j < 8)
        {
            btlsys.btl_data[j].btl_id = 0;
            j++;
        }
        btl_DATA.next          = (BTL_DATA)null;
        btlsys.btl_list.next   = btlsys.btl_data[4];
        btlsys.btl_load_status = (Byte)(btlsys.btl_load_status | 8);
        btl_init.SetupBattleEnemy();
        btlseq.InitSequencer();
    }
Пример #24
0
    public static void SetEnemyCommandBySequence(ushort tar_id, uint cmd_no, uint sub_no)
    {
        FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle;
        BTL_DATA             btl = btl_scrp.GetBtlDataPtr(16);

        BTL_DATA[]   btlDataArray = stateBattleSystem.btl_data;
        SEQ_WORK_SET seqWorkSet   = stateBattleSystem.seq_work_set;
        int          num1         = Array.IndexOf(seqWorkSet.AnmOfsList.Distinct().ToArray(), seqWorkSet.AnmOfsList[sub_no]);

        for (int index = 0; index < btlDataArray.Length; ++index)
        {
            if (num1 == btlDataArray[index].typeNo)
            {
                btl = btlDataArray[index];
                break;
            }
        }
        if (btl == null)
        {
            return;
        }
        if ((stateBattleSystem.cmd_status & 1) != 0 || Status.checkCurStat(btl, 33689859U))
        {
            btl.sel_mode = 0;
        }
        else
        {
            CMD_DATA cmd;
            if ((int)cmd_no == 47)
            {
                if (stateBattleSystem.btl_phase != 4)
                {
                    btl.sel_mode = 0;
                    return;
                }
                cmd = btl.cmd[0];
                if (Status.checkCurStat(btl, 1024U))
                {
                    tar_id = btl_util.GetRandomBtlID((uint)(Comn.random8() & 1));
                    sub_no = btl_util.getEnemyTypePtr(btl).p_atk_no;
                }
                else if (Status.checkCurStat(btl, 2048U))
                {
                    tar_id = btl_util.GetRandomBtlID(1U);
                    sub_no = btl_util.getEnemyTypePtr(btl).p_atk_no;
                }
            }
            else if ((int)cmd_no == 53)
            {
                cmd = btl.cmd[1];
            }
            else if ((int)cmd_no == 54)
            {
                cmd = btl.cmd[1];
            }
            else
            {
                btl.sel_mode = 0;
                return;
            }
            cmd.aa             = stateBattleSystem.enemy_attack[sub_no];
            cmd.aa.Ref.prog_no = 26;
            cmd.tar_id         = tar_id;
            cmd.cmd_no         = (byte)cmd_no;
            cmd.sub_no         = (byte)sub_no;
            cmd.info.cursor    = cmd.aa.Info.cursor < 6 || cmd.aa.Info.cursor >= 13 ? (byte)0 : (byte)1;
            if (cmd_no > 48U)
            {
                cmd.info.priority = 1;
            }
            else
            {
                /*int num2 = (int)*/
                btl_stat.RemoveStatus(cmd.regist, 32768U);
            }
            cmd.info.cover  = 0;
            cmd.info.dodge  = 0;
            cmd.info.reflec = 0;
            btl.bi.cmd_idle = 1;
            EnqueueCommand(cmd);
        }
    }
Пример #25
0
    public static void SetupBattlePlayer()
    {
        BTL_SCENE btl_scene = FF9StateSystem.Battle.FF9Battle.btl_scene;
        Int16     num2;
        Int16     num = num2 = 0;

        while (num2 < 4)
        {
            if (FF9StateSystem.Common.FF9.party.member[(Int32)num2] != null)
            {
                num = (Int16)(num + 1);
            }
            num2 = (Int16)(num2 + 1);
        }
        Int16 num3 = 632;
        Int16 num4 = -1560;
        Int16 num5 = (Int16)((num - 1) * num3 / 2);
        Int16 num6 = (Int16)((btl_scene.Info.StartType != 0) ? 180 : 0);

        num2 = 0;
        BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next;

        while (num2 < num)
        {
            if (next.bi.player == 0)
            {
                break;
            }
            next.bi.row = FF9StateSystem.Common.FF9.player[(Int32)next.bi.slot_no].info.row;
            if (btl_scene.Info.StartType == 0)
            {
                BTL_INFO bi = next.bi;
                bi.row = (Byte)(bi.row ^ 1);
            }
            BTL_DATA btl_DATA = next;
            Int32    index    = 0;
            Single   num7     = (Single)num5;
            next.evt.posBattle[0] = num7;
            next.base_pos[0]      = num7;
            btl_DATA.pos[index]   = num7;
            BTL_DATA btl_DATA2 = next;
            Int32    index2    = 1;
            num7 = (Single)((!btl_stat.CheckStatus(next, 2097152u)) ? 0 : -200);
            next.evt.posBattle[1] = num7;
            next.base_pos[1]      = num7;
            btl_DATA2.pos[index2] = num7;
            BTL_DATA btl_DATA3 = next;
            Int32    index3    = 2;
            num7 = (Single)(num4 + (Int16)((next.bi.row == 0) ? -400 : 0));
            next.evt.posBattle[2] = num7;
            next.base_pos[2]      = num7;
            btl_DATA3.pos[index3] = num7;
            next.rot = (next.evt.rotBattle = Quaternion.Euler(new Vector3(0f, (Single)num6, 180f)));
            next.gameObject.transform.localPosition = next.pos;
            next.gameObject.transform.localRotation = next.rot;
            Int16 serial_no = (Int16)FF9StateSystem.Common.FF9.player[(Int32)next.bi.slot_no].info.serial_no;
            next.shadow_bone[0] = btl_init.ShadowDataPC[(Int32)serial_no][0];
            next.shadow_bone[1] = btl_init.ShadowDataPC[(Int32)serial_no][1];
            btl_util.SetShadow(next, (UInt16)btl_init.ShadowDataPC[(Int32)serial_no][2], (UInt32)btl_init.ShadowDataPC[(Int32)serial_no][3]);
            GameObject gameObject    = FF9StateSystem.Battle.FF9Battle.map.shadowArray[(Int32)next.bi.slot_no];
            Vector3    localPosition = gameObject.transform.localPosition;
            localPosition.z = (Single)btl_init.ShadowDataPC[(Int32)serial_no][4];
            gameObject.transform.localPosition = localPosition;
            num2 = (Int16)(num2 + 1);
            num5 = (Int16)(num5 - num3);
            next = next.next;
        }
    }
Пример #26
0
    public static void SetEnemyCommand(ushort own_id, ushort tar_id, uint cmd_no, uint sub_no)
    {
        FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle;
        BTL_DATA             btlDataPtr        = btl_scrp.GetBtlDataPtr(own_id);

        if ((stateBattleSystem.cmd_status & 1) != 0 || Status.checkCurStat(btlDataPtr, 33689859U))
        {
            btlDataPtr.sel_mode = 0;
        }
        else
        {
            CMD_DATA cmd;
            if ((int)cmd_no == 47)
            {
                if (stateBattleSystem.btl_phase != 4)
                {
                    btlDataPtr.sel_mode = 0;
                    return;
                }
                cmd = btlDataPtr.cmd[0];
                if (Status.checkCurStat(btlDataPtr, 1024U))
                {
                    tar_id = btl_util.GetRandomBtlID((uint)(Comn.random8() & 1));
                    sub_no = btl_util.getEnemyTypePtr(btlDataPtr).p_atk_no;
                }
                else if (Status.checkCurStat(btlDataPtr, 2048U))
                {
                    tar_id = btl_util.GetRandomBtlID(1U);
                    sub_no = btl_util.getEnemyTypePtr(btlDataPtr).p_atk_no;
                }
            }
            else if ((int)cmd_no == 53)
            {
                cmd = btlDataPtr.cmd[1];
            }
            else if ((int)cmd_no == 54)
            {
                cmd = btlDataPtr.cmd[1];
            }
            else
            {
                btlDataPtr.sel_mode = 0;
                return;
            }
            cmd.aa          = stateBattleSystem.enemy_attack[sub_no];
            cmd.tar_id      = tar_id;
            cmd.cmd_no      = (byte)cmd_no;
            cmd.sub_no      = (byte)sub_no;
            cmd.info.cursor = cmd.aa.Info.cursor < 6 || cmd.aa.Info.cursor >= 13 ? (byte)0 : (byte)1;
            if (cmd_no > 48U)
            {
                cmd.info.priority = 1;
            }
            else
            {
                /*int num = (int)*/
                btl_stat.RemoveStatus(cmd.regist, 32768U);
            }
            cmd.info.cover         = 0;
            cmd.info.dodge         = 0;
            cmd.info.reflec        = 0;
            btlDataPtr.bi.cmd_idle = 1;
            EnqueueCommand(cmd);
        }
    }
Пример #27
0
 public static void Sequencer()
 {
     btlseq.wSeqCode = 0;
     SEQ_WORK[] seqWork = btlseq.seq_work_set.SeqWork;
     for (Int32 i = 0; i < 4; i++)
     {
         if (seqWork[i].CmdPtr != null)
         {
             SEQ_WORK seq_WORK = seqWork[i];
             seq_WORK.IncCnt = (Int16)(seq_WORK.IncCnt + 1);
             SEQ_WORK seq_WORK2 = seqWork[i];
             seq_WORK2.DecCnt = (Int16)(seq_WORK2.DecCnt - 1);
             SEQ_WORK seq_WORK3 = seqWork[i];
             seq_WORK3.AnmCnt = (Int16)(seq_WORK3.AnmCnt + 1);
             BTL_DATA regist = seqWork[i].CmdPtr.regist;
             Int32    num    = 1;
             using (btlseq.sequenceReader = new BinaryReader(new MemoryStream(btlseq.data)))
             {
                 while (num != 0)
                 {
                     btlseq.sequenceReader.BaseStream.Seek((Int64)(seqWork[i].CurPtr + 4), SeekOrigin.Begin);
                     btlseq.wSeqCode = (Int32)btlseq.sequenceReader.ReadByte();
                     if (btlseq.wSeqCode > (Int32)btlseq.gSeqProg.Length)
                     {
                         btlseq.wSeqCode = 0;
                     }
                     if (seqWork[i].Flags.WaitLoadVfx && SFX.GetTaskMonsteraStartOK() != 0)
                     {
                         seqWork[i].Flags.DoneLoadVfx = true;
                         seqWork[i].Flags.WaitLoadVfx = false;
                     }
                     if (seqWork[i].CurPtr != seqWork[i].OldPtr && btlseq.gSeqProg[btlseq.wSeqCode].Init != null)
                     {
                         btlseq.gSeqProg[btlseq.wSeqCode].Init(seqWork[i], regist);
                     }
                     seqWork[i].OldPtr = seqWork[i].CurPtr;
                     num = btlseq.gSeqProg[btlseq.wSeqCode].Exec(seqWork[i], regist);
                 }
             }
             if (seqWork[i].TurnTime != 0)
             {
                 Vector3 eulerAngles = regist.rot.eulerAngles;
                 eulerAngles.y = (Single)(seqWork[i].TurnOrg + seqWork[i].TurnRot * (Int16)seqWork[i].TurnCnt / (Int16)seqWork[i].TurnTime);
                 regist.rot    = Quaternion.Euler(eulerAngles);
                 SEQ_WORK seq_WORK4 = seqWork[i];
                 Byte     turnCnt;
                 seq_WORK4.TurnCnt = (Byte)((turnCnt = seq_WORK4.TurnCnt) + 1);
                 if (turnCnt >= seqWork[i].TurnTime)
                 {
                     seqWork[i].TurnTime = 0;
                 }
             }
             if (seqWork[i].SfxTime != 0)
             {
                 SEQ_WORK seq_WORK5 = seqWork[i];
                 if ((seq_WORK5.SfxTime = (Byte)(seq_WORK5.SfxTime - 1)) == 0)
                 {
                     btl_util.SetBattleSfx(regist, seqWork[i].SfxNum, seqWork[i].SfxVol);
                 }
             }
             if (seqWork[i].SVfxTime != 0)
             {
                 SEQ_WORK seq_WORK6 = seqWork[i];
                 if ((seq_WORK6.SVfxTime = (Byte)(seq_WORK6.SVfxTime - 1)) == 0)
                 {
                     Int16[] arg = new Int16[]
                     {
                         (Int16)seqWork[i].SVfxParam,
                         0,
                         0,
                         0
                     };
                     btl_vfx.SetBattleVfx(seqWork[i].CmdPtr, (UInt32)seqWork[i].SVfxNum, arg);
                 }
             }
             if (seqWork[i].FadeTotal != 0)
             {
                 SEQ_WORK seq_WORK7 = seqWork[i];
                 seq_WORK7.FadeStep = (Byte)(seq_WORK7.FadeStep - 1);
                 btl_util.SetEnemyFadeToPacket(regist, (Int32)(seqWork[i].FadeStep * 32 / seqWork[i].FadeTotal));
                 if (seqWork[i].FadeStep == 0)
                 {
                     seqWork[i].FadeTotal = 0;
                 }
             }
         }
     }
 }
Пример #28
0
    public static void CommandEngine(FF9StateBattleSystem btlsys)
    {
        if (btlsys.cur_cmd == null)
        {
            if (btlsys.cmd_queue.next == null)
            {
                return;
            }
            CMD_DATA cmd = btlsys.cmd_queue.next;
            while (cmd != null && (cmd.cmd_no <= 59 && cmd.cmd_no != 56 && (cmd.cmd_no != 58 && Status.checkCurStat(cmd.regist, 33558531U)) || cmd.cmd_no == 57 && Status.checkCurStat(cmd.regist, 256U)))
            {
                cmd = cmd.next;
            }

            if (cmd == null || !FF9StateSystem.Battle.isDebug && !((BattleHUD)(object)UIManager.Battle).IsNativeEnableAtb() && cmd.cmd_no < 48)
            {
                return;
            }
            if (cmd.cmd_no < 55)
            {
                BTL_DATA btl = cmd.regist;
                if (cmd.cmd_no > 48 && cmd.cmd_no < 53)
                {
                    btl_mot.setMotion(btl, 9);
                    btl.evt.animFrame = 0;
                }
                if (btl.bi.player != 0 && !btl_mot.checkMotion(btl, 9) && (!btl_mot.checkMotion(btl, 17) && !Status.checkCurStat(btl, 1073741824U)))
                {
                    if (!btl_mot.checkMotion(btl, btl.bi.def_idle) || btl.bi.cmd_idle != 0)
                    {
                        return;
                    }
                    btl_mot.setMotion(btl, 9);
                    btl.evt.animFrame = 0;
                    return;
                }
                if (Status.checkCurStat(btl, 16777216U))
                {
                    /*int num = (int)*/
                    btl_stat.AlterStatus(btl, 256U);
                    return;
                }
            }
            btlsys.cur_cmd = cmd;
            KillCommand(cmd);
        }
        CMD_DATA cmd1 = btlsys.cur_cmd;

        if (cmd1 == null)
        {
            return;
        }
        BTL_DATA btl1 = cmd1.regist;

        switch (btlsys.cmd_mode)
        {
        case 0:
            if (!CheckCommandCondition(btlsys, cmd1) || !CheckTargetCondition(btlsys, cmd1) || !CheckMpCondition(cmd1))
            {
                ResetItemCount(cmd1);
                if (btl1 != null && btl1.bi.player != 0 && btl_mot.checkMotion(btl1, 9))
                {
                    btl_mot.setMotion(btl1, 32);
                }
                btlsys.cmd_mode = 3;
                break;
            }
            if (btl1 != null && !btl_mot.checkMotion(btl1, 9) && cmd1.cmd_no < 47)
            {
                btl_mot.setMotion(btl1, 9);
                btl1.evt.animFrame = 0;
            }
            ++btlsys.cmd_mode;
            break;

        case 1:
            btl_vfx.SelectCommandVfx(cmd1);
            ++btlsys.cmd_mode;
            break;

        case 2:
            if (btl1.bi.player != 0 || cmd1.info.mon_reflec != 0)
            {
                CheckCommandLoop(cmd1);
            }
            break;

        case 3:
            if (cmd1.cmd_no != 56)
            {
                ReqFinishCommand();
                break;
            }
            FinishCommand(btlsys);
            break;
        }
        if (!btl_mot.ControlDamageMotion(cmd1) || btlsys.cmd_mode != 4)
        {
            return;
        }
        FinishCommand(btlsys);
    }
Пример #29
0
 public static void SeqInitWait(SEQ_WORK pSeqWork, BTL_DATA pMe)
 {
     btlseq.BattleLog("SeqInitWait");
     pSeqWork.DecCnt = (Int16)btlseq.sequenceReader.ReadByte();
 }
Пример #30
0
    public static void SetBattleData(UInt32 id, Int32 val)
    {
        FF9StateBattleSystem ff9Battle = FF9StateSystem.Battle.FF9Battle;
        FF9StateGlobal       ff        = FF9StateSystem.Common.FF9;

        switch (id)
        {
        case 32u:
            UIManager.Battle.FF9BMenu_EnableMenu(false);
            ff9Battle.btl_escape_key = 0;
            ff9Battle.cmd_status     = (UInt16)(ff9Battle.cmd_status & -2);
            ff9Battle.btl_phase      = 5;
            ff9Battle.btl_seq        = 2;
            btl_cmd.KillAllCommand(ff9Battle);
            for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next)
            {
                next.bi.cmd_idle = 0;
            }
            break;

        case 33u:
            if (ff9Battle.btl_phase == 1)
            {
                ff.btl_result = (Byte)val;
                if (val == 1 && ff9Battle.btl_scene.Info.WinPose != 0)
                {
                    ff9Battle.btl_phase = 5;
                    ff9Battle.btl_seq   = 4;
                }
                else
                {
                    if (ff.btl_result == 1)
                    {
                        ff.btl_result = 2;
                    }
                    ff9Battle.btl_phase = 8;
                    ff9Battle.btl_seq   = 0;
                }
            }
            break;

        case 34u:
            if (ff9Battle.btl_phase == 1)
            {
                ff9Battle.btl_phase = 7;
                ff9Battle.btl_seq   = 0;
                ff.btl_result       = 3;
            }
            break;

        case 35u:
            if (ff9Battle.btl_phase == 1)
            {
                BTL_SCENE_INFO info = ff9Battle.btl_scene.Info;
                ff9Battle.btl_phase = 3;
                ff9Battle.btl_seq   = 0;
                if (info.SpecialStart == 0 || info.BackAttack == 0)
                {
                    info.StartType = 2;
                }
            }
            break;

        case 36u:
            if (ff9Battle.btl_phase == 1)
            {
                SFX.SetCamera(val);
            }
            break;

        case 37u:
        {
            FF9StateGlobal ff9StateGlobal = ff;
            ff9StateGlobal.btl_flag = (Byte)(ff9StateGlobal.btl_flag | 1);
            PersistenSingleton <EventEngine> .Instance.SetNextMap(val);

            break;
        }

        case 38u:
            ff.party.gil += (UInt32)val;
            if (ff.party.gil > 9999999u)
            {
                ff.party.gil = 9999999u;
            }
            break;

        case 39u:
            if (ff.dragon_no < 9999)
            {
                FF9StateGlobal ff9StateGlobal2 = ff;
                ff9StateGlobal2.dragon_no = (Int16)(ff9StateGlobal2.dragon_no + 1);
            }
            break;

        case 40u:
        {
            btlsnd.ff9btlsnd_song_vol_intplall(30, 0);
            FF9StateGlobal ff2 = FF9StateSystem.Common.FF9;
            ff2.btl_flag = (Byte)(ff2.btl_flag | 16);
            break;
        }
        }
    }