Ejemplo n.º 1
0
 static InputFormRef N_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N_"
                             , Program.ROM.RomInfo.event_ballte_talk2_pointer()
                             , 16
                             , (int i, uint addr) =>
     {    //読込最大値検索
         uint unit = Program.ROM.u16(addr);
         if (unit == 0x0 || unit == 0xFFFF)
         {
             return false;
         }
         if (i > 10 && Program.ROM.IsEmpty(addr, 16 * 10))
         {    //終端符号を無視して 0x00等を利用している人がいるため
             return false;
         }
         return true;
     }
                             , (int i, uint addr) =>
     {
         uint unit_id = (uint)Program.ROM.u8(addr);
         return U.ToHexString(unit_id) + " " + UnitForm.GetUnitName(unit_id);
     }
                             ));
 }
Ejemplo n.º 2
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.support_talk_pointer()
                             , 16
                             , (int i, uint addr) =>
     {    //とりあえず 0x00 00 まで読む.
         if (Program.ROM.u16(addr) == 0x0000)
         {
             return false;
         }
         if (i > 10 && Program.ROM.IsEmpty(addr, 16 * 10))
         {
             return false;
         }
         return true;
     }
                             , (int i, uint addr) =>
     {
         uint uid1 = Program.ROM.u8(addr + 0);
         uint uid2 = Program.ROM.u8(addr + 1);
         return U.ToHexString(uid1) +
         " " + UnitForm.GetUnitName(uid1) +
         " & "
         + U.ToHexString(uid2) +
         " " + UnitForm.GetUnitName(uid2)
         ;
     }
                             ));
 }
Ejemplo n.º 3
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.event_haiku_pointer
                             , 16
                             , (int i, uint addr) =>
     {    //読込最大値検索
         if (Program.ROM.u8(addr) == 0x0)
         {
             return false;
         }
         if (i > 10 && Program.ROM.IsEmpty(addr, 16 * 10))
         {    //終端符号を無視して 0x00等を利用している人がいるため
             return false;
         }
         return true;
     }
                             , (int i, uint addr) =>
     {
         uint unit_id = (uint)Program.ROM.u8(addr);
         return U.ToHexString(unit_id) + " " + UnitForm.GetUnitName(unit_id);
     }
                             ));
 }
Ejemplo n.º 4
0
        static InputFormRef Init(EventUnitFE7Form self)
        {
            return(new InputFormRef(self
                                    , ""
                                    , 0
                                    , Program.ROM.RomInfo.eventunit_data_size
                                    , (int i, uint addr) =>
            {    //読込最大値検索
                //00まで検索
                return Program.ROM.u8(addr) != 0;
            }
                                    , (int i, uint addr) =>
            {
                uint unit_id = Program.ROM.u8(addr);
                if (unit_id == 0)
                {
                    return null;
                }
                uint class_id = Program.ROM.u8(addr + 1);
                uint unitgrow = Program.ROM.u16(addr + 3);
                if (class_id == 0)
                {    //クラスIDが0だったらユーザIDで補完する
                    class_id = UnitForm.GetClassID(unit_id);
                }

                String unit_name = UnitForm.GetUnitName(unit_id);
                String class_name = ClassForm.GetClassName(class_id);
                uint level = U.ParseUnitGrowLV(unitgrow);

                return unit_name + "(" + class_name + ")" + "  " + "Lv:" + level.ToString();
            }
                                    ));
        }
Ejemplo n.º 5
0
        public static void MakeVarsIDArray(List <UseValsID> list)
        {
            string infobase = R._("死亡セリフ");

            InputFormRef InputFormRef = Init(null);
            List <uint>  tracelist    = new List <uint>();
            uint         haiku_addr   = InputFormRef.BaseAddress;

            for (uint i = 0; i < InputFormRef.DataCount; i++, haiku_addr += InputFormRef.BlockSize)
            {
                uint unitid = Program.ROM.u8(haiku_addr + 0);

                string info   = infobase + " " + UnitForm.GetUnitName(unitid);
                uint   textid = Program.ROM.u16(haiku_addr + 6);

                if (textid <= 0)
                {
                    uint event_addr = Program.ROM.p32(haiku_addr + 8);
                    EventCondForm.MakeVarsIDArrayByEventAddress(list, event_addr, info, tracelist);
                }
                else
                {
                    UseValsID.AppendTextID(list, FELint.Type.HAIKU, haiku_addr, info, textid, i);
                }
            }
//            UseValsID.AppendTextID(list, FELint.Type.HAIKU, InputFormRef, new uint[] { 6 });
        }
