Bumper Stickers and Meritous: Options and world: multiworld fixes (#3281)
* Update Options.py * Update __init__.py * Correct case * Correct case * Update Meritous and actually use Options * Oops * Fixing world: multiworld
This commit is contained in:
parent
701fbab837
commit
f38655d6b6
|
@ -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):
|
||||
|
@ -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
|
||||
|
|
|
@ -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)],
|
||||
|
@ -34,7 +34,7 @@ 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)]
|
||||
|
@ -42,9 +42,9 @@ def create_regions(world: MultiWorld, player: int):
|
|||
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))
|
||||
|
|
|
@ -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
|
||||
|
@ -86,13 +87,13 @@ class BumpStikWorld(World):
|
|||
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)
|
||||
|
|
|
@ -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 = {
|
||||
|
@ -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
|
||||
|
|
|
@ -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"]
|
||||
|
||||
|
@ -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}"
|
||||
|
@ -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": {
|
||||
|
@ -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))
|
||||
|
|
|
@ -7,7 +7,7 @@ from BaseClasses import Item, MultiWorld, Tutorial
|
|||
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
|
||||
|
@ -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
|
||||
|
@ -97,11 +98,11 @@ class MeritousWorld(World):
|
|||
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)
|
||||
|
|
Loading…
Reference in New Issue