MLSS: Add new goal + Update basepatch to standalone equivalent (#4409)

* Item groups + small changes

* Add alternate goal

* New Locations and Logic Updates + Basepatch

* Update basepatch.bsdiff

* Update Basepatch

* Update basepatch.bsdiff

* Update bowsers castle logic with emblem hunt

* Update Archipelago Unittests.run.xml

* Update Archipelago Unittests.run.xml

* Fix for overlapping ROM addresses

* Update Rom.py

* Update __init__.py

* Update basepatch.bsdiff

* Update Rom.py

* Update client with new helper function

* Update basepatch.bsdiff

* Update worlds/mlss/__init__.py

Co-authored-by: qwint <qwint.42@gmail.com>

* Update worlds/mlss/__init__.py

Co-authored-by: qwint <qwint.42@gmail.com>

* Review Refactor

* Review Refactor

---------

Co-authored-by: qwint <qwint.42@gmail.com>
This commit is contained in:
jamesbrq
2025-03-09 11:37:15 -04:00
committed by GitHub
parent 4ebabc1208
commit 2639796255
12 changed files with 234 additions and 39 deletions

View File

@@ -28,11 +28,14 @@ def set_rules(world: "MLSSWorld", excluded):
lambda state: StateLogic.canDig(state, world.player),
)
if "Shop" in location.name and "Coffee" not in location.name and location.name not in excluded:
forbid_item(world.get_location(location.name), "Hammers", world.player)
if "Badge" in location.name or "Pants" in location.name:
add_rule(
world.get_location(location.name),
lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player),
lambda state: (StateLogic.brooch(state, world.player) and StateLogic.fruits(state, world.player)
and (StateLogic.hammers(state, world.player)
or StateLogic.fire(state, world.player)
or StateLogic.thunder(state, world.player)))
or StateLogic.rose(state, world.player),
)
if location.itemType != 0 and location.name not in excluded:
if "Bowser" in location.name and world.options.castle_skip:
@@ -99,9 +102,86 @@ def set_rules(world: "MLSSWorld", excluded):
lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player),
)
forbid_item(
world.get_location(LocationName.SSChuckolaMembershipCard), "Nuts", world.player
) # Bandaid Fix
if world.options.goal == 1 and not world.options.castle_skip:
add_rule(
world.get_location(LocationName.BowsersCastleRoyCorridorBlock1),
lambda state: StateLogic.canDig(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleRoyCorridorBlock2),
lambda state: StateLogic.canDig(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleMiniMarioSidescrollerBlock1),
lambda state: StateLogic.canDig(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleMiniMarioSidescrollerBlock2),
lambda state: StateLogic.canDig(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleMiniMarioMazeBlock1),
lambda state: StateLogic.canDig(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleMiniMarioMazeBlock2),
lambda state: StateLogic.canDig(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleBeforeWendyFightBlock1),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.fire(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleBeforeWendyFightBlock2),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.fire(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleLarryRoomBlock),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.canDash(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleWendyLarryHallwayDigspot),
lambda state: StateLogic.ultra(state, world.player)
and StateLogic.fire(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleBeforeFawfulFightBlock1),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.canDash(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleBeforeFawfulFightBlock2),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.canDash(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleGreatDoorBlock1),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.canDash(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.BowsersCastleGreatDoorBlock2),
lambda state: StateLogic.canDig(state, world.player)
and StateLogic.ultra(state, world.player)
and StateLogic.canDash(state, world.player)
and StateLogic.canCrash(state, world.player)
)
add_rule(
world.get_location(LocationName.HoohooVillageHammerHouseBlock),
@@ -398,6 +478,10 @@ def set_rules(world: "MLSSWorld", excluded):
world.get_location(LocationName.BeanstarPieceWinkleArea),
lambda state: StateLogic.winkle(state, world.player),
)
add_rule(
world.get_location("Guffawha Ruins Block"),
lambda state: StateLogic.thunder(state, world.player),
)
add_rule(
world.get_location(LocationName.GwarharLagoonSpangleReward),
lambda state: StateLogic.spangle(state, world.player),
@@ -406,6 +490,18 @@ def set_rules(world: "MLSSWorld", excluded):
world.get_location(LocationName.PantsShopMomPiranhaFlag1),
lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player),
)
add_rule(
world.get_location("Chucklehuck Woods Solo Luigi Cave Room 2 Block"),
lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDig(state, world.player),
)
add_rule(
world.get_location("Chucklehuck Woods Solo Luigi Cave Room 3 Block 1"),
lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDig(state, world.player),
)
add_rule(
world.get_location("Chucklehuck Woods Solo Luigi Cave Room 3 Block 2"),
lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDig(state, world.player),
)
add_rule(
world.get_location(LocationName.PantsShopMomPiranhaFlag2),
lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player),
@@ -600,6 +696,14 @@ def set_rules(world: "MLSSWorld", excluded):
world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock1),
lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player),
)
add_rule(
world.get_location("Chucklehuck Woods Solo Luigi Cave Room 1 Coin Block 1"),
lambda state: StateLogic.canDig(state, world.player) and StateLogic.brooch(state, world.player),
)
add_rule(
world.get_location("Chucklehuck Woods Solo Luigi Cave Room 1 Coin Block 2"),
lambda state: StateLogic.canDig(state, world.player) and StateLogic.brooch(state, world.player),
)
add_rule(
world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock2),
lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player),
@@ -679,7 +783,7 @@ def set_rules(world: "MLSSWorld", excluded):
add_rule(
world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2CoinBlock),
lambda state: StateLogic.canDash(state, world.player)
and (StateLogic.membership(state, world.player) or StateLogic.surfable(state, world.player)),
and (StateLogic.membership(state, world.player) or StateLogic.surfable(state, world.player)),
)
add_rule(
world.get_location(LocationName.JokesEndSecondFloorWestRoomCoinBlock),