Пример #1
0
        private void UnitForm_Load(object sender, EventArgs e)
        {
            List <Control> controls = InputFormRef.GetAllControls(this);

            X_Tooltip = InputFormRef.GetToolTip <UnitForm>();
            InputFormRef.LoadCheckboxesResource(U.ConfigDataFilename("unitclass_checkbox_"), controls, X_Tooltip, "", "L_40_BIT_", "L_41_BIT_", "L_42_BIT_", "L_43_BIT_");

            if (Program.ROM.RomInfo.version() == 8)
            {//FE8の場合
                //スキル
                X_SkillType = PatchUtil.SearchSkillSystem();
                if (X_SkillType == PatchUtil.skill_system_enum.SkillSystem ||
                    X_SkillType == PatchUtil.skill_system_enum.FE8N_ver2
                    )
                {
                    InputFormRef.markupJumpLabel(this.X_UNITSKILL);
                    this.X_UNITSKILL.Show();
                    this.X_SkillButtons = new Button[] { X_SKILL_BUTTON1, X_SKILL_BUTTON2, X_SKILL_BUTTON3, X_SKILL_BUTTON4, X_SKILL_BUTTON5, X_SKILL_BUTTON6, X_SKILL_BUTTON7, X_SKILL_BUTTON8, X_SKILL_BUTTON9 };
                    for (int i = 0; i < this.X_SkillButtons.Length; i++)
                    {
                        this.X_SkillButtons[i].Click += X_UNITSKILL_Button_Click;
                    }
                }

                //魔法分離パッチ
                MagicSplitUtil.magic_split_enum magic_split = MagicSplitUtil.SearchMagicSplit();
                if (magic_split == MagicSplitUtil.magic_split_enum.FE8NMAGIC)
                {
                    InitFE8NMagicExtends(controls);
                }
            }
        }
Пример #2
0
 bool IsFE8NSkillNoSyo()
 {
     if (Program.ROM.RomInfo.version() != 8)
     {
         return(false);
     }
     if (B30.Value != 0x2e)
     {//メティスの書でなければボツ
         return(false);
     }
     if (B6.Value < 0x25)
     {//0x25未満ならばボツ
         return(false);
     }
     if (Program.ROM.u32(0x28846) != 0x4B0046C0)
     {//スキルの書のパッチが当たっていない
         return(false);
     }
     PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
     if (skill == FEBuilderGBA.PatchUtil.skill_system_enum.FE8N_ver2 ||
         skill == FEBuilderGBA.PatchUtil.skill_system_enum.FE8N_ver3)
     {
         return(true);
     }
     return(false);
 }
Пример #3
0
        private void SkillAssignmentClassButton_Click(object sender, EventArgs e)
        {
            if (PatchUtil.skill_system_enum.NO == PatchUtil.SearchSkillSystem())
            {
                HowDoYouLikePatchForm.CheckAndShowPopupDialog(HowDoYouLikePatchForm.TYPE.Anti_Huffman_By_Translate);
                HowDoYouLikePatchForm.CheckAndShowPopupDialog(HowDoYouLikePatchForm.TYPE.Skill);
            }

            PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
            if (skill == PatchUtil.skill_system_enum.SkillSystem)
            {
                InputFormRef.JumpForm <SkillAssignmentClassSkillSystemForm>();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver2)
            {
                InputFormRef.JumpForm <SkillConfigFE8NVer2SkillForm>();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N ||
                     skill == PatchUtil.skill_system_enum.yugudora)
            {
                //NOP
                R.ShowStopError(R._("この機能は、FE8NVer2からのみ利用できます。"));
            }
            else
            {
                R.ShowStopError(R._("スキル拡張がありません。\r\nスキル拡張パッチをインストールしてから利用してください。"));
            }
        }
Пример #4
0
        private void SkillConfigButton_Click(object sender, EventArgs e)
        {
            if (PatchUtil.skill_system_enum.NO == PatchUtil.SearchSkillSystem())
            {
                HowDoYouLikePatchForm.CheckAndShowPopupDialog(HowDoYouLikePatchForm.TYPE.Skill);
            }

            PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
            if (skill == PatchUtil.skill_system_enum.SkillSystem)
            {
                InputFormRef.JumpForm <SkillConfigSkillSystemForm>();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N ||
                     skill == PatchUtil.skill_system_enum.yugudora ||
                     skill == PatchUtil.skill_system_enum.FE8N_ver2
                     )
            {
                InputFormRef.JumpForm <SkillConfigFE8NSkillForm>();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver3)
            {
            }
            else
            {
                R.ShowStopError(R._("スキル拡張がありません。\r\nスキル拡張パッチをインストールしてから利用してください。"));
            }
        }
