Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Super Mario 64: Rework logic for 100 Coins #4131

Merged
merged 15 commits into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
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
15 changes: 13 additions & 2 deletions worlds/sm64ex/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,20 @@
from .Items import action_item_table

class EnableCoinStars(DefaultOnToggle):
"""Disable to Ignore 100 Coin Stars. You can still collect them, but they don't do anything.
Removes 15 locations from the pool."""
"""
Determine logic for 100 Coin Stars.

Off - Removed from pool. You can still collect them, but they don't do anything.
Optimal for ignoring 100 Coin Stars entirely. Removes 15 locations from the pool.

On - Kept in pool, potentially randomized.

Vanilla - Kept in pool, but NOT randomized.
"""
display_name = "Enable 100 Coin Stars"
option_Off = 0
option_On = 1
option_Vanilla = 2
Copy link
Member

@NewSoupVi NewSoupVi Nov 4, 2024

Choose a reason for hiding this comment

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

Hmm, this apworld uses this casing for options, huh? That's odd, it's generally supposed to be written as option_off. But the rest of the options are like this too, so...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed. Would have preferred to stick with the casing used in the file to be consistent, but Options API.md does use snake case in its examples.



class StrictCapRequirements(DefaultOnToggle):
Expand Down
30 changes: 15 additions & 15 deletions worlds/sm64ex/Regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,28 +89,28 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
"BoB: Mario Wings to the Sky", "BoB: Behind Chain Chomp's Gate", "BoB: Bob-omb Buddy")
bob_island = create_subregion(regBoB, "BoB: Island", "BoB: Shoot to the Island in the Sky", "BoB: Find the 8 Red Coins")
regBoB.subregions = [bob_island]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regBoB, "BoB: 100 Coins")

regWhomp = create_region("Whomp's Fortress", player, world)
create_locs(regWhomp, "WF: Chip Off Whomp's Block", "WF: Shoot into the Wild Blue", "WF: Red Coins on the Floating Isle",
"WF: Fall onto the Caged Island", "WF: Blast Away the Wall")
wf_tower = create_subregion(regWhomp, "WF: Tower", "WF: To the Top of the Fortress", "WF: Bob-omb Buddy")
regWhomp.subregions = [wf_tower]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
NewSoupVi marked this conversation as resolved.
Show resolved Hide resolved
create_locs(regWhomp, "WF: 100 Coins")

regJRB = create_region("Jolly Roger Bay", player, world)
create_locs(regJRB, "JRB: Plunder in the Sunken Ship", "JRB: Can the Eel Come Out to Play?", "JRB: Treasure of the Ocean Cave",
"JRB: Blast to the Stone Pillar", "JRB: Through the Jet Stream", "JRB: Bob-omb Buddy")
jrb_upper = create_subregion(regJRB, 'JRB: Upper', "JRB: Red Coins on the Ship Afloat")
regJRB.subregions = [jrb_upper]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(jrb_upper, "JRB: 100 Coins")

regCCM = create_region("Cool, Cool Mountain", player, world)
create_default_locs(regCCM, locCCM_table)
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regCCM, "CCM: 100 Coins")

regBBH = create_region("Big Boo's Haunt", player, world)
Expand All @@ -119,7 +119,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
bbh_third_floor = create_subregion(regBBH, "BBH: Third Floor", "BBH: Eye to Eye in the Secret Room")
bbh_roof = create_subregion(bbh_third_floor, "BBH: Roof", "BBH: Big Boo's Balcony", "BBH: 1Up Block Top of Mansion")
regBBH.subregions = [bbh_third_floor, bbh_roof]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regBBH, "BBH: 100 Coins")

regPSS = create_region("The Princess's Secret Slide", player, world)
Expand All @@ -142,15 +142,15 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
hmc_red_coin_area = create_subregion(regHMC, "HMC: Red Coin Area", "HMC: Elevate for 8 Red Coins")
hmc_pit_islands = create_subregion(regHMC, "HMC: Pit Islands", "HMC: A-Maze-Ing Emergency Exit", "HMC: 1Up Block above Pit")
regHMC.subregions = [hmc_red_coin_area, hmc_pit_islands]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(hmc_red_coin_area, "HMC: 100 Coins")

regLLL = create_region("Lethal Lava Land", player, world)
create_locs(regLLL, "LLL: Boil the Big Bully", "LLL: Bully the Bullies",
"LLL: 8-Coin Puzzle with 15 Pieces", "LLL: Red-Hot Log Rolling")
lll_upper_volcano = create_subregion(regLLL, "LLL: Upper Volcano", "LLL: Hot-Foot-It into the Volcano", "LLL: Elevator Tour in the Volcano")
regLLL.subregions = [lll_upper_volcano]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regLLL, "LLL: 100 Coins")

regSSL = create_region("Shifting Sand Land", player, world)
Expand All @@ -160,13 +160,13 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
ssl_upper_pyramid = create_subregion(regSSL, "SSL: Upper Pyramid", "SSL: Inside the Ancient Pyramid",
"SSL: Stand Tall on the Four Pillars", "SSL: Pyramid Puzzle")
regSSL.subregions = [ssl_upper_pyramid]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regSSL, "SSL: 100 Coins")

