Exemplo n.º 1
0
        static public void AddLZ77Address(List <Address> list, uint addr, uint pointer, string info, bool isPointerOnly, DataTypeEnum type)
        {
            addr = U.toOffset(addr);
            if (!U.isSafetyOffset(addr))
            {
                return;
            }
            if (pointer != U.NOT_FOUND)
            {
                pointer = U.toOffset(pointer);
                if (!U.isSafetyOffset(pointer))
                {
                    return;
                }
            }

            uint length;

            if (isPointerOnly)
            {
                length = 0;
            }
            else
            {
                length = LZ77.getCompressedSize(Program.ROM.Data, addr);
            }
            list.Add(new Address(addr, length, pointer, info, type));
        }
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            string name = "OPClassFont";
            {
                InputFormRef InputFormRef = Init(null);
                FEBuilderGBA.Address.AddAddress(list, InputFormRef, name, new uint[] { 0 });

                uint p = InputFormRef.BaseAddress;
                for (int i = 0; i < InputFormRef.DataCount; i++, p += InputFormRef.BlockSize)
                {
                    name = "OPClassFont " + U.To0xHexString(i);
                    uint a = Program.ROM.p32(p);
                    if (a <= 0)
                    {
                        continue;
                    }
                    uint length = LZ77.getCompressedSize(Program.ROM.Data, a);
                    FEBuilderGBA.Address.AddLZ77Pointer(list
                                                        , p
                                                        , name
                                                        , isPointerOnly
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                }
            }
        }
Exemplo n.º 3
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            string       selfname     = "BattleBG";
            InputFormRef InputFormRef = Init(null);

            FEBuilderGBA.Address.AddAddress(list, InputFormRef, selfname, new uint[] { 0, 4, 8 });

            uint p = InputFormRef.BaseAddress;

            for (int i = 0; i < InputFormRef.DataCount; i++, p += InputFormRef.BlockSize)
            {
                selfname = "BattleBG " + U.To0xHexString(i);

                uint image = Program.ROM.p32(0 + p);
                FEBuilderGBA.Address.AddAddress(list, image
                                                , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                                , p + 0
                                                , selfname
                                                , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);

                uint tsa = Program.ROM.p32(4 + p);
                FEBuilderGBA.Address.AddAddress(list, tsa
                                                , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, tsa)
                                                , p + 4
                                                , selfname
                                                , FEBuilderGBA.Address.DataTypeEnum.LZ77TSA);

                uint palette = Program.ROM.p32(8 + p);
                FEBuilderGBA.Address.AddAddress(list, palette
                                                , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, palette)
                                                , p + 8
                                                , selfname
                                                , FEBuilderGBA.Address.DataTypeEnum.LZ77PAL);
            }
        }
Exemplo n.º 4
0
        //圧縮されているデータをそのまま取得する
        public static byte[] GetCompressDataLow(byte[] input, uint offset)
        {
            uint image_size = LZ77.getCompressedSize(input, offset);

            if (image_size <= 0)
            {
                return(new byte[0]);
            }
            return(U.getBinaryData(input, offset, image_size));
        }
Exemplo n.º 5
0
        public static void MakeLZ77DataList(List <Address> list)
        {
            string name   = R._("圧縮データ");
            uint   length = (uint)Program.ROM.Data.Length - 4;

            for (uint addr = 0x100; addr < length; addr += 4)
            {
                uint a = (uint)Program.ROM.Data[addr + 3];
                if (a != 0x08 && a != 0x09)
                {//ポインタ以外無視する.
                    continue;
                }
                a = Program.ROM.p32(addr);
                if (!U.isSafetyOffset(a))
                {//危険なポインタは無視
                    continue;
                }
                if (a < Program.ROM.RomInfo.compress_image_borderline_address())
                {
                    continue;
                }

                //ポインタ先は圧縮されているか?
                uint imageDataSize = LZ77.getUncompressSize(Program.ROM.Data, a);
                if (IsBadImageSize(imageDataSize))
                {
                    continue;
                }

                //ポインタは連続してあらわれるのでそのチェックをする.
                if (!IsContinuousPointer(addr, length))
                {
                    continue;
                }

                //解凍して中身を見てみる.
                byte[] image = LZ77.decompress(Program.ROM.Data, a);
                if (image.Length != imageDataSize)
                {//解凍したらデータ容量が違う
                    continue;
                }
                uint getcompsize = LZ77.getCompressedSize(Program.ROM.Data, a);
                if (getcompsize == 0)
                {
                    continue;
                }

                //たぶん画像だと判断する.
                FEBuilderGBA.Address.AddAddress(list, a, getcompsize, addr, name + U.To0xHexString(a), Address.DataTypeEnum.LZ77IMG);
                if (InputFormRef.DoEvents(null, "MakeLZ77DataList " + U.ToHexString(addr)))
                {
                    return;
                }
            }
        }