Пример #5
0
        public static void ExportExtraMenu(string filename)
        {
            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }
            StringBuilder sb = new StringBuilder();
            uint          addr;

            uint[] menus =
            {
                0x4F, 0xF00,                //全預け+ Give All+
                0x63, 0xF75,                //特殊
                0x6B, 0x6BF,                //待機
            };
            for (int i = 0; i < menus.Length; i += 2)
            {
                uint menuid = menus[i + 0];
                uint helpid = menus[i + 1];

                addr = MenuCommandForm.SearchMenuUnitOrGame(menuid, helpid);
                if (addr != U.NOT_FOUND)
                {
                    byte[] bin = Program.ROM.getBinaryData(addr, MenuCommandForm.MENU_SIZE);
                    sb.AppendLine(U.HexsToString(bin));
                }
            }
            File.WriteAllText(filename, sb.ToString());
        }
        public SkillConfigFE8NSkillForm()
        {
            InitializeComponent();
            this.AddressList.OwnerDraw(DrawSkillAndText, DrawMode.OwnerDrawFixed);

            PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
            if (skill == PatchUtil.skill_system_enum.FE8N ||
                skill == PatchUtil.skill_system_enum.yugudora)
            {
                this.Pointers = FindSkillFE8NVer1IconPointers();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver2)
            {
                this.Pointers = SkillConfigFE8NVer2SkillForm.FindSkillFE8NVer2IconPointers();
            }
            else
            {
                return;
            }

            this.InputFormRef = Init(this);
            this.InputFormRef.MakeGeneralAddressListContextMenu(true);
            this.InputFormRef.CheckProtectionPaddingALIGN4 = false;

            this.FilterComboBox.BeginUpdate();
            for (int i = 0; i < this.Pointers.Length; i++)
            {
                uint p = Program.ROM.p32(this.Pointers[i]);
                this.FilterComboBox.Items.Add(U.ToHexString(p));
            }
            this.FilterComboBox.EndUpdate();
            this.FilterComboBox.SelectedIndex = 0;
        }
Пример #7
0
 //FE8U Item Skill
 bool IsFE8UItemSkill()
 {
     if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
     {
         return(false);
     }
     return(true);
 }
Пример #8
0
 private void J_33_Click(object sender, EventArgs e)
 {
     if (PatchUtil.SearchSkillSystem() == PatchUtil.skill_system_enum.SkillSystem)
     {
         PatchForm f = (PatchForm)InputFormRef.JumpForm <PatchForm>();
         f.JumpTo("defWeaponDebuffsTable", 0, PatchForm.SortEnum.SortName);
     }
 }
        //全データの取得
        public static void MakeAllDataLength(List <Address> list)
        {
            InputFormRef InputFormRef;

            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }

            {
                uint iconP          = SkillConfigSkillSystemForm.FindIconPointer();
                uint textP          = SkillConfigSkillSystemForm.FindTextPointer();
                uint assignClassP   = SkillConfigSkillSystemForm.FindAssignClassSkillPointer();
                uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer();

                if (iconP == U.NOT_FOUND)
                {
                    return;
                }
                if (textP == U.NOT_FOUND)
                {
                    return;
                }
                if (assignClassP == U.NOT_FOUND)
                {
                    return;
                }
                if (assignLevelUpP == U.NOT_FOUND)
                {
                    return;
                }

                InputFormRef = Init(null, assignClassP);
                FEBuilderGBA.Address.AddAddress(list, InputFormRef, "SkillAssignmentClassSkillSystem", new uint[] { });

                Dictionary <uint, string> skillNames = new Dictionary <uint, string>();
                InputFormRef N1_InputFormRef         = N1_Init(null, skillNames);

                uint assignLevelUpAddr = Program.ROM.p32(assignLevelUpP);
                for (uint i = 0; i < InputFormRef.DataCount; i++, assignLevelUpAddr += 4)
                {
                    if (!U.isSafetyOffset(assignLevelUpAddr))
                    {
                        break;
                    }

                    uint levelupList = Program.ROM.p32(assignLevelUpAddr);
                    if (!U.isSafetyOffset(levelupList))
                    {
                        continue;
                    }

                    N1_InputFormRef.ReInitPointer(assignLevelUpAddr);
                    FEBuilderGBA.Address.AddAddress(list, N1_InputFormRef, "SkillAssignmentClassSkillSystem.Levelup" + i, new uint[] { });
                }
            }
        }
