コード例 #1
0
        public void WeaponPhisicalParams(CalcAttackBonus bonus)
        {
            Int32 baseDamage = Comn.random16() % (1 + (Caster.Level + Caster.Strength >> 3));

            Context.AttackPower = Caster.WeaponPower;
            Target.SetPhisicalDefense();
            switch (bonus)
            {
            case CalcAttackBonus.Simple:
                Context.Attack = (Int16)(Caster.Strength + baseDamage);
                break;

            case CalcAttackBonus.WillPower:
                Context.Attack = (Int16)((Caster.Strength + Caster.Will >> 1) + baseDamage);
                break;

            case CalcAttackBonus.Dexterity:
                Context.Attack = (Int16)((Caster.Strength + Caster.Data.elem.dex >> 1) + baseDamage);
                break;

            case CalcAttackBonus.Magic:
                Context.Attack = (Int16)((Caster.Strength + Caster.Data.elem.mgc >> 1) + baseDamage);
                break;

            case CalcAttackBonus.Random:
                Context.Attack = (Int16)(Comn.random16() % Caster.Strength + baseDamage);
                break;

            case CalcAttackBonus.Level:
                Context.AttackPower += Caster.Data.level;
                Context.Attack       = (Int16)(Caster.Strength + baseDamage);
                break;
            }
        }
コード例 #2
0
ファイル: BattleTarget.cs プロジェクト: ArtReeX/memoria
 public void GambleDefence()
 {
     if (_context.DefensePower != 0 && HasSupportAbility(SupportAbility1.GambleDefence))
     {
         _context.DefensePower = (Int16)(Comn.random16() % (_context.DefensePower << 1));
     }
 }
コード例 #3
0
        public Boolean TryPhysicalHit()
        {
            Caster.PenaltyPhysicalHitRate();
            Caster.BonusPhysicalEvade();
            Target.PenaltyDistractHitRate();
            Target.PenaltyPhysicalEvade();
            Target.PenaltyDefenceHitRate();
            Target.PenaltyBanishHitRate();

            if (Context.HitRate <= Comn.random16() % 100)
            {
                Context.Flags |= BattleCalcFlags.Miss;
                return(false);
            }

            if (Target.Data == Caster.Data || Context.Evade <= Comn.random16() % 100)
            {
                return(true);
            }

            Context.Flags |= BattleCalcFlags.Miss;
            if (!Target.IsCovered)
            {
                Context.Flags |= BattleCalcFlags.Dodge;
            }

            return(false);
        }
コード例 #4
0
 public void TryAlterMagicStatuses()
 {
     if (_command.HitRate > Comn.random16() % 100)
     {
         _target.TryAlterStatuses(_command.AbilityStatus, false);
     }
 }
コード例 #5
0
 public void ResetIdleTimer(Int32 x)
 {
     if (this._context.idletimer < 0)
     {
         return;
     }
     this._context.idletimer = (Int16)(200 + Comn.random8() << 1 + (x != 0 ? 0 : 1));
 }
コード例 #6
0
        public void TryCriticalHit()
        {
            Int32 quarterWill = Caster.Data.elem.wpr >> 2;

            if (quarterWill != 0 && Comn.random16() % quarterWill > Comn.random16() % 100)
            {
                Context.Attack *= 2;
                Target.Flags   |= CalcFlag.Critical;
            }
        }
コード例 #7
0
        public void TryEscape()
        {
            CMD_DATA curCmdPtr = btl_util.getCurCmdPtr();

            if (curCmdPtr != null && curCmdPtr.regist.bi.player == 0)
            {
                return;
            }

            SByte playerCount  = 0;
            SByte enemyCount   = 0;
            Int16 playerLevels = 0;
            Int16 enemyLevels  = 0;

            for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next)
            {
                BattleUnit unit = new BattleUnit(next);
                if (unit.IsPlayer)
                {
                    ++playerCount;
                    playerLevels += next.level;
                }
                else
                {
                    ++enemyCount;
                    enemyLevels += next.level;
                }
            }

            if (enemyCount == 0)
            {
                enemyCount = 1;
            }
            if (playerCount == 0)
            {
                playerCount = 1;
            }
            if (enemyLevels == 0)
            {
                enemyLevels = 1;
            }
            if (playerLevels == 0)
            {
                playerLevels = 1;
            }

            const UInt32 fleeIterationScript = 0056;

            Int16 rate = (Int16)(200 / (enemyLevels / enemyCount) * (playerLevels / playerCount) / 16);

            if (rate > Comn.random16() % 100)
            {
                btl_cmd.SetCommand(FF9StateSystem.Battle.FF9Battle.cmd_escape, fleeIterationScript, 1U, 15, 1U);
            }
        }
