Ejemplo n.º 1
0
        //分割していない場合
        static string GetPListNameNotSplite(uint plist, List <U.AddrResult> mapSetting)
        {
            if (plist == 0)
            {//0番はnull
                return("NULL");
            }

            for (int mapid = 0; mapid < mapSetting.Count; mapid++)
            {
                uint addr = mapSetting[mapid].addr;
                MapSettingForm.PLists plists = MapSettingForm.GetMapPListsWhereAddr(addr);
                if (plists.anime1_plist == plist)
                {
                    return("ANIME1 " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.anime2_plist == plist)
                {
                    return("ANIME2 " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.config_plist == plist)
                {
                    return("CONFIG " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.event_plist == plist)
                {
                    return("EVENT " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.mapchange_plist == plist)
                {
                    return("MAPCHANGE " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.mappointer_plist == plist)
                {
                    return("MAP " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.palette_plist == plist)
                {
                    return("PAL " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                uint obj_plist_low  = (plists.obj_plist & 0xFF);
                uint obj_plist_high = ((plists.obj_plist >> 8) & 0xFF);
                if (obj_plist_low == plist)
                {
                    return("OBJ " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (obj_plist_high == plist)
                {
                    return("OBJ " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (Program.ROM.RomInfo.version() == 6)
                {
                    uint wmapevent_plist = MapSettingForm.GetWorldMapEventIDWhereAddr(addr);
                    if (wmapevent_plist == 0)
                    {
                        return("WMEVENT " + MapSettingForm.GetMapNameWhereAddr(addr));
                    }
                }
            }
            return("UNK");
        }
Ejemplo n.º 2
0
        uint PListSplitsExpandsOne(MapPointerForm.PLIST_TYPE type, Undo.UndoData undodata)
        {
            Debug.Assert(type != PLIST_TYPE.ANIMATION2); //Animation1と一緒に処理しないといけない
            Debug.Assert(type != PLIST_TYPE.PALETTE);    //OBJECTと一緒に処理しないといけない

            InputFormRef InputFormRef = Init(null, false);

            InputFormRef.ReInitPointer(GetBasePointer(type));

            byte[] newArray = new byte[4 * (256)];
            List <U.AddrResult> mapSetting = MapSettingForm.MakeMapIDList();
            int mapmax = mapSetting.Count;

            for (int mapid = 0; mapid < mapmax; mapid++)
            {
                if (type == PLIST_TYPE.WORLDMAP_FE6ONLY)
                {
                    Debug.Assert(Program.ROM.RomInfo.version == 6);
                    uint wmapevent_plist = MapSettingForm.GetWorldMapEventIDWhereAddr(mapSetting[mapid].addr);

                    PListSplitExpandsOneConvertPointer(wmapevent_plist, InputFormRef, newArray);
                    continue;
                }

                MapSettingForm.PLists plists = MapSettingForm.GetMapPListsWhereAddr(mapSetting[mapid].addr);
                if (type == PLIST_TYPE.CHANGE)
                {
                    PListSplitExpandsOneConvertPointer(plists.mapchange_plist, InputFormRef, newArray);
                }
                else if (type == PLIST_TYPE.EVENT)
                {
                    PListSplitExpandsOneConvertPointer(plists.event_plist, InputFormRef, newArray);
                }
                else if (type == PLIST_TYPE.MAP)
                {
                    PListSplitExpandsOneConvertPointer(plists.mappointer_plist, InputFormRef, newArray);
                }
                else if (type == PLIST_TYPE.CONFIG)
                {
                    PListSplitExpandsOneConvertPointer(plists.config_plist, InputFormRef, newArray);
                }
                else if (type == PLIST_TYPE.ANIMATION)
                {
                    PListSplitExpandsOneConvertPointer(plists.anime1_plist, InputFormRef, newArray);
                    PListSplitExpandsOneConvertPointer(plists.anime2_plist, InputFormRef, newArray);
                }
                else
                {
                    uint obj1_plist = (plists.obj_plist & 0xFF);
                    uint obj2_plist = (plists.obj_plist >> 8) & 0xFF; //FE8にはないが FE7は、 plistを2つ設定できることがある.

                    PListSplitExpandsOneConvertPointer(obj1_plist, InputFormRef, newArray);
                    PListSplitExpandsOneConvertPointer(obj2_plist, InputFormRef, newArray);

                    PListSplitExpandsOneConvertPointer(plists.palette_plist, InputFormRef, newArray);
                }
            }
            //終端の0xFFFFFFFFを念のため入れておきます.
//            U.write_u32(newArray, 256 * 4, U.NOT_FOUND);

            uint newpos = InputFormRef.AppendBinaryData(newArray, undodata);

            if (newpos == U.NOT_FOUND)
            {
                throw new PLISTExpandsException(R._("PLIST拡張に失敗しました。\r\ntype={0}\r\nnewaddr=NOT_FOUND", type.ToString()));
            }

            if (type == PLIST_TYPE.CONFIG)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_config_pointer, newpos, undodata);
            }
            else if (type == PLIST_TYPE.ANIMATION)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_tileanime1_pointer, newpos, undodata);
                Program.ROM.write_p32(Program.ROM.RomInfo.map_tileanime2_pointer, newpos, undodata);
            }
            else if (type == PLIST_TYPE.OBJECT)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_obj_pointer, newpos, undodata);
                Program.ROM.write_p32(Program.ROM.RomInfo.map_pal_pointer, newpos, undodata);
            }
            else if (type == PLIST_TYPE.MAP)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_map_pointer_pointer, newpos, undodata);
            }
            else if (type == PLIST_TYPE.CHANGE)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_mapchange_pointer, newpos, undodata);
            }
            else if (type == PLIST_TYPE.EVENT)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_event_pointer, newpos, undodata);
            }
            else if (type == PLIST_TYPE.WORLDMAP_FE6ONLY)
            {
                Program.ROM.write_p32(Program.ROM.RomInfo.map_worldmapevent_pointer, newpos, undodata);
            }
            else
            {
                Debug.Assert(false);
            }
            return(newpos);
        }
