public static void Init() { // Time to traverse a linked list Pointers[0] = Address + 0x10; for (int i = 1; i < Entries; i++) { int b = Rom.ReadInt(Pointers[i - 1] + 4); Pointers[i] = Pointers[i - 1] + ((b + 2) << 2); } // Load the data for (int i = 0; i < Entries; i++) { var pd = new GfxBattleAnimations(); Rom.Seek(Pointers[i]); pd.index = i; pd.GfxEntry = Rom.ReadUShort(); pd.PalEntry = Rom.ReadUShort(); pd.Length = Rom.ReadInt(); pd.ArrEntries = new ushort[pd.Length]; pd.Frames = new ushort[pd.Length]; for (int j = 0; j < pd.Length; j++) { pd.ArrEntries[j] = Rom.ReadUShort(); pd.Frames[j] = Rom.ReadUShort(); } AnimEntries[i] = pd; } }
public static int LoadRom(string filename) { if (!File.Exists(filename)) { return(-1); } try { Rom = File.ReadAllBytes(filename); } catch { return(-2); } if (Rom.Length != 0x2000000) { return(-3); } string header = "MOTHER3\0\0\0\0\0A3UJ"; string headerTest = string.Empty; for (int i = 0xA0; i < 0xB0; i++) { headerTest += (char)Rom[i]; } if (!header.Equals(headerTest)) { return(-4); } IsLoaded = true; switch (Rom[0x124C18]) { case 0x9C: Version = RomVersion.English; break; case 0x1C: Version = RomVersion.Englishv12; break; default: Version = RomVersion.Japanese; break; } if (Rom[0x1DB4] == 0x73) { DecodeAddress = 0x13C5F2; DecodeMod = 0x10E; } else { DecodeAddress = 0x13C5D8; DecodeMod = 0x126; } GfxProvider.RomTileCache.Clear(); M3CC.Init(); TextProvider.Init(); TextItemNames.Init(); TextEnemyNames.Init(); TextEnemyShortNames.Init(); TextMusicNames.Init(); TextItemDescriptions.Init(); TextEnemyDescriptions.Init(); TextBattle.Init(); TextMain.Init(); TextMapNames.Init(); TextPsiNames.Init(); TextCharNames.Init(); TextDontCareNames.Init(); GfxBattleTable.Init(); GfxBattleSprites.Init(); GfxItems.Init(); GfxBattleAnimations.Init(); GfxBattleBgTable.Init(); GfxBattleBg.Init(); GfxTownMaps.Init(); GfxLogoTitle.Init(); SpriteData.Init(); MusicPlayerTable.Init(); ActionTable.Init(); SongTable.Init(); return(0); }