//各種Plist一括取得. public static PLists GetMapPListsWhereAddr(uint addr) { PLists plists = new PLists(); if (!U.isSafetyOffset(addr)) { return(plists); } plists.obj_plist = (uint)Program.ROM.u16(addr + 4); plists.palette_plist = (uint)Program.ROM.u8(addr + 6); plists.config_plist = (uint)Program.ROM.u8(addr + 7); plists.mappointer_plist = (uint)Program.ROM.u8(addr + 8); plists.anime1_plist = (uint)Program.ROM.u8(addr + 9); plists.anime2_plist = (uint)Program.ROM.u8(addr + 10); plists.mapchange_plist = (uint)Program.ROM.u8(addr + 11); plists.event_plist = Program.ROM.u8(addr + Program.ROM.RomInfo.map_setting_event_plist_pos()); // //FE6だけ worldmapは plistなんだけど。。。 別ルーチンでやっているからいれないことにする. // plists.worldmapevent_plist = Program.ROM.u8(addr + Program.ROM.RomInfo.map_setting_worldmap_plist_pos()); //マップ第2パレット PatchUtil.MapSecondPalette_extends secondPalette = PatchUtil.SearchFlag0x28ToMapSecondPalettePatch(); if (secondPalette == PatchUtil.MapSecondPalette_extends.Flag0x28_146) { plists.palette2_plist = (uint)Program.ROM.u8(addr + 146); } else if (secondPalette == PatchUtil.MapSecondPalette_extends.Flag0x28_45) { plists.palette2_plist = (uint)Program.ROM.u8(addr + 45); } return(plists); }
//PLSITからマップIDを検索します. public static List <uint> GetMapIDsWherePlist(MapPointerForm.PLIST_TYPE type, uint plist) { Debug.Assert(plist >= 1); PatchUtil.MapSecondPalette_extends mapSecondPalette = PatchUtil.SearchFlag0x28ToMapSecondPalettePatch(); List <uint> useMapID = new List <uint>(); InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.BaseAddress; for (int i = 0; i < InputFormRef.DataCount; i++) { uint obj_plist = (uint)Program.ROM.u32(addr + 4); uint palette_plist = (uint)Program.ROM.u8(addr + 6); uint config_plist = (uint)Program.ROM.u8(addr + 7); uint mappointer_plist = (uint)Program.ROM.u8(addr + 8); uint anime1_plist = (uint)Program.ROM.u8(addr + 9); uint anime2_plist = (uint)Program.ROM.u8(addr + 10); uint mapchange_plist = (uint)Program.ROM.u8(addr + 11); uint event_plist = Program.ROM.u8(addr + Program.ROM.RomInfo.map_setting_event_plist_pos); uint worldmapevent_plist = Program.ROM.u8(addr + Program.ROM.RomInfo.map_setting_worldmap_plist_pos); uint second_palette_plist = 0; if (mapSecondPalette == PatchUtil.MapSecondPalette_extends.Flag0x28_146) { second_palette_plist = (uint)Program.ROM.u8(addr + 146); } else if (mapSecondPalette == PatchUtil.MapSecondPalette_extends.Flag0x28_45) { second_palette_plist = (uint)Program.ROM.u8(addr + 45); } if (type == MapPointerForm.PLIST_TYPE.UNKNOWN) {//UNKNOWNだと全部知らべます if ((obj_plist & 0xff) == plist || ((obj_plist >> 8) & 0xff) == plist || palette_plist == plist || config_plist == plist || mappointer_plist == plist || anime1_plist == plist || anime2_plist == plist || mapchange_plist == plist || event_plist == plist || worldmapevent_plist == plist || second_palette_plist == plist ) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.ANIMATION) { if (anime1_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.ANIMATION2) { if (anime2_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.CHANGE) { if (mapchange_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.CONFIG) { if (config_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.EVENT) { if (event_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.WORLDMAP_FE6ONLY) { if (worldmapevent_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.PALETTE) { if (palette_plist == plist) { useMapID.Add((uint)i); } if (second_palette_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.MAP) { if (mappointer_plist == plist) { useMapID.Add((uint)i); } } else if (type == MapPointerForm.PLIST_TYPE.OBJECT) { if ((obj_plist & 0xff) == plist || ((obj_plist >> 8) & 0xff) == plist ) { useMapID.Add((uint)i); } } addr += InputFormRef.BlockSize; } return(useMapID); }