Exemplo n.º 6
0
        //マップ領域のベース領域の強制割り当て
        public static uint PreciseMapDataArea(uint mapid)
        {
            MapPointerNewPLISTPopupForm f = (MapPointerNewPLISTPopupForm)InputFormRef.JumpFormLow <MapPointerNewPLISTPopupForm>();

            f.Init(MapPointerForm.PLIST_TYPE.MAP);
            DialogResult dr = f.ShowDialog();

            if (dr != System.Windows.Forms.DialogResult.OK)
            {
                return(0);
            }

            uint plist = f.GetSelectPLIST();

            Undo.UndoData undodata = Program.Undo.NewUndoData("Precise MapDataArea", mapid.ToString("X"));


            //マップ領域を新規に割り当てる
            byte[] data = new byte[2 + (15 * 10)];
            data[0] = 15;
            data[1] = 10;

            data = LZ77.compress(data);

            MapSettingForm.PLists plists = MapSettingForm.GetMapPListsWhereMapID(mapid);
            uint map_addr = MapPointerForm.PlistToOffsetAddr(MapPointerForm.PLIST_TYPE.MAP, plists.mappointer_plist);

            if (U.isSafetyOffset(map_addr))
            {//既存マップがあればコピーする.
                uint length = LZ77.getCompressedSize(Program.ROM.Data, map_addr);
                data = Program.ROM.getBinaryData(map_addr, length);
            }

            uint write_addr = InputFormRef.AppendBinaryData(data, undodata);

            if (write_addr == U.NOT_FOUND)
            {
                Program.Undo.Rollback(undodata);
                return(0);
            }
            bool r = MapPointerForm.Write_Plsit(MapPointerForm.PLIST_TYPE.MAP, plist, write_addr, undodata);

            if (!r)
            {
                Program.Undo.Rollback(undodata);
                return(0);
            }

            Program.Undo.Push(undodata);

            return(plist);
        }
Exemplo n.º 7
0
        static uint All_ToolAutoGenLeftToRightAllAnimation(InputFormRef.AutoPleaseWait pleaseWait, Undo.UndoData undodata)
        {
            uint totalSize = 0;

            //テーブル拡張などで同じOAMが複数個所にある場合の対処
            Dictionary <uint, uint> convertHistory = new Dictionary <uint, uint>();

            InputFormRef N_InputFormRef = N_Init(null);
            uint         addr           = N_InputFormRef.BaseAddress;

            for (uint i = 0; i < N_InputFormRef.DataCount; i++, addr += N_InputFormRef.BlockSize)
            {
                uint rightToLeftOAMAddress = Program.ROM.p32(addr + 20);
                uint leftToRightOAMAddress = Program.ROM.p32(addr + 24);
                if (rightToLeftOAMAddress == leftToRightOAMAddress)
                {//処理済み
                    continue;
                }

                //実はさっき処理していますか?
                //D拡張などで同じデータが複数個ある場合への配慮.
                uint convertAddress;
                if (convertHistory.TryGetValue(leftToRightOAMAddress, out convertAddress))
                {
                    Program.ROM.write_p32(addr + 24, convertAddress, undodata);
                    continue;
                }

                byte[] rightToLeftOAMBin = LZ77.decompress(Program.ROM.Data, rightToLeftOAMAddress);
                byte[] leftToRightOAMBin = LZ77.decompress(Program.ROM.Data, leftToRightOAMAddress);

                List <byte> rightToLeftOAMArray = new List <byte>(rightToLeftOAMBin);
                List <byte> leftToRightOAMArray = new List <byte>(leftToRightOAMBin);

                if (!ImageUtilOAM.IsMatchOAM(rightToLeftOAMArray, leftToRightOAMArray))
                {//鏡写しではないので、自動生成できません。
                    continue;
                }
                pleaseWait.DoEvents(R._("{0} 削減サイズ:{1}", U.To0xHexString(i), totalSize));

                //データを自動生成できるので、ポインタを共有します
                Program.ROM.write_p32(addr + 24, rightToLeftOAMAddress, undodata);
                //不要なデータを消去します
                uint leftToRightOAMSize = LZ77.getCompressedSize(Program.ROM.Data, leftToRightOAMAddress);
                Program.ROM.write_fill(leftToRightOAMAddress, leftToRightOAMSize, 0, undodata);

                convertHistory[leftToRightOAMAddress] = rightToLeftOAMAddress;
                totalSize += leftToRightOAMSize;
            }
            return(totalSize);
        }