Пример #10
0
        private void ClassForm_Load(object sender, EventArgs e)
        {
            List <Control> controls = InputFormRef.GetAllControls(this);

            this.X_Tooltip = InputFormRef.GetToolTip <ClassForm>();
            InputFormRef.LoadCheckboxesResource("unitclass_checkbox_", controls, this.X_Tooltip, "", "L_40_BIT_", "L_41_BIT_", "L_42_BIT_", "L_43_BIT_");

            if (Program.ROM.RomInfo.version == 8)
            {//FE8の場合、分岐CCへ
                InputFormRef.markupJumpLabel(this.J_5);

                //スキル
                this.X_SkillType = PatchUtil.SearchSkillSystem();
                if (this.X_SkillType == PatchUtil.skill_system_enum.SkillSystem ||
                    this.X_SkillType == PatchUtil.skill_system_enum.FE8N_ver2 ||
                    this.X_SkillType == PatchUtil.skill_system_enum.FE8N_ver3
                    )
                {
                    InputFormRef.markupJumpLabel(this.X_CLASSSKILL);
                    this.X_CLASSSKILL.Show();
                    this.X_SkillButtons = new Button[] { X_SKILL_BUTTON1, X_SKILL_BUTTON2, X_SKILL_BUTTON3, X_SKILL_BUTTON4, X_SKILL_BUTTON5, X_SKILL_BUTTON6, X_SKILL_BUTTON7, X_SKILL_BUTTON8, X_SKILL_BUTTON9 };
                    for (int i = 0; i < this.X_SkillButtons.Length; i++)
                    {
                        this.X_SkillButtons[i].Click += X_CLASSSKILL_Button_Click;
                    }
                }
            }
            //魔法分離パッチ
            MagicSplitUtil.magic_split_enum magic_split = MagicSplitUtil.SearchMagicSplit();
            if (magic_split == MagicSplitUtil.magic_split_enum.FE8NMAGIC)
            {
                InitFE8NMagicExtends(controls);
            }
            else if (magic_split == MagicSplitUtil.magic_split_enum.FE7UMAGIC ||
                     magic_split == MagicSplitUtil.magic_split_enum.FE8UMAGIC)
            {
                InitFE7UMagicExtends(controls);
            }

            //クラス拡張を表示するかどうか
            if (ClassForm.IsShowClassExetdns(this.AddressList))
            {
                AddressListExpandsButton_255.Show();
            }
            else
            {
                this.AddressList.Height += AddressListExpandsButton_255.Height;
                AddressListExpandsButton_255.Hide();
            }

            //SkillSystemsによる 特効リワーク
            InitFE8ClassType(controls);

            this.AddressList.Focus();
        }
        public static void MakeCheckError(List <FELint.ErrorSt> errors)
        {
            InputFormRef InputFormRef;

            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }

            {
                uint assignUnitP = SkillConfigSkillSystemForm.FindAssignPersonalSkillPointer();
                if (assignUnitP == U.NOT_FOUND)
                {
                    return;
                }
                InputFormRef = Init(null, assignUnitP);

                uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignUnitLevelUpSkillPointer();
                if (assignLevelUpP == U.NOT_FOUND)
                {
                    return;
                }

                Dictionary <uint, string> skillNames = new Dictionary <uint, string>();
                InputFormRef N1_InputFormRef         = N1_Init(null, skillNames);

                uint assignLevelUpAddr = Program.ROM.p32(assignLevelUpP);
                for (uint i = 0; i < InputFormRef.DataCount; i++, assignLevelUpAddr += 4)
                {
                    if (!U.isSafetyOffset(assignLevelUpAddr))
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.SKILL_UNIT, assignLevelUpAddr, R._("Skillのユニット割り当てが(UnitID: {0})までで、途中で終わってしまいました。", U.To0xHexString(i)), i));
                        break;
                    }

                    uint levelupList = Program.ROM.u32(assignLevelUpAddr);
                    if (levelupList == 0)
                    {//empty
                        continue;
                    }
                    else if (!U.isSafetyPointer(levelupList))
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.SKILL_UNIT, assignLevelUpAddr, R._("Skillのユニット割り当て(UnitID: {0})のデータポインタ({1})が壊れています。\r\nこのユニットをLOADする時に無限ループが発生する可能性があります。\r\n正しいアドレスを入力するか、0に設定してください。", U.To0xHexString(i), U.To0xHexString(levelupList)), i));
                        continue;
                    }

                    N1_InputFormRef.ReInitPointer(assignLevelUpAddr);
                    if (N1_InputFormRef.DataCount >= 20)
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.SKILL_UNIT, assignLevelUpAddr, R._("Skillのユニット割り当て(UnitID: {0})のデータポインタ({1})には、大量の({2})個のデータが登録されています。\r\nアドレスが間違っていませんか?\r\n正しいアドレスを入力するか、0に設定してください。", U.To0xHexString(i), U.To0xHexString(levelupList), N1_InputFormRef.DataCount), i));
                        continue;
                    }
                }
            }
        }
        public static void MakeCheckError(List <FELint.ErrorSt> errors)
        {
            PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
            if (skill != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }

            InputFormRef ifr;
            uint         baseiconP  = FindIconPointer();
            uint         basetextP  = FindTextPointer();
            uint         baseanimeP = FindAnimePointer();

            if (baseiconP == U.NOT_FOUND)
            {
                return;
            }
            if (basetextP == U.NOT_FOUND)
            {
                return;
            }
            if (baseanimeP == U.NOT_FOUND)
            {
                return;
            }
            ifr = Init(null, basetextP);
            uint skill_addr = ifr.BaseAddress;

            for (uint i = 0; i < ifr.DataCount; i++, skill_addr += ifr.BlockSize)
            {
                uint name = Program.ROM.u16(skill_addr + 0);
                if (name == 0 || name == 0xFFFF)
                {
                    continue;
                }
                FELint.CheckText(name, "DETAIL3", errors, FELint.Type.SKILL_CONFIG, skill_addr, i);
            }

            uint anime = Program.ROM.p32(baseanimeP);

            for (uint i = 0; i < ifr.DataCount; i++, anime += 4)
            {
                if (!U.isSafetyOffset(anime))
                {
                    break;
                }
                uint addr = Program.ROM.p32(anime);
                if (!U.isSafetyOffset(addr))
                {
                    continue;
                }
                ImageUtilSkillSystemsAnimeCreator.MakeCheckError(errors, addr, i);
            }
        }
