Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
63884e5
initial implementation
nn357 May 13, 2026
8e09d78
more backend
nn357 May 14, 2026
a018102
refine game variations to reflect "custom"
nn357 May 14, 2026
549111b
more backend
nn357 May 14, 2026
e353da2
more backend
nn357 May 15, 2026
02b5e79
Update map_station_activation.html
nn357 May 15, 2026
d5ab29e
fix settings
nn357 May 15, 2026
4bffe63
update scripts
nn357 May 15, 2026
3ce7f63
update settings
nn357 May 15, 2026
6054783
implement basic bitmask patching
nn357 May 23, 2026
b22bfef
remove some dead code.
nn357 May 23, 2026
7e86a7f
add more backend.
nn357 May 24, 2026
375f193
fix co-ordinate calculation
nn357 May 24, 2026
6a14c9e
revert other back to other
nn357 May 24, 2026
537570e
remove debug code
nn357 May 24, 2026
61586ff
use existing logic to classifiy items based on tier settings
nn357 May 24, 2026
3cd88b4
add details to seed page
nn357 May 24, 2026
9bb296a
fix seed header display
nn357 May 24, 2026
cb9e4e8
update ips
nn357 May 24, 2026
03bf220
formatting
nn357 May 24, 2026
f6e03cb
more formatting
nn357 May 24, 2026
64204b7
fix settings upgrade
nn357 May 24, 2026
7d78a26
remove excess blank lines, misplaced game variation text
blkerby May 29, 2026
5dc47b5
clean up some formatting/spelling
blkerby May 29, 2026
cd43d31
update code based on feedback
nn357 May 29, 2026
d53f8f3
add separate sub area behaviour
nn357 May 30, 2026
aa20255
remove extra lines
nn357 May 31, 2026
3ad17a6
A few adjustments
blkerby Jun 3, 2026
0a90838
fix presets and collapse an if bracket in traverse that clippy was wa…
nn357 Jun 5, 2026
36117db
fix mapstation resetting partially revealed bits on activation
nn357 Jun 5, 2026
ac71d24
update map station activation
nn357 Jun 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified patches/ips/map_progress_maintain.ips
Binary file not shown.
1 change: 1 addition & 0 deletions patches/rom_map/Bank 89.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
AF00 - AF31: ; hud_expansion_opaque.asm
AF60 - B0BA: ; Area FX.asm
B100 - B200: nothing item graphics (zeros, used only for Bomb Torizo Room; nothing_item.asm)
B200 - B800 : mapstation partial reveal bitmask.
2 changes: 1 addition & 1 deletion patches/rom_map/Bank 90.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ F980 - F99E: ; respin.asm
FC00 - FC0F: ; Fake Lava.asm
FC10 - FC1C: ; crash_handle_yapping.asm
FC20 - FC3A: ; remove_spikesuit.asm
FC40 - FCBA: ; split_speed.asm
FC40 - FCBA: ; split_speed.asm
26 changes: 7 additions & 19 deletions patches/src/map_progress_maintain.asm
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
arch snes.cpu
lorom

!map_station_reveal_type = $90F700 ; 0 = Full reveal, 1 = Partial reveal
!map_reveal_tile_table = $90FA00 ; must match reference in patch.rs
!bank_90_freespace_start = $90F702
!map_reveal_tile_table = $90FA00 ; must match reference in patch.rs (fn write_map_reveal_tiles)
!bank_90_freespace_start = $90F700
!bank_90_freespace_end = $90F800


Expand All @@ -30,9 +29,6 @@ org $90AB6D
org $90A98B
jmp mark_progress

org !map_station_reveal_type
dw $0000 ; default: full reveal

org !bank_90_freespace_start
mark_progress:
lda $12 ; Samus X map coordinate
Expand Down Expand Up @@ -108,26 +104,18 @@ activate_map_station_hook:
tax ; X <- map area * $100
ldy #$0080 ; Y <- loop counter (number of words to fill with #$FFFF)

lda !map_station_reveal_type
bne .partial_only_loop

