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); }
//上位クラスかどうかの判定 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)); }
//ロードユニットフラグの確認 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); }
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)); } } }