Пример #13
0
        public ItemForm()
        {
            InitializeComponent();

            this.AddressList.OwnerDraw(ListBoxEx.DrawItemAndText, DrawMode.OwnerDrawFixed);

            if (PatchUtil.SearchClassType() == PatchUtil.class_type_enum.SkillSystems_Rework)
            {//SkillSystemsによる 特効リワーク
                this.CLASS_LISTBOX.OwnerDraw(ListBoxEx.DrawClassTypeAndText, DrawMode.OwnerDrawFixed);
            }
            else
            {
                this.CLASS_LISTBOX.OwnerDraw(ListBoxEx.DrawClassAndText, DrawMode.OwnerDrawFixed);
                this.CLASS_LISTBOX.ItemListToJumpForm("CLASS");
            }

            PatchUtil.ItemUsingExtends itemUsingExtends = PatchUtil.ItemUsingExtendsPatch();
            if (itemUsingExtends == PatchUtil.ItemUsingExtends.IER)
            {
                J_34.Text = "IER Byte";
                J_34.AccessibleDescription = R._("IERによって参照される値です。\r\nアイテムに応じて役割が変わります。");
                X_34_Info.Show();
            }
            else
            {
                //growth mod
                PatchUtil.growth_mod_enum growthmod = PatchUtil.SearchGrowsMod();
                if (growthmod == PatchUtil.growth_mod_enum.SkillSystems ||
                    growthmod == PatchUtil.growth_mod_enum.Vennou)
                {
                    J_34.Text = "Growth_Mod";
                    J_34.AccessibleDescription = "この拡張は、通常のstatboosterよりも大きいデータを必要とします。\r\nこの拡張フラグを1に設定した後で、statbooster領域を確保してください。\r\n既に確保している場合は、statboosterアドレスを0に設定して再確保してください。";
                }
            }

            if (PatchUtil.SearchSkillSystem() == PatchUtil.skill_system_enum.SkillSystem)
            {
                J_33.Text = "Debuff";
                J_34.AccessibleDescription = "SkillSystemsのDebuffsの値を設定します。\r\n0の場合はDebuffsはありません。\r\n1以降の場合、利用したいDebuffsTableの値を設定します。\r\nDebuffsTableの値はPatchから設定可能です。";
                InputFormRef.markupJumpLabel(J_33);
            }

            this.InputFormRef = Init(this);
            this.InputFormRef.UseWriteProtectionID00 = true; //ID:0x00を書き込み禁止
            this.InputFormRef.MakeGeneralAddressListContextMenu(true);

            InputFormRef.LoadComboResource(L_30_COMBO, g_item_staff_use_effect_List);
            InputFormRef.LoadComboResource(L_31_COMBO, g_item_weapon_effect_List);

            InputFormRef.markupJumpLabel(JumpToITEMEFFECT);
            InputFormRef.markupJumpLabel(HardCodingWarningLabel);
        }
