private void WriteRom(string filename) { string usedFilename = FileName.Fix(filename, string.Format(romLocations.SeedFileString, seed)); using (var rom = new FileStream(usedFilename, FileMode.OpenOrCreate)) { var romImg = applyBasePatch(romImage, romRegion ? Resources.ALttP_JP_MOD : Resources.ALttP_US_MOD); rom.Write(romImg, 0, 8388608); foreach (var location in romLocations.Locations) { rom.Seek(romRegion ? location.Address_JP : location.Address_US, SeekOrigin.Begin); var newItem = (byte)location.Item.HexValue; rom.Write(new [] { newItem }, 0, 1); location.WriteItemCheck?.Invoke(rom, location.Item.Type, romRegion); } WriteSeedInRom(rom); rom.Close(); } log?.WriteLog(usedFilename); }
private void WriteRom(string filename) { string usedFilename = FileName.Fix(filename, string.Format(romLocations.SeedFileString, seed)); using (var rom = new FileStream(usedFilename, FileMode.OpenOrCreate)) { rom.Write(Resources.RomImage, 0, 2097152); foreach (var location in romLocations.Locations) { rom.Seek(location.Address, SeekOrigin.Begin); var newItem = (byte)location.Item.HexValue; rom.Write(new [] { newItem }, 0, 1); location.WriteItemCheck?.Invoke(rom, location.Item.Type); } WriteSeedInRom(rom); if (RandomizerVersion.Debug) { WriteDebugModeToRom(rom); } rom.Close(); } log?.WriteLog(usedFilename); }
private void WriteRom(RandomizerOptions options) { string usedFilename = FileName.Fix(options.Filename, string.Format(romLocations.SeedFileString, seed), complexity); using (var rom = new FileStream(usedFilename, FileMode.OpenOrCreate)) { rom.Write(Resources.RomImage, 0, 2097152); if (options.NoRandomization) { return; } foreach (var location in romLocations.Locations) { var newItem = (byte)location.Item.HexValue; rom.WriteBytes(location.Address, newItem); location.WriteItemCheck?.Invoke(rom, location.Item); } foreach (var location in romLocations.SpecialLocations) { if (location.Address != default(int)) { var newItem = (byte)location.Item.HexValue; rom.WriteBytes(location.Address, newItem); } location.WriteItemCheck?.Invoke(rom, location.Item); } WriteSeedInRom(rom, options); WriteRngItems(rom); rom.WriteBytes(0x180033, (byte)options.HeartBeepSpeed); rom.WriteBytes(0x180040, (byte)random.Next(0x20)); if (options.SramTrace) { WriteSramTraceToRom(rom); } if (RandomizerVersion.Debug) { WriteDebugModeToRom(rom); } rom.Close(); } log?.WriteLog(usedFilename); }
private void WriteRom(string filename) { string usedFilename = FileName.Fix(filename, string.Format(romLocations.SeedFileString, seed)); var hideLocations = !(romLocations is RomLocationsCasual); using (var rom = new FileStream(usedFilename, FileMode.OpenOrCreate)) { //rom.Write(Resources.RomImageSMPB072VP, 0, 3211264); //For the vanilla palettes version rom.Write(Resources.RomImage, 0, 4194304); foreach (var location in romLocations.Locations) { rom.Seek(location.Address, SeekOrigin.Begin); var newItem = new byte[2]; if (!location.NoHidden && location.Item.Type != ItemType.Nothing && location.Item.Type != ItemType.ChargeBeam && location.ItemStorageType == ItemStorageType.Normal) { // hide the item half of the time (to be a jerk) if (hideLocations && random.Next(2) == 0) { location.ItemStorageType = ItemStorageType.Hidden; } } switch (location.ItemStorageType) { case ItemStorageType.Normal: newItem = StringToByteArray(location.Item.Normal); break; case ItemStorageType.Hidden: newItem = StringToByteArray(location.Item.Hidden); break; case ItemStorageType.Chozo: newItem = StringToByteArray(location.Item.Chozo); break; } rom.Write(newItem, 0, 2); if (location.Item.Type == ItemType.Nothing) { // give same index as morph ball rom.Seek(location.Address + 4, SeekOrigin.Begin); rom.Write(StringToByteArray("\x0c"), 0, 1); } if (location.Item.Type == ItemType.ChargeBeam) { // we have 4 copies of charge to reduce tedium, give them all the same index //I chose to remove this for now to make it a bit more obvious that there aren't mistakes in the randomizing process rom.Seek(location.Address + 4, SeekOrigin.Begin); rom.Write(StringToByteArray("\xff"), 0, 1); //index ff may cause problems } } WriteSeedInRom(rom); WriteControls(rom); rom.Close(); } if (log != null) { log.WriteLog(usedFilename); } }
private void WriteRom(string filename) { string usedFilename = FileName.Fix(filename, string.Format(romLocations.SeedFileString, seed)); var hideLocations = !(romLocations is RomLocationsCasual); using (var rom = new FileStream(usedFilename, FileMode.OpenOrCreate)) { rom.Write(Resources.RomImage, 0, 3145728); foreach (var location in romLocations.Locations) { rom.Seek(location.Address, SeekOrigin.Begin); var newItem = new byte[2]; if (!location.NoHidden && location.Item.Type != ItemType.Nothing && location.Item.Type != ItemType.ChargeBeam && location.ItemStorageType == ItemStorageType.Normal) { // hide the item half of the time (to be a jerk) if (hideLocations && random.Next(2) == 0) { location.ItemStorageType = ItemStorageType.Hidden; } } switch (location.ItemStorageType) { case ItemStorageType.Normal: newItem = StringToByteArray(location.Item.Normal); break; case ItemStorageType.Hidden: newItem = StringToByteArray(location.Item.Hidden); break; case ItemStorageType.Chozo: newItem = StringToByteArray(location.Item.Chozo); break; } rom.Write(newItem, 0, 2); if (location.Item.Type == ItemType.Nothing) { // give same index as morph ball rom.Seek(location.Address + 4, SeekOrigin.Begin); rom.Write(StringToByteArray("\x1a"), 0, 1); } if (location.Item.Type == ItemType.ChargeBeam) { // we have 4 copies of charge to reduce tedium, give them all the same index rom.Seek(location.Address + 4, SeekOrigin.Begin); rom.Write(StringToByteArray("\xff"), 0, 1); } } WriteSeedInRom(rom); WriteControls(rom); rom.Close(); } if (log != null) { log.WriteLog(usedFilename); } }