Ejemplo n.º 6
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.sound_boss_bgm_pointer
                             , 8
                             , (int i, uint addr) =>
     {    //0xFFまで
         if (Program.ROM.u16(addr) == 0xFFFF)
         {
             return false;
         }
         if (i > 10 && Program.ROM.IsEmpty(addr, 8 * 10))
         {
             return false;
         }
         return true;
     }
                             , (int i, uint addr) =>
     {
         uint unit_id = (uint)Program.ROM.u8(addr);
         uint song_id = (uint)Program.ROM.u32(addr + 4);
         return U.ToHexString(unit_id) + " " + UnitForm.GetUnitName(unit_id) + " : " + U.ToHexString(song_id) + SongTableForm.GetSongName(song_id);
     }
                             ));
 }
Ejemplo n.º 7
0
        static InputFormRef Init(Form self)
        {
            return(new InputFormRef(self
                                    , ""
                                    , Program.ROM.RomInfo.summons_demon_king_pointer
                                    , 20
                                    , (int i, uint addr) =>
            {
                uint max = Program.ROM.u8(Program.ROM.RomInfo.summons_demon_king_count_address);
                return i <= max;
            }
                                    , (int i, uint addr) =>
            {
                uint unit_id = Program.ROM.u8(addr);
                if (unit_id == 0)
                {
                    return "-EMPTY-";
                }
                uint class_id = Program.ROM.u8(addr + 1);
                uint unitgrow = Program.ROM.u16(addr + 3);
                if (class_id == 0)
                {    //クラスIDが0だったらユーザIDで補完する
                    class_id = UnitForm.GetClassID(unit_id);
                }

                String unit_name = UnitForm.GetUnitName(unit_id);
                String class_name = ClassForm.GetClassName(class_id);
                uint level = U.ParseUnitGrowLV(unitgrow);

                return unit_name + "(" + class_name + ")" + "  " + "Lv:" + level.ToString();
            }
                                    ));
        }
Ejemplo n.º 8
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list)
        {
            InputFormRef InputFormRef = Init(null);

            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "Haiku", new uint[] { 8 });

            List <uint> tracelist = new List <uint>();
            uint        addr      = InputFormRef.BaseAddress;

            for (int i = 0; i < InputFormRef.DataCount; i++, addr += InputFormRef.BlockSize)
            {
//                uint textid = Program.ROM.u16(addr + 6);
//                if (textid <= 0)
//                {
//                    continue;
//                }

                uint spEventP = Program.ROM.u32(addr + 8);
                if (!U.isSafetyPointer(spEventP))
                {
                    continue;
                }
                uint   unitid     = Program.ROM.u8(addr + 0);
                string event_name = "Haiku" + " " + U.ToHexString(unitid) + " " + UnitForm.GetUnitName(unitid);

                EventScriptForm.ScanScript(list, addr + 8, true, false, event_name, tracelist);
            }
        }
Ejemplo n.º 9
0
        static InputFormRef Init(Form self)
        {
            uint typeID = 0;

            return(new InputFormRef(self
                                    , ""
                                    , 0
                                    , 1
                                    , (int i, uint addr) =>
            {
                if (i == 0)
                {
                    return true;
                }
                return Program.ROM.u8(addr) != 0x00;
            }
                                    , (int i, uint addr) =>
            {
                uint id = Program.ROM.u8(addr + 0);
                if (i == 0)
                {
                    typeID = id;
                    return TypeIDToString(id);
                }
                if (typeID <= 1)
                {
                    return U.ToHexString(id) + " " + UnitForm.GetUnitName(id);
                }
                else
                {
                    return U.ToHexString(id) + " " + ClassForm.GetClassName(id);
                }
            }
                                    ));
        }