Exemplo n.º 8
0
        void TypeToLengthAndName(AsmMapSt p, uint pointer, ROM rom)
        {
            string type = p.TypeName;

            if (type == "LZ77")
            {
                p.Length = LZ77.getCompressedSize(rom.Data, U.toOffset(pointer));
            }
            else if (type == "OAMREGS")
            {
                p.Length = U.OAMREGSLength(U.toOffset(pointer), rom);
                p.Name  += " Count_" + ((p.Length - 2) / (3 * 2));
            }
            else if (type == "OAMREGS_ARRAY")
            {
                p.Length = ScanOAMREGSTable(pointer, p.Name, rom);
            }
            else if (type == "TEXTBATCH")
            {
                p.Length = U.TextBatchLength(U.toOffset(pointer), rom);
                p.Name  += " Count_" + ((p.Length) / 8);
            }
            else if (type == "TEXTBATCHSHORT")
            {
                p.Length = U.TextBatchShortLength(U.toOffset(pointer), rom);
                p.Name  += " Count_" + ((p.Length) / 2);
            }
            else if (type == "EVENT")
            {
                p.Length = EventScript.SearchEveneLength(rom.Data, U.toOffset(pointer));
                p.Name  += " Count_" + ((p.Length - 2) / (3 * 2));
            }
            else if (type == "HEADERTSA")
            {
                p.Length = ImageUtil.CalcByteLengthForHeaderTSAData(rom.Data, (int)U.toOffset(pointer));
            }
            else if (type == "ROMPALETTEANIMEFRAME")
            {
                p.Length = ImageRomAnimeForm.GetPaletteFrameCountLow(rom.Data, U.toOffset(pointer)) * 2;
            }
            else if (type == "PALETTE")
            {
                p.Length = 0x20;
            }
            else if (type == "PALETTE2")
            {
                p.Length = 0x20 * 2;
            }
            else if (type == "PALETTE3")
            {
                p.Length = 0x20 * 3;
            }
            else if (type == "PALETTE4")
            {
                p.Length = 0x20 * 4;
            }
            else if (type == "PALETTE8")
            {
                p.Length = 0x20 * 8;
            }
            else if (type == "PALETTE7")
            {
                p.Length = 0x20 * 7;
            }
            else if (type == "PALETTE16")
            {
                p.Length = 0x20 * 16;
            }
            else if (type == "ROMTCS")
            {
                p.Length = ImageUtilAP.CalcROMTCSLength(U.toOffset(pointer), rom);
            }
            else if (type == "NAZO60")
            {
                p.Length = 60;
            }
            else if (type == "FONTCOLOR0x200")
            {
                p.Length = 0x200;
            }
            else if (type == "NewPopupSimple")
            {
                p.Length = ImageUtilAP.CalcPopupSimpleLength(U.toOffset(pointer), rom);
            }
            else if (type == "SECONDARYOAM")
            {
                p.Length = 14;
            }
            else if (type == "SECONDARYOAM_ARRAY")
            {
                p.Length = ScanSECONDARYOAMTable(pointer, p.Name, rom);
            }
            else if (type == "CSTRING")
            {
                int    length;
                string strname = rom.getString(U.toOffset(pointer), out length);
                p.Length = (uint)length;
                p.Name  += " => " + strname;
            }
            else if (type == "SOUND_85COMMAND_POINTER_ARRAY")
            {
                p.Length = ScanSOUND85COMMANDPointerTable(pointer, p.Name, rom);
            }
            else if (type == "ASM_POINTER_ARRAY")
            {
                p.Length = ScanASMPointerTable(pointer, p.Name, rom);
            }
            else if (type == "PROC")
            {
                uint length = ProcsScriptForm.CalcLengthAndCheck(U.toOffset(pointer));
                if (length != U.NOT_FOUND)
                {
                    p.Length = length;
                }
            }
            else if (type == "NAZO8_DATA_POINTER_ARRAY")
            {
                p.Length = ScanNazo8DataPointerTable(pointer, p.Name, rom);
            }
            else if (type == "ASM")
            {
                p.Length = 0;
            }
            else if (type == "BGCONFIG")
            {
                p.Length = 10 * 2;
            }
        }
