Ejemplo n.º 1
0
        private void ReadTextBank(Mother3Rom rom)
        {
            Mother3Reader reader = new Mother3Reader(rom);
            reader.Position = rom.Settings.BankAddresses["TextTable"];
            int[] pointers = reader.ReadOffsetTable();

            RoomDescriptions = ReadOffsetText(rom, pointers[0], pointers[1], false);
            ItemNames = ReadTableText(rom, pointers[2]);
            ItemDescriptions = ReadOffsetText(rom, pointers[3], pointers[4], false);
            CharacterNames = ReadTableText(rom, pointers[5]);
            PartyCharacterNames = ReadTableText(rom, pointers[6]);
            EnemyNames = ReadTableText(rom, pointers[7], bugContext: 1);
            PsiNames = ReadTableText(rom, pointers[8]);
            PsiDescriptions = ReadOffsetText(rom, pointers[9], pointers[10], false);
            Statuses = ReadTableText(rom, pointers[11]);
            DefaultNames = ReadTableText(rom, pointers[12]);
            SpecialText = ReadTableText(rom, pointers[13]);
            SkillDescriptions = ReadOffsetText(rom, pointers[14], pointers[15], false);
        }
Ejemplo n.º 2
0
        private void ReadMainScript(Mother3Rom rom)
        {
            // The main script is technically part of the map bank, but it makes more sense here
            Mother3Reader reader = new Mother3Reader(rom);
            reader.Position = rom.Settings.BankAddresses["Maps.MainScript"];
            int[] pointers = reader.ReadOffsetTable();

            MainScript = new Dictionary<int, Dictionary<int, string>>();

            int entryCount = pointers.Length / 2;

            Parallel.For(0, entryCount, parallelOptions, i =>
            {
                int miniOffsetPointer = pointers[i * 2];
                int textPointer = pointers[i * 2 + 1];

                if (miniOffsetPointer != 0 && textPointer != 0)
                {
                    MainScript.Add(i, ReadOffsetText(rom, miniOffsetPointer, textPointer, true));
                }
            });

            // Attempt to order the script entries (they'll be out of order due to the threading)
            var list = MainScript.ToList();
            list.Sort((a, b) => a.Key.CompareTo(b.Key));
            MainScript = list.ToDictionary(kv => kv.Key, kv => kv.Value);
        }