mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-20 20:01:31 -06:00
Factorio: implement custom filler items (#4945)
This commit is contained in:
@@ -485,7 +485,7 @@ class World(metaclass=AutoWorldRegister):
|
||||
def get_filler_item_name(self) -> str:
|
||||
"""Called when the item pool needs to be filled with additional items to match location count."""
|
||||
logging.warning(f"World {self} is generating a filler item without custom filler pool.")
|
||||
return self.multiworld.random.choice(tuple(self.item_name_to_id.keys()))
|
||||
return self.random.choice(tuple(self.item_name_to_id.keys()))
|
||||
|
||||
@classmethod
|
||||
def create_group(cls, multiworld: "MultiWorld", new_player_id: int, players: Set[int]) -> World:
|
||||
|
@@ -115,6 +115,7 @@ class Factorio(World):
|
||||
settings: typing.ClassVar[FactorioSettings]
|
||||
trap_names: tuple[str] = ("Evolution", "Attack", "Teleport", "Grenade", "Cluster Grenade", "Artillery",
|
||||
"Atomic Rocket", "Atomic Cliff Remover", "Inventory Spill")
|
||||
want_progressives: dict[str, bool] = collections.defaultdict(lambda: False)
|
||||
|
||||
def __init__(self, world, player: int):
|
||||
super(Factorio, self).__init__(world, player)
|
||||
@@ -133,6 +134,8 @@ class Factorio(World):
|
||||
self.options.max_tech_cost.value, self.options.min_tech_cost.value
|
||||
self.tech_mix = self.options.tech_cost_mix.value
|
||||
self.skip_silo = self.options.silo.value == Silo.option_spawn
|
||||
self.want_progressives = collections.defaultdict(
|
||||
lambda: self.options.progressive.want_progressives(self.random))
|
||||
|
||||
def create_regions(self):
|
||||
player = self.player
|
||||
@@ -201,9 +204,6 @@ class Factorio(World):
|
||||
range(getattr(self.options,
|
||||
f"{trap_name.lower().replace(' ', '_')}_traps")))
|
||||
|
||||
want_progressives = collections.defaultdict(lambda: self.options.progressive.
|
||||
want_progressives(self.random))
|
||||
|
||||
cost_sorted_locations = sorted(self.science_locations, key=lambda location: location.name)
|
||||
special_index = {"automation": 0,
|
||||
"logistics": 1,
|
||||
@@ -218,7 +218,7 @@ class Factorio(World):
|
||||
for tech_name in base_tech_table:
|
||||
if tech_name not in self.removed_technologies:
|
||||
progressive_item_name = tech_to_progressive_lookup.get(tech_name, tech_name)
|
||||
want_progressive = want_progressives[progressive_item_name]
|
||||
want_progressive = self.want_progressives[progressive_item_name]
|
||||
item_name = progressive_item_name if want_progressive else tech_name
|
||||
tech_item = self.create_item(item_name)
|
||||
index = special_index.get(tech_name, None)
|
||||
@@ -233,6 +233,12 @@ class Factorio(World):
|
||||
loc.place_locked_item(tech_item)
|
||||
loc.revealed = True
|
||||
|
||||
def get_filler_item_name(self) -> str:
|
||||
tech_name: str = self.random.choice(tuple(tech_table))
|
||||
progressive_item_name: str = tech_to_progressive_lookup.get(tech_name, tech_name)
|
||||
want_progressive: bool = self.want_progressives[progressive_item_name]
|
||||
return progressive_item_name if want_progressive else tech_name
|
||||
|
||||
def set_rules(self):
|
||||
player = self.player
|
||||
shapes = get_shapes(self)
|
||||
|
Reference in New Issue
Block a user