Exemplo n.º 9
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            uint image, palette, tsa;

            image   = Program.ROM.p32(Program.ROM.RomInfo.system_icon_pointer());
            palette = Program.ROM.p32(Program.ROM.RomInfo.system_icon_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, image
                                            , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                            , Program.ROM.RomInfo.system_icon_pointer()
                                            , "system_icon image"
                                            , Address.DataTypeEnum.LZ77IMG);
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20 * 2
                                            , Program.ROM.RomInfo.system_icon_palette_pointer()
                                            , "system_icon pal"
                                            , Address.DataTypeEnum.PAL);

            image   = Program.ROM.p32(Program.ROM.RomInfo.system_move_allowicon_pointer());
            palette = Program.ROM.p32(Program.ROM.RomInfo.system_move_allowicon_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, image
                                            , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                            , Program.ROM.RomInfo.system_move_allowicon_pointer()
                                            , "system_icon image"
                                            , Address.DataTypeEnum.LZ77IMG);
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , Program.ROM.RomInfo.system_move_allowicon_palette_pointer()
                                            , "system_move_allowicon pal"
                                            , Address.DataTypeEnum.LZ77PAL);

            image   = Program.ROM.p32(Program.ROM.RomInfo.system_weapon_icon_pointer());
            palette = Program.ROM.p32(Program.ROM.RomInfo.system_weapon_icon_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, image
                                            , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                            , Program.ROM.RomInfo.system_weapon_icon_pointer()
                                            , "system_weapon image"
                                            , Address.DataTypeEnum.LZ77IMG);
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , Program.ROM.RomInfo.system_weapon_icon_palette_pointer()
                                            , "system_weapon pal"
                                            , Address.DataTypeEnum.PAL);

            image   = Program.ROM.p32(Program.ROM.RomInfo.system_music_icon_pointer());
            palette = Program.ROM.p32(Program.ROM.RomInfo.system_music_icon_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, image
                                            , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                            , Program.ROM.RomInfo.system_music_icon_pointer()
                                            , "system_music image"
                                            , Address.DataTypeEnum.LZ77IMG);
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , Program.ROM.RomInfo.system_music_icon_palette_pointer()
                                            , "system_music pal"
                                            , Address.DataTypeEnum.PAL);

            palette = (Program.ROM.RomInfo.unit_icon_palette_address());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , U.NOT_FOUND
                                            , "unit_icon_play pal"
                                            , Address.DataTypeEnum.PAL);
            palette = (Program.ROM.RomInfo.unit_icon_enemey_palette_address());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , U.NOT_FOUND
                                            , "unit_icon_enemey pal"
                                            , Address.DataTypeEnum.PAL);
            palette = (Program.ROM.RomInfo.unit_icon_npc_palette_address());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , U.NOT_FOUND
                                            , "unit_icon_npc pal"
                                            , Address.DataTypeEnum.PAL);
            palette = (Program.ROM.RomInfo.unit_icon_gray_palette_address());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , U.NOT_FOUND
                                            , "unit_icon_gray pal"
                                            , Address.DataTypeEnum.PAL);
            palette = (Program.ROM.RomInfo.unit_icon_four_palette_address());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , U.NOT_FOUND
                                            , "unit_icon_for pal"
                                            , Address.DataTypeEnum.PAL);

            if (Program.ROM.RomInfo.version() >= 7)
            {
                image   = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_common_image_pointer());
                palette = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_common_palette_pointer());

                FEBuilderGBA.Address.AddAddress(list, image
                                                , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                                , Program.ROM.RomInfo.systemmenu_common_image_pointer()
                                                , "systemmenu_goal image"
                                                , Address.DataTypeEnum.LZ77IMG);
                FEBuilderGBA.Address.AddHeaderTSAPointer(list
                                                         , Program.ROM.RomInfo.systemmenu_goal_tsa_pointer()
                                                         , "systemmenu_goal tsa", isPointerOnly
                                                         );
                FEBuilderGBA.Address.AddAddress(list, palette
                                                , 0x20 * 4
                                                , Program.ROM.RomInfo.systemmenu_common_palette_pointer()
                                                , "systemmenu_goal pal"
                                                , Address.DataTypeEnum.PAL);
            }

            image   = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_common_image_pointer());
            tsa     = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_terrain_tsa_pointer());
            palette = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_common_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, image
                                            , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                            , Program.ROM.RomInfo.systemmenu_common_image_pointer()
                                            , "systemmenu_common image"
                                            , Address.DataTypeEnum.LZ77IMG);
            FEBuilderGBA.Address.AddHeaderTSAPointer(list
                                                     , Program.ROM.RomInfo.systemmenu_terrain_tsa_pointer()
                                                     , "systemmenu_common tsa", isPointerOnly);
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20 * 4
                                            , Program.ROM.RomInfo.systemmenu_common_palette_pointer()
                                            , "systemmenu_common"
                                            , Address.DataTypeEnum.LZ77IMG);

            FEBuilderGBA.Address.AddHeaderTSAPointer(list
                                                     , Program.ROM.RomInfo.systemmenu_name_tsa_pointer()
                                                     , "systemmenu_name tsa", isPointerOnly);

            image   = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_battlepreview_image_pointer());
            palette = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_battlepreview_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, image
                                            , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                            , Program.ROM.RomInfo.systemmenu_battlepreview_image_pointer()
                                            , "systemmenu_battlepreview image"
                                            , Address.DataTypeEnum.LZ77IMG);
            FEBuilderGBA.Address.AddHeaderTSAPointer(list
                                                     , Program.ROM.RomInfo.systemmenu_battlepreview_tsa_pointer()
                                                     , "systemmenu_battlepreview tsa", isPointerOnly);
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20 * 4
                                            , Program.ROM.RomInfo.systemmenu_battlepreview_palette_pointer()
                                            , "systemmenu_battlepreview pal"
                                            , Address.DataTypeEnum.PAL);
            if (Program.ROM.RomInfo.version() == 8)
            {//FE8の場合、画像イメージは4つのポインタがあります。
                uint other_image_p = Program.ROM.RomInfo.systemmenu_battlepreview_image_pointer();
                FEBuilderGBA.Address.AddLZ77Pointer(list, other_image_p + 4, "systemmenu_battlepreview_enemy", isPointerOnly, Address.DataTypeEnum.LZ77IMG);
                FEBuilderGBA.Address.AddLZ77Pointer(list, other_image_p + 8, "systemmenu_battlepreview_npc", isPointerOnly, Address.DataTypeEnum.LZ77IMG);
                FEBuilderGBA.Address.AddLZ77Pointer(list, other_image_p + 12, "systemmenu_battlepreview_4th", isPointerOnly, Address.DataTypeEnum.LZ77IMG);
            }

            palette = Program.ROM.p32(Program.ROM.RomInfo.systemarea_move_gradation_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20 * 3
                                            , Program.ROM.RomInfo.systemarea_move_gradation_palette_pointer()
                                            , "systemarea_move_gradation"
                                            , Address.DataTypeEnum.PAL);
            palette = Program.ROM.p32(Program.ROM.RomInfo.systemarea_attack_gradation_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20 * 3
                                            , Program.ROM.RomInfo.systemarea_attack_gradation_palette_pointer()
                                            , "systemarea_attack_gradation"
                                            , Address.DataTypeEnum.PAL);
            palette = Program.ROM.p32(Program.ROM.RomInfo.systemarea_staff_gradation_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20 * 3
                                            , Program.ROM.RomInfo.systemarea_staff_gradation_palette_pointer()
                                            , "systemarea_staff_gradation"
                                            , Address.DataTypeEnum.PAL);

            if (Program.ROM.RomInfo.version() >= 8)
            {//FE8
                image = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_badstatus_image_pointer());
                FEBuilderGBA.Address.AddAddress(list, image
                                                , 40 * (8 * 9) / 2
                                                , Program.ROM.RomInfo.systemmenu_badstatus_image_pointer()
                                                , "systemmenu_badstatus"
                                                , Address.DataTypeEnum.LZ77IMG);
            }
            else if (Program.ROM.RomInfo.version() >= 7)
            {//FE7
                image = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_badstatus_image_pointer());
                FEBuilderGBA.Address.AddAddress(list, image
                                                , 40 * (8 * 4) / 2
                                                , Program.ROM.RomInfo.systemmenu_badstatus_image_pointer()
                                                , "systemmenu_badstatus"
                                                , Address.DataTypeEnum.LZ77IMG);
            }
            else
            {//FE6
            }

            palette = Program.ROM.p32(Program.ROM.RomInfo.systemmenu_badstatus_palette_pointer());
            FEBuilderGBA.Address.AddAddress(list, palette
                                            , 0x20
                                            , Program.ROM.RomInfo.systemmenu_badstatus_palette_pointer()
                                            , "systemmenu_badstatus_palette"
                                            , Address.DataTypeEnum.PAL);


            FEBuilderGBA.Address.AddHeaderTSAPointer(list
                                                     , Program.ROM.RomInfo.system_tsa_16color_304x240_pointer()
                                                     , "system_tsa_16color_304x240", isPointerOnly);
        }