コード例 #8
0
ファイル: btl_cmd.cs プロジェクト: uzoko1/Memoria
 public static void SetAutoCommand(BTL_DATA btl)
 {
     if (Status.checkCurStat(btl, 1024U))
     {
         SetCommand(btl.cmd[0], 1U, 176U, btl_util.GetRandomBtlID((uint)(Comn.random8() & 1)), 0U);
     }
     else
     {
         if (!Status.checkCurStat(btl, 2048U))
         {
             return;
         }
         SetCommand(btl.cmd[0], 1U, 176U, btl_util.GetRandomBtlID(0U), 0U);
     }
 }
コード例 #9
0
        public Boolean TryMagicHit()
        {
            if (_context.HitRate <= Comn.random16() % 100)
            {
                _context.Flags |= BattleCalcFlags.Miss;
                return(false);
            }

            if (_context.Evade > Comn.random16() % 100)
            {
                _context.Flags |= BattleCalcFlags.Miss;
                return(false);
            }

            return(true);
        }
コード例 #10
0
    public static Int32 SeqExecRunCamera(SEQ_WORK pSeqWork, BTL_DATA pMe)
    {
        btlseq.BattleLog("SeqExecRunCamera");
        FF9StateBattleSystem ff9Battle    = FF9StateSystem.Battle.FF9Battle;
        SEQ_WORK_SET         seq_WORK_SET = ff9Battle.seq_work_set;

        if (btlseq.wSeqCode != 32)
        {
            if (pSeqWork.CmdPtr.aa.Info.DefaultCamera == false)
            {
                if (FF9StateSystem.Settings.cfg.camera == 1UL)
                {
                    goto IL_16C;
                }
                UInt32 num = pMe.stat.cur;
                for (BTL_DATA next = ff9Battle.btl_list.next; next != null; next = next.next)
                {
                    if ((next.btl_id & pSeqWork.CmdPtr.tar_id) != 0)
                    {
                        num |= next.stat.cur;
                    }
                }
                if ((num & 335544320u) != 0u)
                {
                    goto IL_16C;
                }
                if (Comn.random8() >= 128)
                {
                    goto IL_16C;
                }
            }
        }
        Int16[] array = new Int16[3];
        btlseq.SeqSubTargetAveragePos(pSeqWork.CmdPtr.tar_id, out array[0], out array[2]);
        array[1] = 0;
        seq_WORK_SET.CamTrgCPos = new Vector3((Single)array[0], (Single)array[1], (Single)array[2]);
        seq_WORK_SET.CamExe     = pMe;
        seq_WORK_SET.CamTrg     = btlseq.SeqSubGetTarget(pSeqWork.CmdPtr.tar_id);
        SFX.SetCameraTarget(seq_WORK_SET.CamTrgCPos, seq_WORK_SET.CamExe, seq_WORK_SET.CamTrg);
        ff9Battle.seq_work_set.CameraNo = btlseq.sequenceReader.ReadByte();
        SFX.SetEnemyCamera(pMe);
IL_16C:
        pSeqWork.CurPtr += 2;
        return(1);
    }
コード例 #11
0
        private static void CheckDamageReaction(BattleCalculator v, Boolean counterAtk)
        {
            if (v.Target.Data.bi.player == 0 || v.Caster.Data.bi.player != 0)
            {
                return;
            }
            if (!counterAtk)
            {
                btl_abil.CheckAutoItemAbility(v.Target, v.Command);
            }
            btl_abil.CheckReactionAbility(v.Target.Data, v.Command.Data.aa);
            if (v.Target.Data.bi.t_gauge == 0 || v.Target.Data.cur.hp <= 0 || Status.checkCurStat(v.Target.Data, BattleStatus.CannotTrance))
            {
                return;
            }


            Byte num1 = v.Target.HasSupportAbility(SupportAbility2.HighTide)
                ? v.Target.Data.elem.wpr
                : (Byte)((UInt32)Comn.random16() % v.Target.Data.elem.wpr);

            if (v.Target.Data.trance + num1 < Byte.MaxValue)
            {
                v.Target.Data.trance += num1;
            }
            else
            {
                v.Target.Data.trance = Byte.MaxValue;

                if (FF9StateSystem.Battle.isDebug)
                {
                    return;
                }

                if (Configuration.Battle.NoAutoTrance)
                {
                    return;
                }

                v.Target.AlterStatus(BattleStatus.Trance);
            }
        }