Пример #14
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            InputFormRef InputFormRef;

            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }

            {
                uint baseiconP  = FindIconPointer();
                uint basetextP  = FindTextPointer();
                uint baseanimeP = FindAnimePointer();

                if (baseiconP == U.NOT_FOUND)
                {
                    return;
                }
                if (basetextP == U.NOT_FOUND)
                {
                    return;
                }
                if (baseanimeP == U.NOT_FOUND)
                {
                    return;
                }
                InputFormRef = Init(null, basetextP);
                FEBuilderGBA.Address.AddAddress(list, InputFormRef, "SkillConfigSkillSystem", new uint[] { });

                uint anime = Program.ROM.p32(baseanimeP);
                for (uint i = 0; i < InputFormRef.DataCount; i++, anime += 4)
                {
                    if (!U.isSafetyOffset(anime))
                    {
                        break;
                    }
                    uint addr = Program.ROM.p32(anime);
                    if (!U.isSafetyOffset(addr))
                    {
                        continue;
                    }
                    string name = "SkillAnime:" + U.To0xHexString(i) + " ";
                    FEBuilderGBA.Address.AddAddress(list, addr, 0, anime, name, FEBuilderGBA.Address.DataTypeEnum.POINTER);

                    ImageUtilSkillSystemsAnimeCreator.RecycleOldAnime(ref list
                                                                      , name
                                                                      , isPointerOnly
                                                                      , addr);
                }
            }
        }
Пример #15
0
 public static uint GetLevelMaxCaps()
 {
     if (g_LevelMaxCaps == NO_CACHE)
     {
         if (PatchUtil.SearchSkillSystem() == PatchUtil.skill_system_enum.SkillSystem)
         {//不明なので31とする
             g_LevelMaxCaps = 31;
         }
         else
         {
             g_LevelMaxCaps = Program.ROM.u8(Program.ROM.RomInfo.max_level_address());
         }
     }
     return(g_LevelMaxCaps);
 }
Пример #16
0
        static uint searchSkillSystemsSummonPlus1()
        {
            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return(U.NOT_FOUND);
            }

            byte[] need = new byte[] { 0xB6, 0x46, 0x00, 0xF8, 0x02, 0x1C, 0x00, 0x2A, 0x12, 0xD0, 0x10, 0x68, 0x00, 0x28, 0x0F, 0xD0, 0x00, 0x79, 0x29, 0x78, 0x88, 0x42, 0x0B, 0xD1, 0xD1, 0x68, 0x04, 0x48, 0x08, 0x40, 0x00, 0x28, 0xCC, 0xD1, 0xBE, 0xE7 };
            uint   addr = U.GrepEnd(Program.ROM.Data, need, Program.ROM.RomInfo.compress_image_borderline_address, 0, 4);

            if (addr == U.NOT_FOUND)
            {
//                R.ShowWarning("SkillSystemsがインストールされているのに、searchSkillSystemsSummonPlus1 に失敗しました。\r\n処理は続行しますが、うまく動作しない可能性があります。");
                return(U.NOT_FOUND);
            }
            return(addr);
        }