Exemplo n.º 10
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            foreach (var pair in g_ROMAnime)
            {
                string[] sp             = pair.Value;
                int      imageWidth     = (int)U.atoi(U.at(sp, 0));
                string   option         = U.at(sp, 1);
                uint     framePointer   = U.atoh(U.at(sp, 2));
                uint     tsaPointer     = U.atoh(U.at(sp, 3));
                uint     imagePointer   = U.atoh(U.at(sp, 4));
                uint     palettePointer = U.atoh(U.at(sp, 5));
                string   name           = U.at(sp, 6);

                uint frameCount = U.NOT_FOUND;
                if (U.isSafetyOffset(framePointer))
                {
                    FEBuilderGBA.Address.AddAddress(list, framePointer
                                                    , 4
                                                    , U.NOT_FOUND
                                                    , name + " FRAME Pointer"
                                                    , FEBuilderGBA.Address.DataTypeEnum.POINTER);
                    if (!isPointerOnly)
                    {
                        frameCount = GetFrameCountLow(framePointer);
                        if (frameCount != U.NOT_FOUND)
                        {
                            uint p = Program.ROM.p32(framePointer);
                            FEBuilderGBA.Address.AddAddress(list, p
                                                            , frameCount * 4
                                                            , framePointer
                                                            , name + " FRAME"
                                                            , FEBuilderGBA.Address.DataTypeEnum.BIN);
                        }
                    }
                }

                if (frameCount == U.NOT_FOUND)
                {
                    continue;
                }

                FEBuilderGBA.Address.AddAddress(list, tsaPointer
                                                , 4
                                                , U.NOT_FOUND
                                                , name + " TSA Pointer"
                                                , FEBuilderGBA.Address.DataTypeEnum.POINTER);
                if (!isPointerOnly)
                {
                    List <uint> tsaList  = GetPointerListCount(tsaPointer);
                    uint        baseAddr = Program.ROM.p32(tsaPointer);
                    for (int i = 0; i < tsaList.Count; i++)
                    {
                        uint p = baseAddr + ((uint)i * 4);
                        uint a = tsaList[i];
                        if (Program.ROM.p32(p) != a)
                        {
                            p = U.NOT_FOUND;
                        }
                        FEBuilderGBA.Address.AddAddress(list, a
                                                        , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, a)
                                                        , p
                                                        , name + " TSA"
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77TSA);
                    }
                }


                FEBuilderGBA.Address.AddAddress(list, imagePointer
                                                , 4
                                                , U.NOT_FOUND
                                                , name + " Image Pointer"
                                                , FEBuilderGBA.Address.DataTypeEnum.POINTER);
                if (!isPointerOnly)
                {
                    List <uint> imageList = GetPointerListCount(imagePointer);
                    uint        baseAddr  = Program.ROM.p32(imagePointer);
                    for (int i = 0; i < imageList.Count; i++)
                    {
                        uint p = baseAddr + ((uint)i * 4);
                        uint a = imageList[i];
                        if (Program.ROM.p32(p) != a)
                        {
                            p = U.NOT_FOUND;
                        }
                        FEBuilderGBA.Address.AddAddress(list, a
                                                        , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, a)
                                                        , p
                                                        , name + " Image"
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                    }
                }

                FEBuilderGBA.Address.AddAddress(list, palettePointer
                                                , 4
                                                , U.NOT_FOUND
                                                , name + " Palette Pointer"
                                                , FEBuilderGBA.Address.DataTypeEnum.POINTER);
                if (!isPointerOnly)
                {
                    List <uint> paletteList = GetPalettePointerListCount(palettePointer, framePointer, option);
                    uint        baseAddr    = Program.ROM.p32(palettePointer);
                    for (int i = 0; i < paletteList.Count; i++)
                    {
                        uint p = baseAddr + ((uint)i * 4);
                        uint a = paletteList[i];
                        if (Program.ROM.p32(p) != a)
                        {
                            p = U.NOT_FOUND;
                        }
                        FEBuilderGBA.Address.AddAddress(list, a
                                                        , 2 * 16
                                                        , p
                                                        , name + " Palette"
                                                        , FEBuilderGBA.Address.DataTypeEnum.PAL);
                    }
                }
            }
        }
