Skip to content

Commit

Permalink
Bumper Stickers and Meritous: Options and world: multiworld fixes (Ar…
Browse files Browse the repository at this point in the history
…chipelagoMW#3281)

* Update Options.py

* Update __init__.py

* Correct case

* Correct case

* Update Meritous and actually use Options

* Oops

* Fixing world: multiworld
  • Loading branch information
Exempt-Medic authored May 12, 2024
1 parent 701fbab commit f38655d
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 53 deletions.
22 changes: 12 additions & 10 deletions worlds/bumpstik/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT

from dataclasses import dataclass

import typing
from Options import Option, Range
from Options import Option, Range, PerGameCommonOptions


class TaskAdvances(Range):
Expand Down Expand Up @@ -69,12 +71,12 @@ class KillerTrapWeight(Range):
default = 0


bumpstik_options: typing.Dict[str, type(Option)] = {
"task_advances": TaskAdvances,
"turners": Turners,
"paint_cans": PaintCans,
"trap_count": Traps,
"rainbow_trap_weight": RainbowTrapWeight,
"spinner_trap_weight": SpinnerTrapWeight,
"killer_trap_weight": KillerTrapWeight
}
@dataclass
class BumpstikOptions(PerGameCommonOptions):
task_advances: TaskAdvances
turners: Turners
paint_cans: PaintCans
trap_count: Traps
rainbow_trap_weight: RainbowTrapWeight
spinner_trap_weight: SpinnerTrapWeight
killer_trap_weight: KillerTrapWeight
10 changes: 5 additions & 5 deletions worlds/bumpstik/Regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def _generate_entrances(player: int, entrance_list: [str], parent: Region):
return [Entrance(player, entrance, parent) for entrance in entrance_list]


def create_regions(world: MultiWorld, player: int):
def create_regions(multiworld: MultiWorld, player: int):
region_map = {
"Menu": level1_locs + ["Bonus Booster 1"] + [f"Treasure Bumper {i + 1}" for i in range(8)],
"Level 1": level2_locs + ["Bonus Booster 2"] + [f"Treasure Bumper {i + 9}" for i in range(8)],
Expand All @@ -34,17 +34,17 @@ def create_regions(world: MultiWorld, player: int):

for x, region_name in enumerate(region_map):
region_list = region_map[region_name]
region = Region(region_name, player, world)
region = Region(region_name, player, multiworld)
for location_name in region_list:
region.locations += [BumpStikLocation(
player, location_name, location_table[location_name], region)]
if x < 4:
region.exits += _generate_entrances(player,
[f"To Level {x + 1}"], region)

world.regions += [region]
multiworld.regions += [region]

for entrance in entrance_map:
connection = world.get_entrance(f"To {entrance}", player)
connection = multiworld.get_entrance(f"To {entrance}", player)
connection.access_rule = entrance_map[entrance]
connection.connect(world.get_region(entrance, player))
connection.connect(multiworld.get_region(entrance, player))
21 changes: 11 additions & 10 deletions worlds/bumpstik/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,11 @@ class BumpStikWorld(World):

required_client_version = (0, 3, 8)

option_definitions = bumpstik_options
options: BumpstikOptions
options_dataclass = BumpstikOptions

def __init__(self, world: MultiWorld, player: int):
super(BumpStikWorld, self).__init__(world, player)
def __init__(self, multiworld: MultiWorld, player: int):
super(BumpStikWorld, self).__init__(multiworld, player)
self.task_advances = TaskAdvances.default
self.turners = Turners.default
self.paint_cans = PaintCans.default
Expand Down Expand Up @@ -86,13 +87,13 @@ def get_filler_item_name(self) -> str:
return "Nothing"

def generate_early(self):
self.task_advances = self.multiworld.task_advances[self.player].value
self.turners = self.multiworld.turners[self.player].value
self.paint_cans = self.multiworld.paint_cans[self.player].value
self.traps = self.multiworld.trap_count[self.player].value
self.rainbow_trap_weight = self.multiworld.rainbow_trap_weight[self.player].value
self.spinner_trap_weight = self.multiworld.spinner_trap_weight[self.player].value
self.killer_trap_weight = self.multiworld.killer_trap_weight[self.player].value
self.task_advances = self.options.task_advances.value
self.turners = self.options.turners.value
self.paint_cans = self.options.paint_cans.value
self.traps = self.options.trap_count.value
self.rainbow_trap_weight = self.options.rainbow_trap_weight.value
self.spinner_trap_weight = self.options.spinner_trap_weight.value
self.killer_trap_weight = self.options.killer_trap_weight.value

def create_regions(self):
create_regions(self.multiworld, self.player)
Expand Down
18 changes: 10 additions & 8 deletions worlds/meritous/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT

from dataclasses import dataclass

import typing
from Options import Option, DeathLink, Toggle, DefaultOnToggle, Choice
from Options import Option, DeathLink, Toggle, DefaultOnToggle, Choice, PerGameCommonOptions


cost_scales = {
Expand Down Expand Up @@ -51,10 +53,10 @@ class ItemCacheCost(Choice):
default = 0


meritous_options: typing.Dict[str, type(Option)] = {
"goal": Goal,
"include_psi_keys": IncludePSIKeys,
"include_evolution_traps": IncludeEvolutionTraps,
"item_cache_cost": ItemCacheCost,
"death_link": DeathLink
}
@dataclass
class MeritousOptions(PerGameCommonOptions):
goal: Goal
include_psi_keys: IncludePSIKeys
include_evolution_traps: IncludeEvolutionTraps
item_cache_cost: ItemCacheCost
death_link: DeathLink
22 changes: 11 additions & 11 deletions worlds/meritous/Regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def _generate_entrances(player: int, entrance_list: [str], parent: Region):
return [Entrance(player, entrance, parent) for entrance in entrance_list]


def create_regions(world: MultiWorld, player: int):
def create_regions(multiworld: MultiWorld, player: int):
regions = ["First", "Second", "Third", "Last"]
bosses = ["Meridian", "Ataraxia", "Merodach"]

Expand All @@ -23,7 +23,7 @@ def create_regions(world: MultiWorld, player: int):
if x == 0:
insidename = "Menu"

region = Region(insidename, player, world)
region = Region(insidename, player, multiworld)
for store in ["Alpha Cache", "Beta Cache", "Gamma Cache", "Reward Chest"]:
for y in range(1, 7):
loc_name = f"{store} {(x * 6) + y}"
Expand All @@ -42,26 +42,26 @@ def create_regions(world: MultiWorld, player: int):
"Back to the entrance with the Knife"],
region)

world.regions += [region]
multiworld.regions += [region]

for x, boss in enumerate(bosses):
boss_region = Region(boss, player, world)
boss_region = Region(boss, player, multiworld)
boss_region.locations += [
MeritousLocation(player, boss, location_table[boss], boss_region),
MeritousLocation(player, f"{boss} Defeat", None, boss_region)
]
boss_region.exits = _generate_entrances(player, [f"To {regions[x + 1]} Quarter"], boss_region)
world.regions.append(boss_region)
multiworld.regions.append(boss_region)

region_final_boss = Region("Final Boss", player, world)
region_final_boss = Region("Final Boss", player, multiworld)
region_final_boss.locations += [MeritousLocation(
player, "Wervyn Anixil", None, region_final_boss)]
world.regions.append(region_final_boss)
multiworld.regions.append(region_final_boss)

region_tfb = Region("True Final Boss", player, world)
region_tfb = Region("True Final Boss", player, multiworld)
region_tfb.locations += [MeritousLocation(
player, "Wervyn Anixil?", None, region_tfb)]
world.regions.append(region_tfb)
multiworld.regions.append(region_tfb)

entrance_map = {
"To Meridian": {
Expand Down Expand Up @@ -103,6 +103,6 @@ def create_regions(world: MultiWorld, player: int):

for entrance in entrance_map:
connection_data = entrance_map[entrance]
connection = world.get_entrance(entrance, player)
connection = multiworld.get_entrance(entrance, player)
connection.access_rule = connection_data["rule"]
connection.connect(world.get_region(connection_data["to"], player))
connection.connect(multiworld.get_region(connection_data["to"], player))
19 changes: 10 additions & 9 deletions worlds/meritous/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from Fill import fill_restrictive
from .Items import item_table, item_groups, MeritousItem
from .Locations import location_table, MeritousLocation
from .Options import meritous_options, cost_scales
from .Options import MeritousOptions, cost_scales
from .Regions import create_regions
from .Rules import set_rules
from ..AutoWorld import World, WebWorld
Expand Down Expand Up @@ -49,10 +49,11 @@ class MeritousWorld(World):
# NOTE: Remember to change this before this game goes live
required_client_version = (0, 2, 4)

option_definitions = meritous_options
options: MeritousOptions
options_dataclass = MeritousOptions

def __init__(self, world: MultiWorld, player: int):
super(MeritousWorld, self).__init__(world, player)
def __init__(self, multiworld: MultiWorld, player: int):
super(MeritousWorld, self).__init__(multiworld, player)
self.goal = 0
self.include_evolution_traps = False
self.include_psi_keys = False
Expand Down Expand Up @@ -97,11 +98,11 @@ def get_filler_item_name(self) -> str:
return "Crystals x2000"

def generate_early(self):
self.goal = self.multiworld.goal[self.player].value
self.include_evolution_traps = self.multiworld.include_evolution_traps[self.player].value
self.include_psi_keys = self.multiworld.include_psi_keys[self.player].value
self.item_cache_cost = self.multiworld.item_cache_cost[self.player].value
self.death_link = self.multiworld.death_link[self.player].value
self.goal = self.options.goal.value
self.include_evolution_traps = self.options.include_evolution_traps.value
self.include_psi_keys = self.options.include_psi_keys.value
self.item_cache_cost = self.options.item_cache_cost.value
self.death_link = self.options.death_link.value

def create_regions(self):
create_regions(self.multiworld, self.player)
Expand Down

0 comments on commit f38655d

Please sign in to comment.