SMW: v1.1 Content Update (#1344)

* Make Bowser unkillable on Egg Hunt

* Increment Data Package version

Changed a location name.

* Baseline for Bowser Rooms shuffling

* Add boss shuffle

* Remove extra space

* Overworld Palette Shuffle

* Fix Literature Trap typo

* Handle Queuing traps and new Timer Trap

* Fix trap name and actually create them

* Early Climb and Overworld Speed

* Add correct tooltip for Early Climb

* Tooltip text edit

* Address unconnected regions

* Add option to fully exclude Special Zone levels from the seed

* Fix Chocolate Island 4 Dragon Coins logic

* Update worlds/smw/Client.py to use `getattr`
This commit is contained in:
PoryGone
2023-01-29 23:53:56 -05:00
committed by GitHub
parent 428344b6bc
commit dc2aa5f41e
11 changed files with 425 additions and 58 deletions

View File

@@ -5,12 +5,12 @@ import threading
from BaseClasses import Item, MultiWorld, Tutorial, ItemClassification
from .Items import SMWItem, ItemData, item_table
from .Locations import SMWLocation, all_locations, setup_locations
from .Locations import SMWLocation, all_locations, setup_locations, special_zone_level_names, special_zone_dragon_coin_names
from .Options import smw_options
from .Regions import create_regions, connect_regions
from .Levels import full_level_list, generate_level_list, location_id_to_level_id
from .Rules import set_rules
from ..generic.Rules import add_rule
from ..generic.Rules import add_rule, exclusion_rules
from .Names import ItemName, LocationName
from .Client import SMWSNIClient
from ..AutoWorld import WebWorld, World
@@ -41,7 +41,7 @@ class SMWWorld(World):
game: str = "Super Mario World"
option_definitions = smw_options
topology_present = False
data_version = 2
data_version = 3
required_client_version = (0, 3, 5)
item_name_to_id = {name: data.code for name, data in item_table.items()}
@@ -74,6 +74,10 @@ class SMWWorld(World):
return slot_data
def generate_early(self):
if self.multiworld.early_climb[self.player]:
self.multiworld.local_early_items[self.player][ItemName.mario_climb] = 1
def generate_basic(self):
itempool: typing.List[SMWItem] = []
@@ -89,6 +93,15 @@ class SMWWorld(World):
add_rule(self.multiworld.get_region(LocationName.chocolate_island_1_tile, self.player).entrances[0], lambda state: state.has(ItemName.koopaling, self.player, 5))
add_rule(self.multiworld.get_region(LocationName.valley_of_bowser_1_tile, self.player).entrances[0], lambda state: state.has(ItemName.koopaling, self.player, 6))
if self.multiworld.exclude_special_zone[self.player]:
exclusion_pool = set()
if self.multiworld.dragon_coin_checks[self.player]:
exclusion_pool.update(special_zone_level_names)
exclusion_pool.update(special_zone_dragon_coin_names)
elif self.multiworld.number_of_yoshi_eggs[self.player].value <= 72:
exclusion_pool.update(special_zone_level_names)
exclusion_rules(self.multiworld, self.player, exclusion_pool)
total_required_locations = 96
if self.multiworld.dragon_coin_checks[self.player]:
total_required_locations += 49
@@ -120,6 +133,7 @@ class SMWWorld(World):
trap_weights += ([ItemName.ice_trap] * self.multiworld.ice_trap_weight[self.player].value)
trap_weights += ([ItemName.stun_trap] * self.multiworld.stun_trap_weight[self.player].value)
trap_weights += ([ItemName.literature_trap] * self.multiworld.literature_trap_weight[self.player].value)
trap_weights += ([ItemName.timer_trap] * self.multiworld.timer_trap_weight[self.player].value)
trap_count = 0 if (len(trap_weights) == 0) else math.ceil(junk_count * (self.multiworld.trap_fill_percentage[self.player].value / 100.0))
junk_count -= trap_count