Пример #17
0
        static uint searchSkillSystemsSummonCount()
        {
            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return(U.NOT_FOUND);
            }

            byte[] need = new byte[] { 0x1D, 0xE0, 0x03, 0x20, 0x48, 0xE0, 0x00, 0x00, 0x50, 0x4E, 0x00, 0x03, 0xA5, 0x5C, 0x02, 0x08, 0x29, 0xFD, 0x04, 0x08, 0xFF, 0xFF, 0x00, 0x00, 0x30, 0x95, 0x00, 0x09, 0x0B, 0x48, 0x01, 0x40, 0xD1, 0x60, 0x38, 0xE0, 0x01, 0x32 };
            uint   addr = U.GrepEnd(Program.ROM.Data, need, Program.ROM.RomInfo.compress_image_borderline_address, 0, 4);

            if (addr == U.NOT_FOUND)
            {
//                R.ShowWarning("SkillSystemsがインストールされているのに、searchSkillSystemsSummonCount に失敗しました。\r\n処理は続行しますが、うまく動作しない可能性があります。");
                return(U.NOT_FOUND);
            }
            return(addr);
        }
Пример #18
0
        //テキストの取得
        public static void MakeTextIDArray(List <UseTextID> list)
        {
            InputFormRef ifr;

            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }

            {
                uint basetextP = FindTextPointer();
                if (basetextP == U.NOT_FOUND)
                {
                    return;
                }
                ifr = Init(null, basetextP);
                UseTextID.AppendTextID(list, FELint.Type.SKILL_CONFIG, ifr, new uint[] { 0 });
            }
        }
Пример #19
0
 public static string GetSkillName(uint skillid)
 {
     if (Program.ROM.RomInfo.version() != 8)
     {
         return("");
     }
     PatchUtil.skill_system_enum skillsystem = PatchUtil.SearchSkillSystem();
     if (skillsystem == PatchUtil.skill_system_enum.SkillSystem)
     {
         string name = SkillConfigSkillSystemForm.GetSkillName(skillid);
         return(name);
     }
     else if (skillsystem == PatchUtil.skill_system_enum.FE8N_ver2)
     {
         string name = SkillConfigFE8NVer2SkillForm.GetSkillText(skillid);
         return(name);
     }
     return("");
 }
Пример #20
0
 public static Bitmap DrawIcon(uint skillid)
 {
     if (Program.ROM.RomInfo.version() != 8)
     {
         return(ImageUtil.BlankDummy());
     }
     PatchUtil.skill_system_enum skillsystem = PatchUtil.SearchSkillSystem();
     if (skillsystem == PatchUtil.skill_system_enum.SkillSystem)
     {
         Bitmap bitmap = SkillConfigSkillSystemForm.DrawSkillIcon(skillid);
         return(bitmap);
     }
     else if (skillsystem == PatchUtil.skill_system_enum.FE8N_ver2)
     {
         Bitmap bitmap = SkillConfigFE8NVer2SkillForm.DrawSkillIcon(skillid);
         return(bitmap);
     }
     return(ImageUtil.BlankDummy());
 }
        //全データの取得
        public static void MakeAllDataLength(List <Address> list)
        {
            uint[] pointer;

            PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
            if (skill == PatchUtil.skill_system_enum.FE8N ||
                skill == PatchUtil.skill_system_enum.yugudora)
            {
                pointer = FindSkillFE8NVer1IconPointers();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver3)
            {//ver3では利用しません
                return;
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver2)
            {
                pointer = SkillConfigFE8NVer2SkillForm.FindSkillFE8NVer2IconPointers();
            }
            else
            {
                return;
            }

            if (pointer == null)
            {
                return;
            }

            InputFormRef ifr = Init(null);

            for (int i = 0; i < pointer.Length; i++)
            {
                ifr.ReInitPointer(pointer[i]);
                if (ifr.DataCount <= 0)
                {
                    continue;
                }
                FEBuilderGBA.Address.AddAddress(list, ifr
                                                , "SkillConfigFE8N" + U.ToHexString(i)
                                                , new uint[] { });
            }
        }
