Exemplo n.º 1
0
        public static void MakeCheckError(List <FELint.ErrorSt> errors)
        {
            InputFormRef InputFormRef = Init(null);

            if (InputFormRef.DataCount < 10)
            {
                errors.Add(new FELint.ErrorSt(FELint.Type.UNIT, U.NOT_FOUND
                                              , R._("ユニットデータが極端に少ないです。破損している可能性があります。")));
            }

            uint base_pointer = Program.ROM.u32(Program.ROM.RomInfo.support_unit_pointer());

            if (!U.isSafetyPointer(base_pointer))
            {
                errors.Add(new FELint.ErrorSt(FELint.Type.UNIT, U.NOT_FOUND
                                              , R._("ユニット0x01の支援ポインタが無効です。この値は支援の起点となる値です。バニラの値から変更しないでください。")));
                return;
            }

            //武器魔法混在パッチを適応しているか
            bool is_melee_range_fix = PatchUtil.SearchMeleeAndMagicFixPatch();

            uint unit_addr = InputFormRef.BaseAddress;

            for (uint i = 0; i < InputFormRef.DataCount; i++, unit_addr += InputFormRef.BlockSize)
            {
                uint name = Program.ROM.u16(unit_addr + 0);
                FELint.CheckText(name, "NAME1", errors, FELint.Type.UNIT, unit_addr, i);

                uint info = Program.ROM.u16(unit_addr + 2);
                FELint.CheckText(info, "DETAIL3", errors, FELint.Type.UNIT, unit_addr, i);

                uint id = Program.ROM.u8(unit_addr + 4);
                if (name == 0 && id == 0)
                {//ただの使っていないデータ
                }
                else
                {
                    FELint.CheckID(id, i + 1, errors, FELint.Type.UNIT, unit_addr, i);
                }

                if (is_melee_range_fix == false)
                {//武器魔法混在パッチがないので、混在のチェックをします
                    if (isMeleeMagicMixAddr(unit_addr))
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.UNIT, unit_addr
                                                      , R._("武器レベルで、近接と魔法を混在させています。\r\n混在を可能にするパッチを当てていない状態で、近接と魔法を混在すると、戦闘アニメが正しく動作しません。"), i));
                    }
                }
                uint support_pointer = Program.ROM.u32(unit_addr + 44);
                SupportUnitForm.MakeCheckErrorAddr(errors, support_pointer, FELint.Type.UNIT, unit_addr, i);
            }
        }
Exemplo n.º 2
0
        public void MeleeAndMagicFix()
        {
            if (this.InputFormRef != null && this.InputFormRef.IsUpdateLock)
            {
                return;
            }
            if (PatchUtil.SearchMeleeAndMagicFixPatch())
            {
                return;
            }
            bool useMelee = (B20.Value > 0 || B21.Value > 0 || B22.Value > 0 || B23.Value > 0);
            bool useMagic = (B24.Value > 0 || B25.Value > 0 || B26.Value > 0 || B27.Value > 0);

            if (useMelee && useMagic)
            {
                HowDoYouLikePatchForm.CheckAndShowPopupDialog(HowDoYouLikePatchForm.TYPE.MeleeAndMagicFix_By_Unit);
            }
        }
Exemplo n.º 3
0
        public static void MakeCheckError(List <FELint.ErrorSt> errors)
        {
            InputFormRef InputFormRef = Init(null);

            if (InputFormRef.DataCount < 10)
            {
                errors.Add(new FELint.ErrorSt(FELint.Type.UNIT, U.NOT_FOUND
                                              , R._("ユニットデータが極端に少ないです。破損している可能性があります。")));
            }

            //武器魔法混在パッチを適応しているか
            bool is_melee_range_fix = PatchUtil.SearchMeleeAndMagicFixPatch();

            uint unit_addr = InputFormRef.BaseAddress;

            for (uint i = 0; i < InputFormRef.DataCount; i++, unit_addr += InputFormRef.BlockSize)
            {
                uint name = Program.ROM.u16(unit_addr + 0);
                FELint.CheckText(name, "NAME1", errors, FELint.Type.UNIT, unit_addr, i);

                uint info = Program.ROM.u16(unit_addr + 2);
                FELint.CheckText(info, "DETAIL3", errors, FELint.Type.UNIT, unit_addr, i);

                uint id = Program.ROM.u8(unit_addr + 4);
                if (name == 0 && id == 0)
                {//ただの使っていないデータ
                }
                else
                {
                    FELint.CheckID(id, i + 1, errors, FELint.Type.UNIT, unit_addr, i);
                }

                if (is_melee_range_fix == false)
                {//武器魔法混在パッチがないので、混在のチェックをします
                    if (isMeleeMagicMixAddr(unit_addr))
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.UNIT, unit_addr
                                                      , R._("武器レベルで、近接と魔法を混在させています。\r\n混在を可能にするパッチを当てていない状態で、近接と魔法を混在すると、戦闘アニメが正しく動作しません。"), i));
                    }
                }
            }
        }
Exemplo n.º 4
0
        public static void MakeCheckError(List <FELint.ErrorSt> errors)
        {
            InputFormRef InputFormRef = Init(null);

            if (InputFormRef.DataCount < 10)
            {
                errors.Add(new FELint.ErrorSt(FELint.Type.CLASS, U.NOT_FOUND
                                              , R._("クラスデータが極端に少ないです。破損している可能性があります。")));
            }

            bool isFE6 = Program.ROM.RomInfo.version() == 6;

            //武器魔法混在パッチを適応しているか
            bool is_melee_range_fix = PatchUtil.SearchMeleeAndMagicFixPatch();

            uint class_addr = InputFormRef.BaseAddress;

            for (uint i = 0; i < InputFormRef.DataCount; i++, class_addr += InputFormRef.BlockSize)
            {
                uint name = Program.ROM.u16(class_addr + 0);
                FELint.CheckText(name, "NAME1", errors, FELint.Type.CLASS, class_addr, i);

                uint info = Program.ROM.u16(class_addr + 2);
                FELint.CheckText(info, "DETAIL3", errors, FELint.Type.CLASS, class_addr, i);

                uint id = Program.ROM.u8(class_addr + 4);
                if (name == 0 && id == 0)
                {//ただの使っていないデータ
                }
                else
                {//IDチェック
                    FELint.CheckID(id, i, errors, FELint.Type.CLASS, class_addr);
                }

                if (is_melee_range_fix == false)
                {//武器魔法混在パッチがないので、混在のチェックをします
                    bool mix;
                    if (isFE6)
                    {
                        mix = (ClassFE6Form.isMeleeMagicMix(class_addr));
                    }
                    else
                    {
                        mix = (isMeleeMagicMix(class_addr));
                    }

                    if (mix)
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.CLASS, class_addr
                                                      , R._("武器レベルで、近接と魔法を混在させています。\r\n混在を可能にするパッチを当てていない状態で、近接と魔法を混在すると、戦闘アニメが正しく動作しません。"), i));
                    }
                }

                //移動速度が0or1かどうかチェックする
                uint movespeed = Program.ROM.u8(class_addr + 7);
                if (movespeed >= 2)
                {
                    errors.Add(new FELint.ErrorSt(FELint.Type.CLASS, class_addr
                                                  , R._("「移動速度」に2以上が設定されています。「移動速度」が、2以上になっているユニットは移動した時に正しく描画されません。"), i));
                }
            }
        }