Ejemplo n.º 10
0
 static InputFormRef N2_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N2_"
                             , Program.ROM.RomInfo.ed_3a_pointer()
                             , 8
                             , (int i, uint addr) =>
     {
         return Program.ROM.u32(addr) != 0x00;
     }
                             , (int i, uint addr) =>
     {
         uint flag = Program.ROM.u8(addr + 0);
         uint uid1 = Program.ROM.u8(addr + 1);
         uint uid2 = Program.ROM.u8(addr + 2);
         if (flag == 1)
         {
             return U.ToHexString(uid1) + " " + UnitForm.GetUnitName(uid1);
         }
         if (flag == 2)
         {
             return U.ToHexString(uid1) + " " + UnitForm.GetUnitName(uid1)
             + " & " + U.ToHexString(uid2) + " " + UnitForm.GetUnitName(uid2);
         }
         return U.ToHexString(uid1) + " " + UnitForm.GetUnitName(uid1)
         + " ?? " + U.ToHexString(uid2) + " " + UnitForm.GetUnitName(uid2);
     }
                             ));
 }
Ejemplo n.º 11
0
 public static string GetUnitNameAndANY(uint uid)
 {
     if (uid == 0)
     {
         return(R._("ANY"));
     }
     return(UnitForm.GetUnitName(uid));
 }
Ejemplo n.º 12
0
        void MakeClassList(uint selectindex)
        {
            if (Program.ROM.RomInfo.version() >= 8)
            {//FE8の場合キャラパレット指定が別途用意されている
                uint unit_palette_color_pointer = Program.ROM.p32(Program.ROM.RomInfo.unit_palette_color_pointer());
                uint unit_palette_class_pointer = Program.ROM.p32(Program.ROM.RomInfo.unit_palette_class_pointer());

                List <U.AddrResult> list = new List <U.AddrResult>();
                for (int i = 0; i < Program.ROM.RomInfo.unit_maxcount(); i++)
                {
                    for (uint n = 0; n < 7; n++)
                    {
                        uint paletteid = Program.ROM.u8(unit_palette_color_pointer + n);
                        if (paletteid <= 0)
                        {
                            continue;
                        }
                        if (paletteid - 1 != selectindex)
                        {
                            continue;
                        }
                        uint   uid  = (uint)i + 1;
                        uint   cid  = Program.ROM.u8(unit_palette_class_pointer + n);
                        string name = U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid) + " -> " + U.ToHexString(cid) + " " + ClassForm.GetClassName(cid);

                        list.Add(new U.AddrResult(cid, name, uid));
                    }

                    unit_palette_color_pointer += 7;
                    unit_palette_class_pointer += 7;
                }
                U.ConvertListBox(list, ref UNITCLASS_LIST);
            }
            else
            {//FE7 , FE6 はユニットの部分に色指定がある
                List <U.AddrResult> list = new List <U.AddrResult>();
                for (int i = 0; i < Program.ROM.RomInfo.unit_maxcount(); i++)
                {
                    uint uid        = (uint)i;
                    uint paletteid1 = UnitForm.GetPaletteLowClass(uid);
                    uint paletteid2 = UnitForm.GetPaletteHighClass(uid);

                    if (paletteid1 > 0 && paletteid1 - 1 == selectindex)
                    {
                        uint   cid  = UnitForm.GetClassID(uid);
                        string name = U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid) + " -> " + U.ToHexString(cid) + " " + ClassForm.GetClassName(cid);
                        list.Add(new U.AddrResult(cid, name, uid));
                    }
                    else if (paletteid2 > 0 && paletteid2 - 1 == selectindex)
                    {
                        uint   cid  = UnitForm.GetHighClass(uid);
                        string name = U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid) + " -> " + U.ToHexString(cid) + " " + ClassForm.GetClassName(cid);
                        list.Add(new U.AddrResult(cid, name, uid));
                    }
                }
                U.ConvertListBox(list, ref UNITCLASS_LIST);
            }
        }
