//全データの取得 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); } } }
//全データの取得 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[] { }); } } } }