Пример #22
0
        public static void ImportExtraMenu(string filename)
        {
            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem)
            {
                return;
            }
            if (!File.Exists(filename))
            {
                return;
            }
            Undo.UndoData undodata = Program.Undo.NewUndoData("ImportExtraMenu");
            string[]      lines    = File.ReadAllLines(filename);
            foreach (string line in lines)
            {
                byte[] bin = U.StringToHexs(line);
                if (bin.Length < MenuCommandForm.MENU_SIZE)
                {
                    continue;
                }
                uint menuID = U.u8(bin, 0x9);
                uint helpID = U.u16(bin, 0x6);
                uint addr   = MenuCommandForm.SearchMenuUnitOrGame(menuID, helpID);
                if (addr != U.NOT_FOUND)
                {
                    if (menuID == 0x6B && helpID == 0x6BF)
                    {//wait
                        Program.ROM.write_range(addr, bin, undodata);
                    }
                    continue;
                }
                //空き部分に追加.
                addr = MenuCommandForm.SearchMenuUnitOrGame(0x0, 0x0);
                if (addr == U.NOT_FOUND)
                {//空きがない
                    continue;
                }
                Program.ROM.write_range(addr, bin, undodata);
            }
            Program.Undo.Push(undodata);

            CopySubMenu();
        }
Пример #23
0
        public static void AppendSkillSystemsSanctuary(List <Address> list)
        {
            if (Program.ROM.RomInfo.version() == 8)
            {
                PatchUtil.skill_system_enum skillsystem = PatchUtil.SearchSkillSystem();
                if (skillsystem == PatchUtil.skill_system_enum.NO)
                {//SkillSystemsをインストールしていない
                    return;
                }

                if (Program.ROM.RomInfo.is_multibyte())
                {//F00000 - F90000
                    list.Add(new Address(0xF00000, 0xF90000 - 0xF00000, U.NOT_FOUND, "SkillSystemsSanctuary", Address.DataTypeEnum.BIN));
                }
                else
                {//1c1ec0 - C00000
                    list.Add(new Address(0x1c1ec0, 0xB88560 - 0x1c1ec0, U.NOT_FOUND, "SkillSystemsSanctuary", Address.DataTypeEnum.BIN));
                }
            }
        }
Пример #24
0
 private void B21_ValueChanged(object sender, EventArgs e)
 {
     if (IsFE8NSkillNoSyo())
     {//FE8NVer2のスキルの書
         uint skillid = (uint)B21.Value;
         PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
         if (skill == FEBuilderGBA.PatchUtil.skill_system_enum.FE8N_ver3)
         {
             SKILLICON.Image = SkillConfigFE8NVer3SkillForm.DrawSkillIcon(skillid);
             SKILLNAME.Text  = SkillConfigFE8NVer3SkillForm.GetSkillText(skillid);
         }
         else
         {
             SKILLICON.Image = SkillConfigFE8NVer2SkillForm.DrawSkillIcon(skillid);
             SKILLNAME.Text  = SkillConfigFE8NVer2SkillForm.GetSkillText(skillid);
         }
         SKILLICON.Visible = true;
         SKILLNAME.Visible = true;
     }
 }
Пример #25
0
        void FixedButton()
        {
            if (!Program.ROM.RomInfo.is_multibyte())
            {//クラスの英語表記で別設定があるのは日本語版だけ
                OPClassAlphaNameButton.Hide();
//                FE8SpellMenuExtendsButton.Show();
            }
            else
            {//日本語版
                //FE8Nのスキル割り当てはユニットの??領域を使うので専用画面は不要.
                SkillAssignmentUnitButton.Hide();
                FE8SpellMenuExtendsButton.Hide();
                ToolCustomBuildButton.Hide();

                PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
                if (skill == PatchUtil.skill_system_enum.FE8N_ver3)
                {
                    SkillConfigButton.Hide();
                }
            }
        }
        //テキストの取得
        public static void MakeVarsIDArray(List <UseValsID> list)
        {
            uint[] pointer;

            PatchUtil.skill_system_enum skill = PatchUtil.SearchSkillSystem();
            if (skill == PatchUtil.skill_system_enum.FE8N ||
                skill == PatchUtil.skill_system_enum.yugudora)
            {
                pointer = FindSkillFE8NVer1IconPointers();
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver3)
            {//ver3では利用しません
                return;
            }
            else if (skill == PatchUtil.skill_system_enum.FE8N_ver2)
            {
                pointer = SkillConfigFE8NVer2SkillForm.FindSkillFE8NVer2IconPointers();
            }
            else
            {
                return;
            }

            if (pointer == null)
            {
                return;
            }

            InputFormRef ifr = Init(null);

            for (int i = 0; i < pointer.Length; i++)
            {
                ifr.ReInitPointer(pointer[i]);
                if (ifr.DataCount <= 0)
                {
                    continue;
                }
                UseValsID.AppendTextID(list, FELint.Type.SKILL_CONFIG, ifr, new uint[] { 2 });
            }
        }