Ejemplo n.º 13
0
        //全データの取得
        public static void MakeAllDataLength(List <Address> list)
        {
            InputFormRef InputFormRef = Init(null);

            FEBuilderGBA.Address.AddAddress(list, InputFormRef, "Haiku", new uint[] { 8 });

            List <uint> tracelist = new List <uint>();
            uint        addr      = InputFormRef.BaseAddress;

            for (int i = 0; i < InputFormRef.DataCount; i++, addr += InputFormRef.BlockSize)
            {
//                uint textid = Program.ROM.u16(addr + 6);
//                if (textid <= 0)
//                {
//                    continue;
//                }

                uint spEventP = Program.ROM.u32(addr + 8);
                if (!U.isSafetyPointer(spEventP))
                {
                    continue;
                }
                uint   unitid     = Program.ROM.u8(addr + 0);
                string event_name = "Haiku" + " " + U.ToHexString(unitid) + " " + UnitForm.GetUnitName(unitid);

                EventScriptForm.ScanScript(list, addr + 8, true, false, event_name, tracelist);
            }

            InputFormRef N1_InputFormRef = N1_Init(null);

            uint[] pointers = new uint[] { Program.ROM.RomInfo.event_haiku_tutorial_1_pointer(), Program.ROM.RomInfo.event_haiku_tutorial_2_pointer() };
            for (int n = 0; n < pointers.Length; n++)
            {
                N1_InputFormRef.ReInitPointer(pointers[n]);
                string name = "Haiku tutorial_" + n;
                FEBuilderGBA.Address.AddAddress(list, InputFormRef, name, new uint[] { 4 });
                addr = N1_InputFormRef.BaseAddress;
                for (int i = 0; i < N1_InputFormRef.DataCount; i++, addr += N1_InputFormRef.BlockSize)
                {
                    uint spEventP = Program.ROM.u32(addr + 4);
                    if (!U.isSafetyPointer(spEventP))
                    {
                        continue;
                    }
                    uint   unitid     = Program.ROM.u8(addr + 0);
                    string event_name = name + " " + U.ToHexString(unitid) + " " + UnitForm.GetUnitName(unitid);

                    EventScriptForm.ScanScript(list, addr + 4, true, false, event_name, tracelist);
                }
            }
        }
Ejemplo n.º 14
0
        public static string GetUnit2Preview(uint v)
        {
            uint addr = U.toOffset(v);

            if (!U.isSafetyOffset(addr + 1))
            {
                return("");
            }

            uint from = Program.ROM.u8(addr + 0);
            uint to   = Program.ROM.u8(addr + 1);

            return(U.ToHexString(from) + ": " + UnitForm.GetUnitName(from)
                   + " -> " + U.ToHexString(to) + ": " + UnitForm.GetUnitName(to));
        }
Ejemplo n.º 15
0
 static InputFormRef N_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N_"
                             , Program.ROM.RomInfo.unit_palette_class_pointer
                             , 7
                             , (int i, uint addr) =>
     {    //個数が固定できまっている
         return i < Program.ROM.RomInfo.unit_maxcount;
     }
                             , (int i, uint addr) =>
     {    //リストボックスに乗せる項目
         return U.ToHexString(i + 1) + " " + UnitForm.GetUnitName((uint)i + 1);
     }
                             ));
 }
Ejemplo n.º 16
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.summon_unit_pointer()
                             , 2
                             , (int i, uint addr) =>
     {
         return Program.ROM.u8(addr) != 0x00;
     }
                             , (int i, uint addr) =>
     {
         uint unitid = Program.ROM.u8(addr + 0);
         return U.ToHexString(unitid) + " " + UnitForm.GetUnitName(unitid);
     }
                             ));
 }
