From d9e4d6d8ef33a23117f595a6dd336691a8c717e3 Mon Sep 17 00:00:00 2001 From: nn <53490794+nn357@users.noreply.github.com> Date: Sat, 17 Jan 2026 02:11:10 +0900 Subject: [PATCH 1/5] fix rom checksum --- rust/maprando/src/patch.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index 38e49856f..ec82868c7 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -3306,6 +3306,36 @@ fn get_other_door_ptr_pair_map(map: &Map) -> HashMap { other_door_ptr_pair_map } +fn fix_snes_checksum(rom: &mut Rom) { + const CHECKSUM_ADDR: usize = 0x7FDC; // LoROM + + let data = &mut rom.data; + let mut sum: u32 = 0; + + data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].fill(0xFF); // clear out the checksum + data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].fill(0x00); // and the compliment + + + for &b in data.iter() { + sum = sum.wrapping_add(b as u32); + } + + let checksum = (sum & 0xFFFF) as u16; + let complement = checksum ^ 0xFFFF; + + data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2] + .copy_from_slice(&complement.to_le_bytes()); + + data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4] + .copy_from_slice(&checksum.to_le_bytes()); + + println!( + "New checksum data: complement = {:04X}, checksum = {:04X}", + complement, + checksum + ); +} + pub fn make_rom( base_rom: &Rom, randomizer_settings: &RandomizerSettings, @@ -3407,6 +3437,8 @@ pub fn make_rom( samus_sprite_categories, mosaic_themes, )?; + // ROM Checksum FIX: Do not modifiy the rom contents after this point + fix_snes_checksum(&mut patcher.rom); Ok(rom) } From 90fe2918f96c75e86345cad57014b83b1dacee60 Mon Sep 17 00:00:00 2001 From: nn <53490794+nn357@users.noreply.github.com> Date: Sat, 17 Jan 2026 02:27:44 +0900 Subject: [PATCH 2/5] update formatting --- rust/maprando/src/patch.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index ec82868c7..df35eaf14 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -3312,6 +3312,7 @@ fn fix_snes_checksum(rom: &mut Rom) { let data = &mut rom.data; let mut sum: u32 = 0; + data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].fill(0xFF); // clear out the checksum data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].fill(0x00); // and the compliment @@ -3323,16 +3324,13 @@ fn fix_snes_checksum(rom: &mut Rom) { let checksum = (sum & 0xFFFF) as u16; let complement = checksum ^ 0xFFFF; - data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2] - .copy_from_slice(&complement.to_le_bytes()); + data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].copy_from_slice(&complement.to_le_bytes()); - data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4] - .copy_from_slice(&checksum.to_le_bytes()); + data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].copy_from_slice(&checksum.to_le_bytes()); println!( "New checksum data: complement = {:04X}, checksum = {:04X}", - complement, - checksum + complement,checksum ); } @@ -3437,8 +3435,9 @@ pub fn make_rom( samus_sprite_categories, mosaic_themes, )?; + // ROM Checksum FIX: Do not modifiy the rom contents after this point - fix_snes_checksum(&mut patcher.rom); + fix_snes_checksum(patcher.rom); Ok(rom) } From aac4bb04e2f6b86472a10e19bbc1e56e6a4df6cd Mon Sep 17 00:00:00 2001 From: nn <53490794+nn357@users.noreply.github.com> Date: Sat, 17 Jan 2026 02:34:04 +0900 Subject: [PATCH 3/5] formatting? --- rust/maprando/src/patch.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index df35eaf14..c638e2eb2 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -3312,10 +3312,8 @@ fn fix_snes_checksum(rom: &mut Rom) { let data = &mut rom.data; let mut sum: u32 = 0; - - data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].fill(0xFF); // clear out the checksum - data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].fill(0x00); // and the compliment - + data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].fill(0xFF); // clear out the checksum + data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].fill(0x00); // and the compliment for &b in data.iter() { sum = sum.wrapping_add(b as u32); @@ -3327,10 +3325,10 @@ fn fix_snes_checksum(rom: &mut Rom) { data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].copy_from_slice(&complement.to_le_bytes()); data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].copy_from_slice(&checksum.to_le_bytes()); - + println!( "New checksum data: complement = {:04X}, checksum = {:04X}", - complement,checksum + complement, checksum ); } @@ -3436,7 +3434,7 @@ pub fn make_rom( mosaic_themes, )?; - // ROM Checksum FIX: Do not modifiy the rom contents after this point + // ROM Checksum FIX: Do not modifiy the rom contents after this point fix_snes_checksum(patcher.rom); Ok(rom) From 4485db49188e9a4ed838ff0d7537e7206101acfa Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Sat, 17 Jan 2026 07:43:05 -0700 Subject: [PATCH 4/5] Update rust/maprando/src/patch.rs --- rust/maprando/src/patch.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index c638e2eb2..21e1a15e2 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -3325,11 +3325,6 @@ fn fix_snes_checksum(rom: &mut Rom) { data[CHECKSUM_ADDR..CHECKSUM_ADDR + 2].copy_from_slice(&complement.to_le_bytes()); data[CHECKSUM_ADDR + 2..CHECKSUM_ADDR + 4].copy_from_slice(&checksum.to_le_bytes()); - - println!( - "New checksum data: complement = {:04X}, checksum = {:04X}", - complement, checksum - ); } pub fn make_rom( From 4685d9d78e60409f48d05d33b2a44357032b59f2 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Sat, 17 Jan 2026 07:43:59 -0700 Subject: [PATCH 5/5] Update rust/maprando/src/patch.rs --- rust/maprando/src/patch.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index 21e1a15e2..021670d2f 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -3429,7 +3429,7 @@ pub fn make_rom( mosaic_themes, )?; - // ROM Checksum FIX: Do not modifiy the rom contents after this point + // ROM Checksum: Do not modify the ROM contents after this point fix_snes_checksum(patcher.rom); Ok(rom)