Exemplo n.º 11
0
        void MakeRecycleList(ref List <Address> recycle, string basename, bool isPointerOnly)
        {
            if (!U.isSafetyOffset(this.FramePointer))
            {
                for (int i = 0; i < this.FramePointer; i++)
                {
                    if (this.TSAList.Count > 0)
                    {
                        uint tsa;
                        if (i >= this.TSAList.Count)
                        {
                            tsa = this.TSAList[this.TSAList.Count - 1];
                        }
                        else
                        {
                            tsa = this.TSAList[i];
                        }
                        FEBuilderGBA.Address.AddAddress(recycle
                                                        , tsa
                                                        , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, tsa)
                                                        , U.NOT_FOUND
                                                        , basename + "TSA"
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77TSA);
                    }

                    if (this.ImageList.Count > 0)
                    {
                        uint image;
                        if (i >= this.ImageList.Count)
                        {
                            image = this.ImageList[this.ImageList.Count - 1];
                        }
                        else
                        {
                            image = this.ImageList[i];
                        }
                        FEBuilderGBA.Address.AddAddress(recycle
                                                        , image
                                                        , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                                        , U.NOT_FOUND
                                                        , basename + "IMAGE"
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77TSA);
                    }

                    if (this.PaletteList.Count > 0)
                    {
                        uint palette;
                        if (i >= this.PaletteList.Count)
                        {
                            palette = this.PaletteList[this.PaletteList.Count - 1];
                        }
                        else
                        {
                            palette = this.PaletteList[i];
                        }
                        FEBuilderGBA.Address.AddAddress(recycle
                                                        , palette
                                                        , 2 * 16
                                                        , U.NOT_FOUND
                                                        , basename + "PAL"
                                                        , FEBuilderGBA.Address.DataTypeEnum.PAL);
                    }
                }
            }
            else
            {
                //同じアニメを何度も出力しないように記録する.
                Dictionary <uint, bool> animeHash = new Dictionary <uint, bool>();

                uint addr      = Program.ROM.p32(FramePointer);
                uint startAddr = addr;

                //圧縮されていないデータなので、事故防止のため リミッターをかける.
                uint limitter = addr + 1024 * 1024; //1MBサーチしたらもうあきらめる.
                limitter = (uint)Math.Min(limitter, Program.ROM.Data.Length);

                uint id   = 0;
                uint wait = 0;
                for (; addr < limitter; addr += 4)
                {
                    id   = Program.ROM.u16(addr);
                    wait = Program.ROM.u16(addr + 2);

                    if (id == 0xFFFF)
                    {
                        break;
                    }

                    int i = (int)id;
                    if (this.TSAList.Count > 0)
                    {
                        uint tsa;
                        if (i >= this.TSAList.Count)
                        {
                            tsa = this.TSAList[this.TSAList.Count - 1];
                        }
                        else
                        {
                            tsa = this.TSAList[i];
                        }
                        FEBuilderGBA.Address.AddAddress(recycle
                                                        , tsa
                                                        , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, tsa)
                                                        , U.NOT_FOUND
                                                        , basename + "TSA"
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77TSA);
                    }

                    if (this.ImageList.Count > 0)
                    {
                        uint image;
                        if (i >= this.ImageList.Count)
                        {
                            image = this.ImageList[this.ImageList.Count - 1];
                        }
                        else
                        {
                            image = this.ImageList[i];
                        }
                        FEBuilderGBA.Address.AddAddress(recycle
                                                        , image
                                                        , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, image)
                                                        , U.NOT_FOUND
                                                        , basename + "IMAGE"
                                                        , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                    }

                    if (this.PaletteList.Count > 0)
                    {
                        uint palette;
                        if (i >= this.PaletteList.Count)
                        {
                            palette = this.PaletteList[this.PaletteList.Count - 1];
                        }
                        else
                        {
                            palette = this.PaletteList[i];
                        }
                        FEBuilderGBA.Address.AddAddress(recycle
                                                        , palette
                                                        , 2 * 16
                                                        , U.NOT_FOUND
                                                        , basename + "PAL"
                                                        , FEBuilderGBA.Address.DataTypeEnum.PAL);
                    }
                }
                FEBuilderGBA.Address.AddPointer(recycle
                                                , FramePointer
                                                , addr - startAddr
                                                , basename + "FRAME"
                                                , FEBuilderGBA.Address.DataTypeEnum.ROMANIMEFRAME);
            }
        }