.loop:
lda $829727, x
sta $702000, x
sta $702700, x
ora $702000, x
sta $702000, x ; maptiles bitmask
lda $89b200, x
ora $702700, x ; don't clear any bits already marked explored as it can break scrolling with sub area reveal set to off.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we also want to do the same thing for the revealed bitmask (ora $702000, x). Otherwise activating the map could change revealed tiles back to only partially revealed. It might not result in a visible problem if the explored bits still take priority; still, explored + not revealed is a weird state that I wouldn't want to rely on working correctly.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure yeah that makes sense. Will give it a try.

sta $702700, x ; partially revealed bitmask
inx
inx
dey
bne .loop
bra .leave

.partial_only_loop:
sta $702700, x
inx
inx
dey
bne .partial_only_loop
.leave
jsr cross_area_reveal
rtl

Expand Down
2 changes: 1 addition & 1 deletion rust/data/map_tiles.json
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@
"roomId": 301,
"roomName": "Kraid Recharge Station",
"mapTiles": [
{"coords": [0, 0], "left": "door", "right": "door", "top": "door", "bottom": "door", "interior": "doubleRefill"}
{"coords": [0, 0], "left": "door", "right": "wall", "top": "wall", "bottom": "wall", "interior": "doubleRefill"}
]
},
{
Expand Down
15 changes: 14 additions & 1 deletion rust/data/presets/full-settings/Community Race Season 5.json
Original file line number Diff line number Diff line change
Expand Up @@ -4685,6 +4685,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "4-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": true,
Expand Down Expand Up @@ -4842,7 +4856,6 @@
},
"door_locks_size": "Large",
"maps_revealed": null,
"map_station_reveal": "Full",
"energy_free_shinesparks": false,
"all_enemies_respawn": false,
"race_mode": true,
Expand Down
15 changes: 14 additions & 1 deletion rust/data/presets/full-settings/Default.json
Original file line number Diff line number Diff line change
Expand Up @@ -4597,6 +4597,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "3-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": false,
Expand Down Expand Up @@ -4753,7 +4767,6 @@
"item_dot_change": "Fade",
"transition_letters": true,
"door_locks_size": "Large",
"map_station_reveal": "Full",
"energy_free_shinesparks": false,
"all_enemies_respawn": false,
"disable_spikesuit": false,
Expand Down
15 changes: 14 additions & 1 deletion rust/data/presets/full-settings/Mentor Tournament.json
Original file line number Diff line number Diff line change
Expand Up @@ -4685,6 +4685,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "4-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": true,
Expand Down Expand Up @@ -4842,7 +4856,6 @@
},
"door_locks_size": "Large",
"maps_revealed": null,
"map_station_reveal": "Full",
"energy_free_shinesparks": false,
"all_enemies_respawn": false,
"race_mode": true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4597,6 +4597,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "4-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": true,
Expand Down Expand Up @@ -4754,7 +4768,6 @@
},
"door_locks_size": "Large",
"maps_revealed": null,
"map_station_reveal": "Full",
"energy_free_shinesparks": false,
"all_enemies_respawn": false,
"race_mode": true,
Expand Down
14 changes: 14 additions & 0 deletions rust/data/presets/quality-of-life/Default.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "3-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": false,
Expand Down
14 changes: 14 additions & 0 deletions rust/data/presets/quality-of-life/High.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "4-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": true,
Expand Down
14 changes: 14 additions & 0 deletions rust/data/presets/quality-of-life/Low.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "Uniques",
"room_outline_revealed": false,
"opposite_area_revealed": false,
Expand Down
14 changes: 14 additions & 0 deletions rust/data/presets/quality-of-life/Max.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "4-Tiered",
"room_outline_revealed": true,
"opposite_area_revealed": true,
Expand Down
14 changes: 14 additions & 0 deletions rust/data/presets/quality-of-life/Off.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@
"other": "No",
"all_areas": false
},
"map_station_activation_settings": {
"preset": "Full",
"save_stations": "Full",
"refill_stations": "Full",
"ship": "Full",
"objectives": "Full",
"area_transitions": "Full",
"items1": "Full",
"items2": "Full",
"items3": "Full",
"items4": "Full",
"other": "Full",
"sub_area": "Same"
},
"item_markers": "Simple",
"room_outline_revealed": false,
"opposite_area_revealed": false,
Expand Down
6 changes: 6 additions & 0 deletions rust/maprando-web/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,7 @@ struct SeedData {
item_progression_preset: Option<String>,
difficulty: DifficultyConfig,
quality_of_life_preset: Option<String>,
map_station_activation_preset: Option<String>,
supers_double: bool,
escape_autosave: bool,
mother_brain_fight: String,
Expand Down Expand Up @@ -719,6 +720,11 @@ async fn randomize(
race_mode: settings.other_settings.race_mode,
preset: settings.skill_assumption_settings.preset.clone(),
item_progression_preset: settings.item_progression_settings.preset.clone(),
map_station_activation_preset: settings
.quality_of_life_settings
.map_station_activation_settings
.preset
.map(|p| format!("{:?}", p)),
difficulty: output.difficulty_tiers[0].clone(),
quality_of_life_preset: settings.quality_of_life_settings.preset.clone(),
supers_double: settings.quality_of_life_settings.supers_double,
Expand Down
20 changes: 14 additions & 6 deletions rust/maprando-web/src/randomize_helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ use maprando::{
seed_repository::{Seed, SeedFile},
settings::{
AreaAssignmentBaseOrder, AreaAssignmentPreset, CrashFixesPreset, DisableETankSetting,
DoorLocksSize, ETankRefill, FillerItemPriority, ItemCount, RandomizerSettings,
SpeedBooster, WallJump, get_objective_groups,
DoorLocksSize, ETankRefill, FillerItemPriority, ItemCount, MapStationActivationPreset,
RandomizerSettings, SpeedBooster, WallJump, get_objective_groups,
},
spoiler_log::SpoilerLog,
spoiler_map,
Expand Down Expand Up @@ -157,6 +157,18 @@ impl SeedHeaderTemplate<'_> {
}
}

fn map_station_activation_preset(&self) -> &'static str {
match self
.settings
.quality_of_life_settings
.map_station_activation_settings
.preset
{
Some(MapStationActivationPreset::Partial) => "Partial",
Some(MapStationActivationPreset::Full) => "Full",
None => "Custom",
}
}
fn game_variations(&self) -> Vec<&str> {
let mut game_variations = vec![];
let other_settings = &self.settings.other_settings;
Expand Down Expand Up @@ -185,10 +197,6 @@ impl SeedHeaderTemplate<'_> {
if other_settings.wall_jump == WallJump::Collectible {
game_variations.push("Collectible wall jump");
}
if other_settings.map_station_reveal == maprando::settings::MapStationReveal::Partial {
game_variations.push("Map stations give partial reveal");
}

if other_settings.energy_free_shinesparks {
game_variations.push("Energy-free shinesparks");
}
Expand Down
12 changes: 0 additions & 12 deletions rust/maprando-web/templates/generate/game_variations.html
Original file line number Diff line number Diff line change
Expand Up @@ -58,18 +58,6 @@
<label class="btn btn-outline-primary" for="doorLocksSizeLarge">Large</label>
</div>
</div>
<div class="form-group row" onchange="gameVariationChanged()">
<div class="col-lg-4 col-md-6 my-2">
{% include "help/variations/map_station_reveal.html" %}
<label for="map_station_reveal">Map station activation reveal</label>
</div>
<div id="mapStationReveal" class="col-3 btn-group my-2" role="group">
<input type="radio" class="btn-check" name="map_station_reveal" id="mapStationRevealPartial" value="Partial">
<label class="btn btn-outline-primary" for="mapStationRevealPartial">Partial</label>
<input type="radio" class="btn-check" name="map_station_reveal" id="mapStationRevealFull" value="Full" checked>
<label class="btn btn-outline-primary" for="mapStationRevealFull">Full</label>
</div>
</div>
<div class="form-group row" onchange="gameVariationChanged()">
<div class="col-lg-4 col-md-6 my-2">
{% include "help/variations/energy_free_shinesparks.html" %}
Expand Down
Loading
Loading