Ejemplo n.º 3
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            InputFormRef InputFormRef = Init(null, IsPlistSplits());

            InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.CONFIG));
            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS", new uint[] { 0 });
            List <U.AddrResult> configList = InputFormRef.MakeList();

            InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.ANIMATION)); //ANIMATION2と共有
            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS_ANIMATION", new uint[] { 0 });

            InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.OBJECT)); //PALETTEと共有
            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS_OBJECT", new uint[] { 0 });
            List <U.AddrResult> objList = InputFormRef.MakeList();

            InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.MAP));
            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS_MAP", new uint[] { 0 });
            List <U.AddrResult> mapList = InputFormRef.MakeList();

            InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.EVENT));
            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS_EVENT", new uint[] { 0 });

            InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.CHANGE));
            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS_CHANGE", new uint[] { 0 });

            if (Program.ROM.RomInfo.version == 6)
            {
                InputFormRef.ReInitPointer(GetBasePointer(PLIST_TYPE.CHANGE));
                FEBuilderGBA.Address.AddAddress(list, InputFormRef, "MAPPOINTERS_WMAP_EVENT", new uint[] { 0 });
            }

            List <U.AddrResult> mapSetting = MapSettingForm.MakeMapIDList();

            for (int mapid = 0; mapid < mapSetting.Count; mapid++)
            {
                MapSettingForm.PLists plists = MapSettingForm.GetMapPListsWhereAddr(mapSetting[mapid].addr);
                //plists.mapchange_plist //別途処理
                //plists.event_plist     //別途処理
                //plists.anime1_plist;   //別途処理
                //plists.anime2_plist;   //別途処理

                if (plists.config_plist > 0 && plists.config_plist < configList.Count)
                {
                    uint   pointer = configList[(int)plists.config_plist].addr;
                    string name    = "MAP:" + U.To0xHexString(mapid) + " MAP_CHIPSET" + U.ToHexString(plists.config_plist);
                    FEBuilderGBA.Address.AddLZ77Pointer(list
                                                        , pointer + 0
                                                        , name
                                                        , isPointerOnly
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77MAPCONFIG);
                }

                if (plists.mappointer_plist > 0 && plists.mappointer_plist < mapList.Count)
                {
                    uint   pointer = mapList[(int)plists.mappointer_plist].addr;
                    string name    = "MAP:" + U.To0xHexString(mapid) + " MAP MAR:" + U.ToHexString(plists.mappointer_plist);
                    FEBuilderGBA.Address.AddLZ77Pointer(list
                                                        , pointer + 0
                                                        , name
                                                        , isPointerOnly
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77MAPMAR);
                }

                if (plists.palette_plist > 0 && plists.palette_plist < objList.Count)
                {
                    uint   pointer = objList[(int)plists.palette_plist].addr;
                    string name    = "MAP:" + U.ToHexString(mapid) + " PALETTE:" + U.ToHexString(plists.palette_plist);
                    uint   size    = 0x20 * MapStyleEditorForm.MAX_MAP_PALETTE_COUNT;
                    FEBuilderGBA.Address.AddPointer(list
                                                    , pointer + 0
                                                    , size
                                                    , name
                                                    , FEBuilderGBA.Address.DataTypeEnum.PAL);
                }
                if (plists.palette2_plist > 0 && plists.palette2_plist < objList.Count)
                {
                    uint   pointer = objList[(int)plists.palette2_plist].addr;
                    string name    = "MAP:" + U.ToHexString(mapid) + " SECOND PALETTE:" + U.ToHexString(plists.palette2_plist);
                    uint   size    = 0x20 * MapStyleEditorForm.MAX_MAP_PALETTE_COUNT;
                    FEBuilderGBA.Address.AddPointer(list
                                                    , pointer + 0
                                                    , size
                                                    , name
                                                    , FEBuilderGBA.Address.DataTypeEnum.PAL);
                }

                uint obj_plist_low  = (plists.obj_plist & 0xFF);
                uint obj_plist_high = ((plists.obj_plist >> 8) & 0xFF);

                if (obj_plist_low > 0 && obj_plist_low < objList.Count)
                {
                    uint   pointer = objList[(int)obj_plist_low].addr;
                    string name    = "MAP:" + U.ToHexString(mapid) + " OBJ:" + U.ToHexString(obj_plist_low);
                    FEBuilderGBA.Address.AddLZ77Pointer(list
                                                        , pointer + 0
                                                        , name
                                                        , isPointerOnly
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                }
                if (obj_plist_high > 0 && obj_plist_high < objList.Count)
                {
                    uint   pointer = objList[(int)obj_plist_high].addr;
                    string name    = "MAP:" + U.ToHexString(mapid) + " OBJ:" + U.ToHexString(obj_plist_high);
                    FEBuilderGBA.Address.AddLZ77Pointer(list
                                                        , pointer + 0
                                                        , name
                                                        , isPointerOnly
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                }
            }
        }
Ejemplo n.º 4
0
        static string GetPListNameSplited(uint plist, uint baseaddr, List <U.AddrResult> mapSetting)
        {
            //分割している場合
            if (plist == 0)
            {//0番はnull
                return("NULL");
            }

            MapPointerForm.PLIST_TYPE type = ConvertBaseAddrToType(baseaddr);
            for (int mapid = 0; mapid < mapSetting.Count; mapid++)
            {
                uint addr = mapSetting[mapid].addr;
                MapSettingForm.PLists plists = MapSettingForm.GetMapPListsWhereAddr(addr);
                if (plists.anime1_plist == plist && type == PLIST_TYPE.ANIMATION)
                {
                    return("ANIME1 " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.anime2_plist == plist && type == PLIST_TYPE.ANIMATION)
                {//ANIME2はANIMEと共有
                    return("ANIME2 " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.config_plist == plist && type == PLIST_TYPE.CONFIG)
                {
                    return("CONFIG " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.event_plist == plist && type == PLIST_TYPE.EVENT)
                {
                    return("EVENT " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.mapchange_plist == plist && type == PLIST_TYPE.CHANGE)
                {
                    return("MAPCHANGE " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.mappointer_plist == plist && type == PLIST_TYPE.MAP)
                {
                    return("MAP " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.palette_plist == plist && type == PLIST_TYPE.OBJECT)
                {//OBJECTとPALは共有
                    return("PAL " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (plists.palette2_plist == plist && type == PLIST_TYPE.OBJECT)
                {//OBJECTとPALは共有
                    return("PAL2 " + MapSettingForm.GetMapNameWhereAddr(addr));
                }

                uint obj_plist_low  = (plists.obj_plist & 0xFF);
                uint obj_plist_high = ((plists.obj_plist >> 8) & 0xFF);
                if (obj_plist_low == plist && type == PLIST_TYPE.OBJECT)
                {
                    return("OBJ " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (obj_plist_high == plist && type == PLIST_TYPE.OBJECT)
                {
                    return("OBJ " + MapSettingForm.GetMapNameWhereAddr(addr));
                }
                if (Program.ROM.RomInfo.version == 6)
                {
                    uint wmapevent_plist = MapSettingForm.GetWorldMapEventIDWhereAddr(addr);
                    if (wmapevent_plist == 0 && type == PLIST_TYPE.WORLDMAP_FE6ONLY)
                    {
                        return("WMEVENT " + MapSettingForm.GetMapNameWhereAddr(addr));
                    }
                }
            }
            return("-EMPTY-");
        }