Ejemplo n.º 17
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , 0
                             , 2
                             , (int i, uint addr) =>
     {
         return i < DATAMAX;
     }
                             , (int i, uint addr) =>
     {
         uint unitid = (uint)i;
         return U.ToHexString(unitid) + " " + UnitForm.GetUnitName(unitid);
     }
                             ));
 }
Ejemplo n.º 18
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.event_final_serif_pointer
                             , 8
                             , (int i, uint addr) =>
     {
         uint unit_id = Program.ROM.u32(addr + 0);
         return unit_id <= 0xff && unit_id >= 0x1;
     }
                             , (int i, uint addr) =>
     {
         uint unit_id = Program.ROM.u32(addr + 0);
         return U.ToHexString(unit_id) + " " + UnitForm.GetUnitName(unit_id);
     }
                             ));
 }
        static InputFormRef Init(Form self, uint assignLevelUpP)
        {
            InputFormRef ifr = new InputFormRef(self
                                                , ""
                                                , assignLevelUpP
                                                , 4
                                                , (int i, uint addr) =>
            {    //読込最大値検索
                return(i < 0xFF);
            }
                                                , (int i, uint addr) =>
            {
                return(U.ToHexString(i) + " " + UnitForm.GetUnitName((uint)i));
            }
                                                );

            return(ifr);
        }
Ejemplo n.º 20
0
 static InputFormRef N1_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N1_"
                             , Program.ROM.RomInfo.ed_2_pointer()
                             , 8
                             , (int i, uint addr) =>
     {
         return Program.ROM.u8(addr) != 0x00;
     }
                             , (int i, uint addr) =>
     {
         uint uid = Program.ROM.u8(addr + 0);
         uint tourina = Program.ROM.u32(addr + 4);
         return U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid) + " " + TextForm.Direct(tourina);
     }
                             ));
 }
Ejemplo n.º 21
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.ed_1_pointer()
                             , 4
                             , (int i, uint addr) =>
     {
         return Program.ROM.u32(addr) != 0x00;
     }
                             , (int i, uint addr) =>
     {
         uint uid = Program.ROM.u8(addr + 0);
         uint flag = Program.ROM.u8(addr + 1);
         return U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid);
     }
                             ));
 }
 static InputFormRef N_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N_"
                             , 0
                             , 4
                             , (int i, uint addr) =>
     {    //00 または D1 で終端
         uint id = Program.ROM.u8(addr);
         uint term = Program.ROM.u8(addr + 3);
         return (id != 0x00 && term != 0xD1);
     }
                             , (int i, uint addr) =>
     {
         uint uid = Program.ROM.u8(addr);
         return U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid);
     }
                             ));
 }
Ejemplo n.º 23
0
 static InputFormRef Init(Form self)
 {
     return(new InputFormRef(self
                             , ""
                             , Program.ROM.RomInfo.senseki_comment_pointer()
                             , 16
                             , (int i, uint addr) =>
     {    //終端
         return Program.ROM.u16(addr) != 0x0;
     }
                             , (int i, uint addr) =>
     {
         uint uid = Program.ROM.u32(addr + 0);
         return U.ToHexString(uid) +
         " " + UnitForm.GetUnitName(uid)
         ;
     }
                             ));
 }
Ejemplo n.º 24
0
        static InputFormRef N3_Init(Form self)
        {
            InputFormRef ifr = new InputFormRef(self
                                                , "N3_"
                                                , 0 //ポインタ指定ができない...
                                                , 12
                                                , (int i, uint addr) =>
            {
                return(Program.ROM.u32(addr) != 0x00);
            }
                                                , (int i, uint addr) =>
            {
                uint uid = Program.ROM.u32(addr);
                return(U.ToHexString(uid) + " " + UnitForm.GetUnitName(uid));
            }
                                                );

            ifr.ReInit(Program.ROM.RomInfo.ed_3c_pointer());
            return(ifr);
        }