regDDD = create_region("Dire, Dire Docks", player, world)
create_locs(regDDD, "DDD: Board Bowser's Sub", "DDD: Chests in the Current", "DDD: Through the Jet Stream",
"DDD: The Manta Ray's Reward", "DDD: Collect the Caps...", "DDD: Pole-Jumping for Red Coins")
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regDDD, "DDD: 100 Coins")

regCotMC = create_region("Cavern of the Metal Cap", player, world)
Expand All @@ -183,7 +183,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):

regSL = create_region("Snowman's Land", player, world)
create_default_locs(regSL, locSL_table)
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(regSL, "SL: 100 Coins")

regWDW = create_region("Wet-Dry World", player, world)
Expand All @@ -192,7 +192,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
"WDW: Secrets in the Shallows & Sky", "WDW: Bob-omb Buddy")
wdw_downtown = create_subregion(regWDW, "WDW: Downtown", "WDW: Go to Town for Red Coins", "WDW: Quick Race Through Downtown!", "WDW: 1Up Block in Downtown")
regWDW.subregions = [wdw_top, wdw_downtown]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(wdw_top, "WDW: 100 Coins")

regTTM = create_region("Tall, Tall Mountain", player, world)
Expand All @@ -201,7 +201,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
ttm_top = create_subregion(ttm_middle, "TTM: Top", "TTM: Scale the Mountain", "TTM: Mystery of the Monkey Cage",
"TTM: Mysterious Mountainside", "TTM: Breathtaking View from Bridge")
regTTM.subregions = [ttm_middle, ttm_top]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(ttm_top, "TTM: 100 Coins")

create_region("Tiny-Huge Island (Huge)", player, world)
Expand All @@ -213,7 +213,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
"THI: 1Up Block THI Large near Start", "THI: 1Up Block Windy Area")
thi_large_top = create_subregion(thi_pipes, "THI: Large Top", "THI: Make Wiggler Squirm")
regTHI.subregions = [thi_pipes, thi_large_top]
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
create_locs(thi_large_top, "THI: 100 Coins")

regFloor3 = create_region("Third Floor", player, world)
Expand All @@ -224,7 +224,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
ttc_upper = create_subregion(ttc_lower, "TTC: Upper", "TTC: Timed Jumps on Moving Bars", "TTC: The Pit and the Pendulums")
ttc_top = create_subregion(ttc_upper, "TTC: Top", "TTC: 1Up Block Midway Up", "TTC: Stomp on the Thwomp", "TTC: 1Up Block at the Top")
regTTC.subregions = [ttc_lower, ttc_upper, ttc_top]
if options.enable_coin_stars:
if options.enable_coin_stars != 0 :
create_locs(ttc_top, "TTC: 100 Coins")

regRR = create_region("Rainbow Ride", player, world)
Expand All @@ -234,7 +234,7 @@ def create_regions(world: MultiWorld, options: SM64Options, player: int):
rr_cruiser = create_subregion(regRR, "RR: Cruiser", "RR: Cruiser Crossing the Rainbow", "RR: Somewhere Over the Rainbow")
rr_house = create_subregion(regRR, "RR: House", "RR: The Big House in the Sky", "RR: 1Up Block On House in the Sky")
regRR.subregions = [rr_maze, rr_cruiser, rr_house]
if options.enable_coin_stars:
if options.enable_coin_stars != 0 :
create_locs(rr_maze, "RR: 100 Coins")

regWMotR = create_region("Wing Mario over the Rainbow", player, world)
Expand Down
2 changes: 1 addition & 1 deletion worlds/sm64ex/Rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def set_rules(world, options: SM64Options, player: int, area_connections: dict,
# Bowser in the Sky
rf.assign_rule("BitS: Top", "CL+TJ | CL+SF+LG | MOVELESS & TJ+WK+LG")
# 100 Coin Stars
if options.enable_coin_stars:
if options.enable_coin_stars != 0:
rf.assign_rule("BoB: 100 Coins", "CANN & WC | CANNLESS & WC & TJ")
rf.assign_rule("WF: 100 Coins", "GP | MOVELESS")
rf.assign_rule("JRB: 100 Coins", "GP & {JRB: Upper}")
Expand Down
19 changes: 18 additions & 1 deletion worlds/sm64ex/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class SM64World(World):

def generate_early(self):
max_stars = 120
if (not self.options.enable_coin_stars):
if (self.options.enable_coin_stars == 0):
max_stars -= 15
self.move_rando_bitvec = 0
if self.options.enable_move_rando:
Expand Down Expand Up @@ -164,6 +164,23 @@ def generate_basic(self):
self.multiworld.get_location("Wing Mario Over the Rainbow 1Up Block", self.player).place_locked_item(self.create_item("1Up Mushroom"))
self.multiworld.get_location("Bowser in the Sky 1Up Block", self.player).place_locked_item(self.create_item("1Up Mushroom"))

if (self.options.enable_coin_stars == 2):
self.multiworld.get_location("BoB: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("WF: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("JRB: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("CCM: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("BBH: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("HMC: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("LLL: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("SSL: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("DDD: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("SL: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("WDW: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("TTM: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("THI: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("TTC: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))
self.multiworld.get_location("RR: 100 Coins", self.player).place_locked_item(self.create_item("Power Star"))

def get_filler_item_name(self) -> str:
return "1Up Mushroom"

Expand Down