コード例 #12
0
    private Int32 SelectScene()
    {
        EncountData encountData = this.gMode != 1 ? ff9.w_worldGetBattleScenePtr() : this._enCountData;
        Int32       num         = Comn.random8();
        Int32       index       = encountData.pattern & 3;

        if (num < EventEngine.d[index, 0])
        {
            return(encountData.scene[0]);
        }
        if (num < EventEngine.d[index, 1])
        {
            return(encountData.scene[1]);
        }
        if (num < EventEngine.d[index, 2])
        {
            return(encountData.scene[2]);
        }
        return(encountData.scene[3]);
    }
コード例 #13
0
ファイル: EventEngine.cs プロジェクト: uzoko1/Memoria
    public int OperatorSelect()
    {
        byte[] numArray = new byte[8];
        int    num1     = this.eBin.getv();
        int    num2     = 0;
        int    num3     = 0;

        while (num3 < 8)
        {
            if ((num1 & 1) != 0)
            {
                numArray[num2++] = (byte)num3;
            }
            ++num3;
            num1 >>= 1;
        }
        if (num2 == 0)
        {
            return(0);
        }
        int index = num2 * Comn.random8() >> 8;

        return(1 << numArray[index]);
    }
コード例 #14
0
 public static void OrganizeEnemyData(FF9StateBattleSystem btlsys)
 {
     for (Int32 i = 0; i < BTL_SCENE.GetMonCount(); i++)
     {
         ENEMY_TYPE et       = btlsys.enemy[i].et;
         BTL_DATA   btl_DATA = btlsys.btl_data[4 + i];
         btl_DATA.level  = et.level;
         btl_DATA.max.at = (Int16)((60 - btl_DATA.elem.dex) * 40 << 2);
         btl_para.InitATB(btl_DATA);
         btl_DATA.cur.at = (Int16)(Comn.random16() % (Int32)btl_DATA.max.at);
         btl_DATA.weapon = (ItemAttack)null;
         btl_stat.InitCountDownStatus(btl_DATA);
         btl_mot.HideMesh(btl_DATA, btl_DATA.mesh_current, false);
         if (btl_DATA.bi.slave != 0)
         {
             btl_DATA.cur.at      = 0;
             btl_DATA.cur.at_coef = 0;
             btl_DATA.gameObject.transform.localRotation = btl_DATA.rot;
             btl_DATA.gameObject.transform.localPosition = btl_DATA.evt.posBattle;
             btl_DATA.currentAnimationName = btl_DATA.mot[(Int32)btl_DATA.bi.def_idle];
             btl_mot.setMotion(btl_DATA, btl_DATA.currentAnimationName);
             btl_mot.setSlavePos(btl_DATA, ref btl_DATA.base_pos);
             UnityEngine.Object.Destroy(btl_DATA.gameObject);
             UnityEngine.Object.Destroy(btl_DATA.getShadow());
             btl_DATA.gameObject = btl_util.GetMasterEnemyBtlPtr().Data.gameObject;
         }
         else
         {
             btl_DATA.base_pos[0]          = btl_DATA.evt.posBattle[0];
             btl_DATA.base_pos[1]          = btl_DATA.evt.posBattle[1];
             btl_DATA.base_pos[2]          = btl_DATA.evt.posBattle[2];
             btl_DATA.currentAnimationName = btl_DATA.mot[(Int32)btl_DATA.bi.def_idle];
             btl_DATA.evt.animFrame        = (Byte)(Comn.random8() % (Int32)GeoAnim.geoAnimGetNumFrames(btl_DATA));
         }
     }
 }
コード例 #15
0
    public Int32 OperatorSelect()
    {
        Byte[] numArray = new Byte[8];
        Int32  num1     = this.eBin.getv();
        Int32  num2     = 0;
        Int32  num3     = 0;

        while (num3 < 8)
        {
            if ((num1 & 1) != 0)
            {
                numArray[num2++] = (Byte)num3;
            }
            ++num3;
            num1 >>= 1;
        }
        if (num2 == 0)
        {
            return(0);
        }
        Int32 index = num2 * Comn.random8() >> 8;

        return(1 << numArray[index]);
    }