Ejemplo n.º 25
0
        static InputFormRef Init(Form self, uint assignUnit)
        {
            uint unitDataCount = UnitForm.DataCount();

            InputFormRef ifr = new InputFormRef(self
                                                , ""
                                                , assignUnit
                                                , 1
                                                , (int i, uint addr) =>
            {    //読込最大値検索
                return(i < unitDataCount);
            }
                                                , (int i, uint addr) =>
            {
                return(U.ToHexString(i) + " " + UnitForm.GetUnitName((uint)i));
            }
                                                );

            return(ifr);
        }
Ejemplo n.º 26
0
        static InputFormRef Init(Form self)
        {
            InputFormRef ifr = new InputFormRef(self
                                                , ""
                                                , 0x37D88
                                                , 0x8
                                                , (int i, uint addr) =>
            {
                return(U.isSafetyPointer(Program.ROM.u32(addr + 4)));
            }
                                                , (int i, uint addr) =>
            {
                uint flag_id   = Program.ROM.u32(addr + 0);
                uint unitsAddr = Program.ROM.p32(addr + 4);
                uint unit_id   = Program.ROM.u8(unitsAddr);
                return(U.ToHexString(unit_id) + " " + UnitForm.GetUnitName(unit_id) + " (" + R._("フラグ") + ":" + U.ToHexString(flag_id) + ")");
            }
                                                );

            return(ifr);
        }
Ejemplo n.º 27
0
 static InputFormRef N2_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N2_"
                             , Program.ROM.RomInfo.ed_3a_pointer
                             , 8
                             , (int i, uint addr) =>
     {
         if (i == 0)
         {
             return true;
         }
         return Program.ROM.u16(addr) != 0x00;
     }
                             , (int i, uint addr) =>
     {
         uint uid1 = (uint)i;
         return U.ToHexString(uid1) + " " + UnitForm.GetUnitName(uid1);
     }
                             ));
 }
Ejemplo n.º 28
0
        static InputFormRef Init(Form self)
        {
            return(new InputFormRef(self
                                    , ""
                                    , Program.ROM.RomInfo.support_unit_pointer
                                    , 24
                                    , (int i, uint addr) =>
            {     //とりあえず 00 00 まで読む.
                if (Program.ROM.u16(addr) != 0)
                { //0ではないのでまだデータがある.
                    return true;
                }
                //飛び地になっていることがあるらしい.
                //4ブロックほど検索してみる.
                uint found_addr = addr;
                for (int n = 0; n < 4; n++, found_addr += 24)
                {
                    uint uid = UnitForm.GetUnitIDWhereSupportAddr(found_addr);
                    if (uid != U.NOT_FOUND)
                    {    //発見!
                        return true;
                    }
                }
                //見つからない.
                return false;
            }
                                    , (int i, uint addr) =>
            {
                uint uid = UnitForm.GetUnitIDWhereSupportAddr(addr);
                if (uid == U.NOT_FOUND)
                {
                    return "-EMPTY-";
                }

                return U.ToHexString(uid + 1) +
                " " + UnitForm.GetUnitName(uid + 1);
            }
                                    ));
        }
Ejemplo n.º 29
0
 static InputFormRef N1_Init(Form self)
 {
     return(new InputFormRef(self
                             , "N1_"
                             , 0
                             , 1
                             , (int i, uint addr) =>
     {    //読込最大値検索
         uint a = Program.ROM.u8(addr);
         if (a == 0)
         {
             return false;
         }
         return true;
     }
                             , (int i, uint addr) =>
     {
         uint unitid = Program.ROM.u8(addr);
         return U.ToHexString(unitid) + " " + UnitForm.GetUnitName(unitid);
     }
                             ));
 }
Ejemplo n.º 30
0
        public static string GetUnit4Preview(uint v)
        {
            uint addr = U.toOffset(v);

            if (!U.isSafetyOffset(addr + 1))
            {
                return("");
            }

            StringBuilder sb = new StringBuilder();

            for (uint i = 0; i < 4; i++)
            {
                uint uid = Program.ROM.u8(addr + i);
                if (uid == 0)
                {
                    continue;
                }
                string str = U.ToHexString(uid) + ": " + UnitForm.GetUnitName(uid) + " ";
                sb.Append(str);
            }
            return(sb.ToString());
        }