public static void load(Filesystem fs) { filename = fs.getRomPath(); FS = fs; if (fs is NitroROMFilesystem) { romfile = new System.IO.FileInfo(filename); } arm9binFile = FS.getFileByName("arm9.bin"); arm9ovFile = FS.getFileByName("arm9ovt.bin"); arm9ovs = loadOvTable(arm9ovFile); arm9ovs2 = loadOvTable2(arm9ovFile); arm7binFile = FS.getFileByName("arm7.bin"); arm7ovFile = FS.getFileByName("arm7ovt.bin"); arm7ovs = loadOvTable(arm7ovFile); rsaSigFile = FS.getFileByName("rsasig.bin"); headerFile = FS.getFileByName("header.bin"); arm9RAMAddress = headerFile.getUintAt(0x28); ByteArrayInputStream header = new ByteArrayInputStream(headerFile.getContents()); romInternalName = header.ReadString(12); romGamecode = header.ReadString(4); ASMOffset = 0xE00; // New Super Mario Bros. if (romGamecode == "A2DE") // English { Region = Origin.US; } else if (romGamecode == "A2DP") // European { Region = Origin.EU; OverlayCount = 134; } else if (romGamecode == "A2DJ") // Japanese { Region = Origin.JP; } else if (romGamecode == "A2DK") // Korean { Region = Origin.KR; } else if (romGamecode == "A2DC") // Chinese { Region = Origin.CH; } else { isNSMBRom = false; Region = Origin.UNK; // Pokémon Diamond Version if (romGamecode == "ADAE") // English { ASMOffset = 0x106770; } else if (romGamecode == "ADAJ") // Japanese { ASMOffset = 0x108070; } else if (romGamecode == "ADAF") // French { ASMOffset = 0x1068F0; } else if (romGamecode == "ADAS") // Spanish { ASMOffset = 0x106910; } else if (romGamecode == "ADAI") // Italian { ASMOffset = 0x106850; } else if (romGamecode == "ADAD") // German { ASMOffset = 0x1068B0; } else if (romGamecode == "ADAK") // Korean { ASMOffset = 0x103C70; } // Pokémon Pearl Version else if (romGamecode == "APAE") // English { ASMOffset = 0x106770; } else if (romGamecode == "APAJ") // Japanese { ASMOffset = 0x1081B0; } else if (romGamecode == "APAF") // French { ASMOffset = 0x1068F0; } else if (romGamecode == "APAS") // Spanish { ASMOffset = 0x106910; } else if (romGamecode == "APAI") // Italian { ASMOffset = 0x106850; } else if (romGamecode == "APAD") // German { ASMOffset = 0x1068B0; } else if (romGamecode == "APAK") // Korean { ASMOffset = 0x103C80; } // Pokémon Platinum Version else if (romGamecode == "CPUE") // English { ASMOffset = 0x1010A0; } else if (romGamecode == "CPUJ") // Japanese { ASMOffset = 0x100490; } else if (romGamecode == "CPUF") // French { ASMOffset = 0x101280; } else if (romGamecode == "CPUS") // Spanish { ASMOffset = 0x1012A0; } else if (romGamecode == "CPUI") // Italian { ASMOffset = 0x101200; } else if (romGamecode == "CPUD") // German { ASMOffset = 0x101240; } else if (romGamecode == "CPUK") // Korean { ASMOffset = 0x101F90; } // Pokémon HeartGold Version else if (romGamecode == "IPKE") // English { ASMOffset = 0x110BE0; } else if (romGamecode == "IPKJ") // Japanese { ASMOffset = 0x110110; } else if (romGamecode == "IPKF") // French { ASMOffset = 0x110C00; } else if (romGamecode == "IPKS") // Spanish { ASMOffset = 0x110C00; } else if (romGamecode == "IPKI") // Italian { ASMOffset = 0x110B80; } else if (romGamecode == "IPKD") // German { ASMOffset = 0x110BC0; } else if (romGamecode == "IPKK") // Korean { ASMOffset = 0x1115D0; } // Pokémon SoulSilver Version else if (romGamecode == "IPGE") // English { ASMOffset = 0x110BE0; } else if (romGamecode == "IPGJ") // Japanese { ASMOffset = 0x110110; } else if (romGamecode == "IPGF") // French { ASMOffset = 0x110C00; } else if (romGamecode == "IPGS") // Spanish { ASMOffset = 0x110C20; } else if (romGamecode == "IPGI") // Italian { ASMOffset = 0x110B80; } else if (romGamecode == "IPGD") // German { ASMOffset = 0x110BC0; } else if (romGamecode == "IPGK") // Korean { ASMOffset = 0x1115D0; } } if (isNSMBRom) { headerFile.setByteAt(0x1D, 0x00); UserInfo = new ROMUserInfo(filename); LoadOverlay0(); } }