Exemplo n.º 12
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list, bool isPointerOnly)
        {
            {
                uint image      = Program.ROM.u32(Program.ROM.RomInfo.worldmap_big_image_pointer());
                uint palette    = Program.ROM.u32(Program.ROM.RomInfo.worldmap_big_palette_pointer());
                uint dpalette   = Program.ROM.u32(Program.ROM.RomInfo.worldmap_big_dpalette_pointer());
                uint palettemap = Program.ROM.u32(Program.ROM.RomInfo.worldmap_big_palettemap_pointer());

                FEBuilderGBA.Address.AddAddress(list, image
                                                , isPointerOnly ? 0 : (uint)(480 / 2 * 320)
                                                , Program.ROM.RomInfo.worldmap_big_image_pointer()
                                                , "worldmap_big_image"
                                                , FEBuilderGBA.Address.DataTypeEnum.BIN);
                FEBuilderGBA.Address.AddAddress(list, palette
                                                , 0x20 * 4
                                                , Program.ROM.RomInfo.worldmap_big_palette_pointer()
                                                , "worldmap_big_palette"
                                                , FEBuilderGBA.Address.DataTypeEnum.PAL);
                FEBuilderGBA.Address.AddAddress(list, dpalette
                                                , 0x20 * 4
                                                , Program.ROM.RomInfo.worldmap_big_dpalette_pointer()
                                                , "worldmap_big_dpalette"
                                                , FEBuilderGBA.Address.DataTypeEnum.PAL);
                FEBuilderGBA.Address.AddAddress(list, palettemap
                                                , isPointerOnly ? 0 : LZ77.getCompressedSize(Program.ROM.Data, palettemap)
                                                , Program.ROM.RomInfo.worldmap_big_palettemap_pointer()
                                                , "worldmap_big_palettemap"
                                                , FEBuilderGBA.Address.DataTypeEnum.BIN);
            }
            {
                FEBuilderGBA.Address.AddLZ77Pointer(list
                                                    , Program.ROM.RomInfo.worldmap_event_image_pointer()
                                                    , "worldmap_event_image"
                                                    , isPointerOnly
                                                    , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                FEBuilderGBA.Address.AddLZ77Pointer(list
                                                    , Program.ROM.RomInfo.worldmap_event_tsa_pointer()
                                                    , "worldmap_event_image"
                                                    , isPointerOnly
                                                    , FEBuilderGBA.Address.DataTypeEnum.LZ77TSA);
                FEBuilderGBA.Address.AddPointer(list
                                                , Program.ROM.RomInfo.worldmap_event_palette_pointer()
                                                , 0x20 * 4
                                                , "worldmap_event_palette"
                                                , FEBuilderGBA.Address.DataTypeEnum.PAL);
            }
            {
                FEBuilderGBA.Address.AddLZ77Pointer(list
                                                    , Program.ROM.RomInfo.worldmap_mini_image_pointer()
                                                    , "worldmap_mini_image"
                                                    , isPointerOnly
                                                    , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                FEBuilderGBA.Address.AddPointer(list
                                                , Program.ROM.RomInfo.worldmap_mini_palette_pointer()
                                                , 0x20 * 1
                                                , "worldmap_mini_palette"
                                                , FEBuilderGBA.Address.DataTypeEnum.PAL);
            }
            {
                FEBuilderGBA.Address.AddLZ77Pointer(list
                                                    , Program.ROM.RomInfo.worldmap_icon1_pointer()
                                                    , "worldmap_icon1"
                                                    , isPointerOnly
                                                    , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
                FEBuilderGBA.Address.AddPointer(list
                                                , Program.ROM.RomInfo.worldmap_icon_palette_pointer()
                                                , 0x20 * 2
                                                , "worldmap_icon_palette"
                                                , FEBuilderGBA.Address.DataTypeEnum.PAL);
            }
            {
                FEBuilderGBA.Address.AddLZ77Pointer(list
                                                    , Program.ROM.RomInfo.worldmap_icon2_pointer()
                                                    , "worldmap_icon2"
                                                    , isPointerOnly
                                                    , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
            }
            {
                FEBuilderGBA.Address.AddLZ77Pointer(list
                                                    , Program.ROM.RomInfo.worldmap_road_tile_pointer()
                                                    , "worldmap_road_tile_image"
                                                    , isPointerOnly
                                                    , FEBuilderGBA.Address.DataTypeEnum.LZ77IMG);
            }
            {
                InputFormRef ifr = Border_Init(null);
                FEBuilderGBA.Address.AddAddress(list, ifr, "WorldmapCountyBorder", new uint[] { 0, 4 });

                uint addr = ifr.BaseAddress;
                for (int i = 0; i < ifr.DataCount; i++, addr += ifr.BlockSize)
                {
                    string name = "WorldmapCountyBorder " + U.To0xHexString(i);
                    FEBuilderGBA.Address.AddLZ77Pointer(list, 0 + addr
                                                        , name + " IMAGE"
                                                        , isPointerOnly
                                                        , FEBuilderGBA.Address.DataTypeEnum.POINTER);
                    FEBuilderGBA.Address.AddROMTCSPointer(list, 0 + addr
                                                          , name + " ROMTCS"
                                                          , isPointerOnly
                                                          );
                }
            }
            {
                string       name         = "WorldMapIconData";
                InputFormRef InputFormRef = ICON_Init(null);
                FEBuilderGBA.Address.AddAddress(list, InputFormRef, name, new uint[] { 4 });
            }
        }
Exemplo n.º 13
0
        public static void MakeLZ77DataList(List <Address> list)
        {
            //誤爆すると面倒なことになるフレームとOAMのデータ群
            Dictionary <uint, bool> ignoreDic = new Dictionary <uint, bool>();

            ImageBattleAnimeForm.MakeBattleFrameAndOAMDictionary(ignoreDic);
            SoundFootStepsForm.MakeIgnoreDictionary(ignoreDic);
            WorldMapPointForm.MakeIgnoreDictionary(ignoreDic);
            MakeIgnoreDictionnaryFromList(ignoreDic, list);

            string name   = R._("圧縮データ");
            uint   length = (uint)Program.ROM.Data.Length - 4;

            for (uint addr = 0x100; addr < length; addr += 4)
            {
                uint a = (uint)Program.ROM.Data[addr + 3];
                if (a != 0x08 && a != 0x09)
                {//ポインタ以外無視する.
                    continue;
                }
                a = Program.ROM.p32(addr);
                if (!U.isSafetyOffset(a))
                {//危険なポインタは無視
                    continue;
                }
                if (a < Program.ROM.RomInfo.compress_image_borderline_address)
                {
                    continue;
                }
                if (!U.isPadding4(a))
                {//4バイトパディングされていないlz77データはありえないとする.
                    continue;
                }

                if (ignoreDic.ContainsKey(a))
                {//戦闘アニメのフレーム,OAM等のlz77で圧縮されているデータ
                    continue;
                }

                //ポインタ先は圧縮されているか?
                uint imageDataSize = LZ77.getUncompressSize(Program.ROM.Data, a);
                if (IsBadImageSize(imageDataSize))
                {
                    continue;
                }

                //ポインタは連続してあらわれるのでそのチェックをする.
                if (!IsContinuousPointer(addr, length))
                {
                    continue;
                }

                uint getcompsize = LZ77.getCompressedSize(Program.ROM.Data, a);
                if (getcompsize == 0)
                {
                    continue;
                }

                //たぶん画像だと判断する.
                FEBuilderGBA.Address.AddAddress(list, a, getcompsize, addr, name + U.To0xHexString(a), Address.DataTypeEnum.LZ77IMG);
                if (InputFormRef.DoEvents(null, "MakeLZ77DataList " + U.ToHexString(addr)))
                {
                    return;
                }
            }
        }