コード例 #16
0
    private bool ProcessEncount(PosObj po)
    {
        int SceneNo = 0;

        if ((int)this._context.usercontrol != 0 && (double)this._encountTimer > 960.0)
        {
            this._encountTimer = 0.0f;
            this._encountBase += (int)this._context.encratio;
            if (Comn.random8() < this._encountBase >> 3)
            {
                this._encountBase = 0;
                SceneNo           = this.SelectScene();
                if (SceneNo == this._lastScene)
                {
                    SceneNo = this.SelectScene();
                }
                this._lastScene = SceneNo;
                this.SetBattleScene(SceneNo);
                this._ff9.btlSubMapNo = (sbyte)-1;
                FF9StateSystem.Battle.isRandomEncounter = true;
            }
        }
        return(SceneNo != 0);
    }
コード例 #17
0
    private Boolean ProcessEncount(PosObj po)
    {
        Int32 SceneNo = 0;

        if ((Int32)this._context.usercontrol != 0 && (this._encountTimer > 960.0 || SettingsState.IsRapidEncounter))
        {
            this._encountTimer = 0.0f;
            this._encountBase += (Int32)this._context.encratio;
            if (Comn.random8() < this._encountBase >> 3)
            {
                this._encountBase = 0;
                SceneNo           = this.SelectScene();
                if (SceneNo == this._lastScene)
                {
                    SceneNo = this.SelectScene();
                }
                this._lastScene = SceneNo;
                this.SetBattleScene(SceneNo);
                this._ff9.btlSubMapNo = -1;
                FF9StateSystem.Battle.isRandomEncounter = true;
            }
        }
        return(SceneNo != 0);
    }
コード例 #18
0
    public int GetSysvar(int code)
    {
        FF9StateBattleSystem stateBattleSystem = FF9StateSystem.Battle.FF9Battle;
        int num;

        switch (code)
        {
        case 0:
            num = Comn.random8();
            break;

        case 1:
            num = this.fieldmap.GetCurrentCameraIndex();
            break;

        case 2:
            num = (int)this._context.usercontrol;
            break;

        case 3:
            num = FF9Snd.ff9fldsnd_sync();
            break;

        case 4:
            num = EventCollision.sSysAngle;
            break;

        case 5:
            Obj sender = this.getSender(this.gExec);
            num = -1;
            if (sender != null)
            {
                num = (int)sender.sid - (this.sSourceObjN - 9);
                break;
            }
            break;

        case 6:
            num = (int)this._ff9.party.gil;
            break;

        case 7:
            num = FF9StateSystem.EventState.gStepCount;
            break;

        case 8:
            num = ETb.gMesSignal;
            break;

        case 9:
            num = this.eTb.GetChoose();
            break;

        case 10:
            num = this.sMapJumpX;
            break;

        case 11:
            num = this.sMapJumpZ;
            break;

        case 12:
            num = this.sSysX;
            break;

        case 13:
            num = this.sSysY;
            break;

        case 14:
            num = fldfmv.FF9FieldFMVGetFrame();
            break;

        case 15:
            num = fldfmv.FF9FieldFMVSync();
            break;

        case 16:
            num = (int)this._ff9.frog_no;
            break;

        case 17:
            num = Convert.ToInt32(TimerUI.Time);
            break;

        case 18:
            num = QuadMistDatabase.MiniGame_GetLastBattleResult();
            break;

        case 19:
            num = FF9StateSystem.MiniGame.GetNumberOfCards();
            Debug.Log((object)("num of cards = " + (object)num));
            break;

        case 20:
            num = Convert.ToInt32(FF9StateSystem.Settings.time);
            if (num > 8388607)
            {
                num = 8388607;
                break;
            }
            break;

        case 21:
            num = !TimerUI.Enable ? 0 : 1;
            break;

        case 22:
            num = this.sSEPos;
            break;

        case 23:
            num = this.sSEVol;
            break;

        case 24:
            num = (int)this._ff9.btlMapNo;
            break;

        case 25:
            num = !btlseq.BtlSeqBusy() ? 0 : 1;
            break;

        case 26:
            num = this.gMode != 4 ? 0 : 1;
            break;

        case 27:
            num = (int)this._ff9.btl_result;
            break;

        case 28:
            num = EventEngine._btlCmdPrm >> 8 & (int)byte.MaxValue;
            break;

        case 29:
            num = EventEngine._btlCmdPrm & (int)byte.MaxValue;
            break;

        case 30:
            num = (int)stateBattleSystem.btl_phase;
            break;

        case 31:
            num = (int)stateBattleSystem.btl_scene.PatNum;
            break;

        default:
            if ((int)this.gCur.sid != 3 || this.gCur.ip != 791)
            {
                ;
            }
            num = code < 192 ? (int)btl_scrp.GetBattleData(code) : ff9.w_frameGetParameter(code);
            break;
        }
        return(num);
    }
