예제 #1
0
        public static int MakeClassSkillButtons(uint cid, Button[] buttons, ToolTipEx tooltip)
        {
            uint[] pointer = FindSkillFE8NVer2IconPointers();
            if (pointer == null)
            {
                return(0);
            }
            if (pointer.Length < 5)
            {
                return(0);
            }

            InputFormRef InputFormRef    = Init(null, pointer[4]);
            InputFormRef N2_InputFormRef = N2_Init(null);

            int skillCount           = 0;
            List <U.AddrResult> list = InputFormRef.MakeList();

            for (int i = 1; i < list.Count; i++)
            {
                uint classAddr = Program.ROM.p32(list[i].addr + 8);
                if (!U.isSafetyOffset(classAddr))
                {
                    continue;
                }

                bool found = false;
                N2_InputFormRef.ReInit(classAddr);
                List <U.AddrResult> classList = N2_InputFormRef.MakeList();
                for (int n = 0; n < classList.Count; n++)
                {
                    uint classID = Program.ROM.u8(classList[n].addr);
                    if (cid == classID)
                    {
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    continue;
                }

                uint textid = Program.ROM.u16(list[i].addr + 0);

                buttons[skillCount].BackgroundImage = DrawSkillIconLow((uint)i, pointer[4]);
                buttons[skillCount].Tag             = (uint)i;
                tooltip.SetToolTipOverraide(buttons[skillCount], TextForm.Direct(textid));
                skillCount++;
                if (skillCount >= buttons.Length)
                {
                    break;
                }
            }

            return(skillCount);
        }
예제 #2
0
        public void ApplyFilter(string search, bool isJP, ToolTipEx tooltip)
        {
            this.LastSearchWord = search;
            if (search == "" || this.PatchButton.Visible)
            {
                this.PatchLabelName.Hide();
                for (int i = 0; i < Buttons.Length; i++)
                {
                    this.Buttons[i].Hide();
                }
                return;
            }
            if (Patchs == null)
            {
                Patchs = PatchForm.ScanPatch();
            }

            int foundCount = 0;

            for (int i = 0; i < this.Patchs.Length; i++)
            {
                PatchForm.PatchSt patch = this.Patchs[i];
                if (!U.StrStrEx(patch.SearchData, search, isJP))
                {//フィルターで消す.
                    continue;
                }
                Button b = Buttons[foundCount];
                b.Text = patch.Name;
                string info = U.at(patch.Param, "INFO");
                tooltip.SetToolTipOverraide(b, U.nl2br(info));
                b.Show();

                foundCount++;
                if (foundCount == 1)
                {//ボタンがあるならラベルも出す.
                    this.PatchLabelName.Show();
                }

                if (foundCount >= Buttons.Length)
                {
                    return;
                }
            }

            for (int n = foundCount; n < Buttons.Length; n++)
            {
                Button b = Buttons[n];
                b.Hide();
            }
        }
예제 #3
0
        public static int MakeUnitSkillButtons(uint uid, Button[] buttons, ToolTipEx tooltip)
        {
            uint iconP       = SkillConfigSkillSystemForm.FindIconPointer();
            uint textP       = SkillConfigSkillSystemForm.FindTextPointer();
            uint assignUnitP = SkillConfigSkillSystemForm.FindAssignPersonalSkillPointer();

            if (iconP == U.NOT_FOUND)
            {
                return(0);
            }
            if (textP == U.NOT_FOUND)
            {
                return(0);
            }
            if (assignUnitP == U.NOT_FOUND)
            {
                return(0);
            }


            InputFormRef        InputFormRef = Init(null, assignUnitP);
            List <U.AddrResult> list         = InputFormRef.MakeList();

            if (uid < 0 || uid >= list.Count)
            {
                return(0);
            }

            uint classaddr = list[(int)uid].addr;

            if (!U.isSafetyOffset(classaddr))
            {
                return(0);
            }
            uint b0 = Program.ROM.u8(classaddr);

            if (b0 <= 0)
            {
                return(0);
            }

            uint icon = Program.ROM.p32(iconP);
            uint text = Program.ROM.p32(textP);

            int skillCount = 0;

            {
                Bitmap bitmap = SkillConfigSkillSystemForm.DrawIcon((uint)b0, icon);
                U.MakeTransparent(bitmap);
                buttons[0].BackgroundImage = bitmap;
                buttons[0].Tag             = b0;

                string skillCaption = SkillConfigSkillSystemForm.GetSkillText((uint)b0, text);
                tooltip.SetToolTipOverraide(buttons[skillCount], skillCaption);
            }
            skillCount++;


            //レベルアップで覚えるスキル.
            Dictionary <uint, string> skillNames = new Dictionary <uint, string>();
            InputFormRef N1_InputFormRef         = N1_Init(null, skillNames);

            uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignUnitLevelUpSkillPointer();

            if (assignLevelUpP == U.NOT_FOUND)
            {//昔のバージョンには、存在しなかった
                return(skillCount);
            }

            SkillAssignmentClassSkillSystemForm.MakeUnitSkillButtonsList(uid, buttons, tooltip, assignLevelUpP, icon, text, skillCount);
            return(skillCount);
        }
예제 #4
0
        public static int MakeUnitSkillButtonsList(uint id, Button[] buttons, ToolTipEx tooltip, uint assignLevelUpP, uint icon, uint text, int skillCount)
        {
            uint assignLevelUp = Program.ROM.p32(assignLevelUpP);

            if (!U.isSafetyOffset(assignLevelUp))
            {
                return(skillCount);
            }

            uint assignLevelUpAddr = assignLevelUp + (id * 4);

            if (!U.isSafetyOffset(assignLevelUpAddr))
            {
                return(skillCount);
            }

            uint levelupList = Program.ROM.p32(assignLevelUpAddr);

            if (!U.isSafetyOffset(levelupList))
            {
                return(skillCount);
            }

            //レベルアップで覚えるスキル.
            Dictionary <uint, string> skillNames = new Dictionary <uint, string>();
            InputFormRef N1_InputFormRef         = N1_Init(null, skillNames);

            N1_InputFormRef.ReInit(levelupList);

            List <U.AddrResult> levelupSkillList = N1_InputFormRef.MakeList();

            for (int i = 0; i < levelupSkillList.Count; i++)
            {
                uint levelUpSkillAddr = levelupSkillList[i].addr;
                uint level            = Program.ROM.u8(levelUpSkillAddr + 0);
                uint skill            = Program.ROM.u8(levelUpSkillAddr + 1);

                if (skill <= 0)
                {
                    continue;
                }

                Bitmap bitmap = SkillConfigSkillSystemForm.DrawIcon(skill, icon);
                U.MakeTransparent(bitmap);
                buttons[skillCount].BackgroundImage = bitmap;
                buttons[skillCount].Tag             = skill;

                string skillCaption = SkillConfigSkillSystemForm.GetSkillText(skill, text);
                if (level > 0 && level < 0xFF)
                {
                    skillCaption = skillCaption + "\r\n" + R._("(Lv{0}で習得)", level);
                }
                tooltip.SetToolTipOverraide(buttons[skillCount], skillCaption);
                skillCount++;
                if (skillCount >= buttons.Length)
                {
                    break;
                }
            }
            return(skillCount);
        }
예제 #5
0
        public static int MakeClassSkillButtons(uint cid, Button[] buttons, ToolTipEx tooltip)
        {
            uint iconP          = SkillConfigSkillSystemForm.FindIconPointer();
            uint textP          = SkillConfigSkillSystemForm.FindTextPointer();
            uint assignClassP   = SkillConfigSkillSystemForm.FindAssignClassSkillPointer();
            uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer();

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

            InputFormRef        InputFormRef = Init(null, assignClassP);
            List <U.AddrResult> list         = InputFormRef.MakeList();

            if (cid >= list.Count)
            {
                return(0);
            }

            uint classaddr = list[(int)cid].addr;

            if (!U.isSafetyOffset(classaddr))
            {
                return(0);
            }

            uint icon          = Program.ROM.p32(iconP);
            uint text          = Program.ROM.p32(textP);
            uint assignLevelUp = Program.ROM.p32(assignLevelUpP);

            int  skillCount = 0;
            uint b0         = Program.ROM.u8(classaddr);

            if (b0 > 0)
            {//クラスの基本スキル.
                Bitmap bitmap = SkillConfigSkillSystemForm.DrawIcon((uint)b0, icon);
                U.MakeTransparent(bitmap);
                buttons[0].BackgroundImage = bitmap;
                buttons[0].Tag             = b0;

                string skillCaption = SkillConfigSkillSystemForm.GetSkillText((uint)b0, text);
                tooltip.SetToolTipOverraide(buttons[skillCount], skillCaption);
                skillCount++;
            }

            MakeUnitSkillButtonsList(cid, buttons, tooltip, assignLevelUpP, icon, text, skillCount);
            return(skillCount);
        }
예제 #6
0
        public static int MakeUnitSkillButtons(uint uid, Button[] buttons, ToolTipEx tooltip)
        {
            uint unitAddr = UnitForm.GetUnitAddr(uid - 1);

            if (unitAddr == U.NOT_FOUND)
            {
                return(0);
            }
            uint b38 = Program.ROM.u8(unitAddr + 38); //自軍
            uint b39 = Program.ROM.u8(unitAddr + 39); //友軍
            uint b49 = Program.ROM.u8(unitAddr + 49); //敵軍

            if (b38 <= 0 && b39 <= 0 && b49 <= 0)
            {//なし
                return(0);
            }

            uint[] pointer = FindSkillFE8NVer2IconPointers();
            if (pointer == null)
            {
                return(0);
            }
            if (pointer.Length < 5)
            {
                return(0);
            }

            InputFormRef InputFormRef    = Init(null, pointer[4]);
            InputFormRef N1_InputFormRef = N1_Init(null);

            int skillCount           = 0;
            List <U.AddrResult> list = InputFormRef.MakeList();

            for (int i = 1; i < list.Count; i++)
            {
                if (b38 == i || b39 == i || b49 == i)
                {
                    uint   textid = Program.ROM.u16(list[i].addr + 0);
                    string name   = TextForm.Direct(textid);

                    if (b38 == i)
                    {
                        name += "\r\n" + R._("(自軍時のみ)");
                    }
                    if (b39 == i)
                    {
                        name += "\r\n" + R._("(敵軍時のみ)");
                    }
                    if (b49 == i)
                    {
                        name += "\r\n" + R._("(友軍時のみ)");
                    }

                    buttons[skillCount].BackgroundImage = DrawSkillIconLow((uint)i, pointer[4]);
                    buttons[skillCount].Tag             = (uint)i;
                    tooltip.SetToolTipOverraide(buttons[skillCount], name);
                    skillCount++;
                    if (skillCount >= buttons.Length)
                    {
                        break;
                    }
                }
            }

            return(skillCount);
        }