Exemplo n.º 1
0
        //各種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);
        }
Exemplo n.º 2
0
        //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);
        }