Exemple #1
0
        public static void GetWeaponLevel(uint cid
                                          , out uint out_sword
                                          , out uint out_lance
                                          , out uint out_axe
                                          , out uint out_bow
                                          , out uint out_staff
                                          , out uint out_anima
                                          , out uint out_light
                                          , out uint out_dark
                                          )
        {
            if (Program.ROM.RomInfo.version() == 6)
            {
                ClassFE6Form.GetWeaponLevel(cid
                                            , out out_sword
                                            , out out_lance
                                            , out out_axe
                                            , out out_bow
                                            , out out_staff
                                            , out out_anima
                                            , out out_light
                                            , out out_dark
                                            );
                return;
            }

            InputFormRef InputFormRef = Init(null);
            uint         addr         = InputFormRef.IDToAddr(cid);

            if (!U.isSafetyOffset(addr))
            {
                out_sword = 0;
                out_lance = 0;
                out_axe   = 0;
                out_bow   = 0;
                out_staff = 0;
                out_anima = 0;
                out_light = 0;
                out_dark  = 0;
                return;
            }

            out_sword = Program.ROM.u8(addr + 44);
            out_lance = Program.ROM.u8(addr + 45);
            out_axe   = Program.ROM.u8(addr + 46);
            out_bow   = Program.ROM.u8(addr + 47);
            out_staff = Program.ROM.u8(addr + 48);
            out_anima = Program.ROM.u8(addr + 49);
            out_light = Program.ROM.u8(addr + 50);
            out_dark  = Program.ROM.u8(addr + 51);
        }
Exemple #2
0
        //上位クラスかどうかの判定
        public static bool isHighClass(uint cid)
        {
            if (Program.ROM.RomInfo.version() <= 6)
            {
                return(ClassFE6Form.isHighClassFE6(cid));
            }

            if (cid <= 0)
            {
                return(false);
            }
            InputFormRef InputFormRef = Init(null);
            uint         addr         = InputFormRef.IDToAddr(cid);

            return(isHighClassAddr(addr));
        }
Exemple #3
0
        //ロードユニットフラグの確認
        public static bool isLoadClass(uint cid)
        {
            if (Program.ROM.RomInfo.version() <= 6)
            {
                return(ClassFE6Form.isLoadClass(cid));
            }

            if (cid <= 0)
            {
                return(false);
            }
            InputFormRef InputFormRef = Init(null);
            uint         addr         = InputFormRef.IDToAddr(cid);

            if (addr == U.NOT_FOUND)
            {
                return(false);
            }

            uint flag2 = Program.ROM.u8(addr + 41);

            return((flag2 & 0x20) == 0x20);
        }
Exemple #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));
                }
            }
        }