Пример #27
0
        //SkillSystems Reserve
        public static bool IsSkillReserve(ref uint addr)
        {
            if (Program.ROM.RomInfo.version() != 8)
            {
                return(false);
            }

            OptionForm.skillsystems_sanctuary_option_enum skillsystems_sanctuary_option = OptionForm.skillsystems_sanctuary_option();
            if (skillsystems_sanctuary_option == OptionForm.skillsystems_sanctuary_option_enum.None)
            {
                return(false);
            }
            else if (skillsystems_sanctuary_option == OptionForm.skillsystems_sanctuary_option_enum.IfSkillSystemsInstalled)
            {
                PatchUtil.skill_system_enum skillsystem = PatchUtil.SearchSkillSystem();
                if (skillsystem == PatchUtil.skill_system_enum.NO)
                {//SkillSystemsをインストールしていない
                    return(false);
                }
            }

            if (Program.ROM.RomInfo.is_multibyte())
            {//F00000 - F90000
                if (addr >= 0xF00000 && addr < 0xF90000)
                {
                    addr = 0xF90000;
                    return(true);
                }
            }
            else
            {//1c1ec0 - C00000
                if (addr >= 0x1c1ec0 && addr < 0xB88560)
                {
                    addr = 0xB88560;
                    return(true);
                }
            }
            return(false);
        }
Пример #28
0
        //テキストの取得
        public static void MakeTextIDArray(List <UseTextID> list)
        {
            InputFormRef ifr;

            if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.FE8N_ver2)
            {
                return;
            }

            uint[] pointer = FindSkillFE8NVer2IconPointers();
            if (pointer == null)
            {
                return;
            }
            if (g_SkillBaseAddress == 0)
            {
                return;
            }

            ifr = Init(null);
            UseTextID.AppendTextID(list, FELint.Type.SKILL_CONFIG, ifr, new uint[] { 0 });
        }
Пример #29
0
        void FE8UPassiveItem(ToolTipEx tooltip)
        {
            if (Program.ROM.RomInfo.version() != 8)
            {
                return;
            }
            if (Program.ROM.RomInfo.is_multibyte())
            {//FE8J
            }
            else
            {//FE8U
                if (PatchUtil.SearchSkillSystem() == PatchUtil.skill_system_enum.SkillSystem)
                {
                    string hint;
                    L_10_BIT_40.Text = "DoubleWeaponTriangle";
                    hint             = R._("武器の3すくみを2倍にします。");
                    tooltip.SetToolTip(L_10_BIT_40, hint);

                    L_10_BIT_80.Text = "PassiveBoosts";
                    hint             = R._("もっているだけでStatBoosterで指定した補正値を得られるアイテムになります。");
                    tooltip.SetToolTip(L_10_BIT_80, hint);
                }
            }
        }
        private void ToolCustomBuildForm_Load(object sender, EventArgs e)
        {
            if (Program.ROM.RomInfo.version != 8)
            {
                this.Close();
                return;
            }
            PatchUtil.skill_system_enum skill_system = PatchUtil.SearchSkillSystem();
            if (skill_system != PatchUtil.skill_system_enum.SkillSystem)
            {
                R.ShowStopError("SkillSystemsがインストールされていません。");

                this.Close();
                return;
            }

            {
                String dir             = Path.GetDirectoryName(Program.ROM.Filename);
                string orignal_romfile = MainFormUtil.FindOrignalROM(dir);
                this.OrignalROMTextArea.Text = orignal_romfile;
            }
            this.Explain.Text +=
                "https://dw.ngmansion.xyz/doku.php?id=en:en:guide:febuildergba:skillsystems_custombuild"; ///No Translate
        }