コード例 #19
0
ファイル: btl_cmd.cs プロジェクト: uzoko1/Memoria
    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);
        }
    }
コード例 #20
0
ファイル: btl_cmd.cs プロジェクト: uzoko1/Memoria
    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);
        }
    }
コード例 #21
0
ファイル: btl_cmd.cs プロジェクト: uzoko1/Memoria
    // 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);
    }
コード例 #22
0
ファイル: btl_cmd.cs プロジェクト: uzoko1/Memoria
    public static ushort CheckReflec(CMD_DATA cmd)
    {
        ushort num1 = 0;

        if (cmd.cmd_no != 14 && cmd.cmd_no != 15 && (cmd.cmd_no != 51 && (cmd.aa.Category & 1) != 0) && ((int)cmd.regist.sa[0] & 1073741824) == 0)
        {
            uint     num2     = cmd.tar_id >= 16 ? 1U : 0U;
            ushort[] numArray = new ushort[4];
            short    num3;
            short    num4 = num3 = 0;
            for (BTL_DATA btl = FF9StateSystem.Battle.FF9Battle.btl_list.next; btl != null; btl = btl.next)
            {
                if ((btl.btl_id & cmd.tar_id) != 0)
                {
                    if (!Status.checkCurStat(btl, 1U) && btl_stat.CheckStatus(btl, 536870912U))
                    {
                        num1 |= btl.btl_id;
                        ++num4;
                    }
                }
                else if (!Status.checkCurStat(btl, 256U) && btl.bi.player == (int)num2 && btl.bi.target != 0)
                {
                    numArray[num3++] = btl.btl_id;
                }
            }
            if (num4 != 0 && num3 != 0)
            {
                for (int index = 0; index < 4; ++index)
                {
                    cmd.regist.reflec.tar_id[index] = index >= num4 ? (ushort)0 : numArray[Comn.random8() % num3];
                }
                if (num1 == cmd.tar_id)
                {
                    cmd.info.reflec = 1;
                    cmd.tar_id      = MargeReflecTargetID(cmd.regist.reflec);
                }
                else
                {
                    cmd.info.reflec = 2;
                    cmd.tar_id      = (ushort)(cmd.tar_id & (uint)~num1);
                }
            }
        }
        return(num1);
    }
コード例 #23
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;
    }
コード例 #24
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;
    }
コード例 #25
0
 private static void FldCalcSub_137(Context v)
 {
     v.AttackNumber = (Int16)(v.Caster.elem.mgc + Comn.random16() % (1 + (v.Caster.level + v.Caster.elem.mgc >> 3)));
     v.AttackPower  = v.Tbl.Ref.Power;
     v.DefencePower = v.Target.defence.MagicalDefence;
 }
コード例 #26
0
 private void idleAnimSpeed(Actor actor)
 {
     actor.aspeed = actor.idleSpeed[Comn.random8() & 3];
 }
コード例 #27
0
ファイル: BattleCaster.cs プロジェクト: Zer0Ph34r/GUI_Branch
 public void SetLowPhisicalAttack()
 {
     _context.Attack = (Int16)(Strength + Comn.random16() % (1 + (Level + Strength >> 3)));
 }
コード例 #28
0
ファイル: BattleCaster.cs プロジェクト: Zer0Ph34r/GUI_Branch
 public void SetMagicAttack()
 {
     _context.Attack = (Int16)(Magic + Comn.random16() % (1 + (Level + Magic >> 3)));
 }
コード例 #29
0
 private static void FldCalcSub_220(Context v)
 {
     v.Target.cur.hp = (UInt16)(1 + Comn.random8() % 10);
 }