Esempio n. 1
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);
                }
            }
        }
Esempio n. 2
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            InputFormRef ifr;

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

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

            ifr = Init(null);
            Debug.Assert(ifr.BlockSize == g_ICON_LIST_SIZE);
            if (ifr.BlockSize == 20)
            {//sizeof(20)
                FEBuilderGBA.Address.AddAddress(list, ifr, "SkillConfigFE8NVer2", new uint[] { 4, 8, 12, 16 });
            }
            else
            {//sizeof(16)
                FEBuilderGBA.Address.AddAddress(list, ifr, "SkillConfigFE8NVer2", new uint[] { 4, 8, 12 });
            }

            if (g_AnimeBaseAddress != 0)
            {
                uint anime = Program.ROM.p32(g_AnimeBaseAddress);
                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;
                    }
                    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);
                }
            }

            {
                InputFormRef ifr_n1 = N1_Init(null);
                InputFormRef ifr_n2 = N2_Init(null);
                InputFormRef ifr_n3 = N3_Init(null);
                InputFormRef ifr_n4 = null;
                if (g_ICON_LIST_SIZE >= 20)
                {
                    ifr_n4 = N4_Init(null);
                }
                uint icondatacount = (2 * 8 * 2 * 8) / 2; // /2しているのは16色のため

                uint icon = Program.ROM.p32(g_SkillBaseAddress);
                uint addr = ifr.BaseAddress;
                for (uint i = 0; i < ifr.DataCount;
                     i++, addr += ifr.BlockSize, icon += icondatacount)
                {
                    if (!U.isSafetyOffset(addr))
                    {
                        break;
                    }
                    ifr_n1.ReInitPointer(addr + 4);
                    ifr_n2.ReInitPointer(addr + 8);
                    ifr_n3.ReInitPointer(addr + 12);

                    FEBuilderGBA.Address.AddAddress(list, ifr_n1
                                                    , "SkillUnit:" + U.To0xHexString(i)
                                                    , new uint[] {});
                    FEBuilderGBA.Address.AddAddress(list, ifr_n2
                                                    , "SkillClass:" + U.To0xHexString(i)
                                                    , new uint[] { });
                    FEBuilderGBA.Address.AddAddress(list, ifr_n3
                                                    , "SkillItem:" + U.To0xHexString(i)
                                                    , new uint[] { });

                    FEBuilderGBA.Address.AddAddress(list, icon
                                                    , icondatacount
                                                    , U.NOT_FOUND
                                                    , "SkillIcon:" + U.To0xHexString(i)
                                                    , FEBuilderGBA.Address.DataTypeEnum.IMG);

                    if (ifr_n4 != null)
                    {
                        ifr_n4.ReInitPointer(addr + 16);
                        FEBuilderGBA.Address.AddAddress(list, ifr_n4
                                                        , "SkillItem2:" + U.To0xHexString(i)
                                                        , new uint[] { });
                    }
                }
            }
        }