Functioning but working trap weights. Not removing singular traps when disabled.
This commit is contained in:
@@ -105,6 +105,26 @@ class FillerWeight(OptionCounter):
|
|||||||
}
|
}
|
||||||
display_name = "Filler Weights"
|
display_name = "Filler Weights"
|
||||||
|
|
||||||
|
class TrapPercentage(Range):
|
||||||
|
"""
|
||||||
|
Set a percentage of how many filler items are replaced with traps here.
|
||||||
|
"""
|
||||||
|
display_name = "Trap Percentage"
|
||||||
|
range_start = 0
|
||||||
|
range_end = 100
|
||||||
|
default = 10
|
||||||
|
|
||||||
|
class PerTrapWeight(OptionCounter):
|
||||||
|
"""
|
||||||
|
Determines how often each filler item appears in the itempool
|
||||||
|
"""
|
||||||
|
display_name = "Enabled Traps with Weight"
|
||||||
|
default = {
|
||||||
|
"Depletion Trap": 10,
|
||||||
|
"Dump it to Crumpit": 5,
|
||||||
|
"Who sent me back?": 10,
|
||||||
|
}
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class GrinchOptions(PerGameCommonOptions):#DeathLinkMixin
|
class GrinchOptions(PerGameCommonOptions):#DeathLinkMixin
|
||||||
starting_area: StartingArea
|
starting_area: StartingArea
|
||||||
@@ -119,3 +139,5 @@ class GrinchOptions(PerGameCommonOptions):#DeathLinkMixin
|
|||||||
ring_link: RingLinkOption
|
ring_link: RingLinkOption
|
||||||
trap_link: TrapLinkOption
|
trap_link: TrapLinkOption
|
||||||
filler_weight: FillerWeight
|
filler_weight: FillerWeight
|
||||||
|
trap_weight: PerTrapWeight
|
||||||
|
trap_percentage: TrapPercentage
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from BaseClasses import Region, Item, ItemClassification
|
from BaseClasses import Region, Item, ItemClassification
|
||||||
from .Locations import grinch_locations_to_id, grinch_locations, GrinchLocation, get_location_names_per_category
|
from .Locations import grinch_locations_to_id, grinch_locations, GrinchLocation, get_location_names_per_category
|
||||||
from .Items import grinch_items_to_id, GrinchItem, ALL_ITEMS_TABLE, MISC_ITEMS_TABLE, get_item_names_per_category
|
from .Items import grinch_items_to_id, GrinchItem, ALL_ITEMS_TABLE, MISC_ITEMS_TABLE, get_item_names_per_category, TRAPS_TABLE
|
||||||
from .Regions import connect_regions
|
from .Regions import connect_regions
|
||||||
from .Rules import set_location_rules
|
from .Rules import set_location_rules
|
||||||
|
|
||||||
@@ -68,8 +68,8 @@ class GrinchWorld(World):
|
|||||||
|
|
||||||
# Fill remaining locations according to weight ratio
|
# Fill remaining locations according to weight ratio
|
||||||
for filler in MISC_ITEMS_TABLE:
|
for filler in MISC_ITEMS_TABLE:
|
||||||
weight_ratio = self.options.filler_weight[filler] / total_fillerweights
|
filler_weight_ratio = self.options.filler_weight[filler] / total_fillerweights
|
||||||
filler_count = round(unfilled_locations * weight_ratio)
|
filler_count = round(unfilled_locations * filler_weight_ratio)
|
||||||
for _ in range(filler_count):
|
for _ in range(filler_count):
|
||||||
self_itempool.append(self.create_item(filler))
|
self_itempool.append(self.create_item(filler))
|
||||||
|
|
||||||
@@ -77,12 +77,32 @@ class GrinchWorld(World):
|
|||||||
while len(self_itempool) < unfilled_locations:
|
while len(self_itempool) < unfilled_locations:
|
||||||
self_itempool.append(self.create_item(self.get_other_filler_item(list(MISC_ITEMS_TABLE.keys()))))
|
self_itempool.append(self.create_item(self.get_other_filler_item(list(MISC_ITEMS_TABLE.keys()))))
|
||||||
|
|
||||||
self.multiworld.itempool += self_itempool
|
|
||||||
|
|
||||||
# for _ in range(unfilled_locations):
|
# for _ in range(unfilled_locations):
|
||||||
# self_itempool.append(self.create_item((self.get_other_filler_item(list(MISC_ITEMS_TABLE.keys())))))
|
# self_itempool.append(self.create_item((self.get_other_filler_item(list(MISC_ITEMS_TABLE.keys())))))
|
||||||
# self.multiworld.itempool += self_itempool
|
# self.multiworld.itempool += self_itempool
|
||||||
|
|
||||||
|
# Total available weight sum
|
||||||
|
if self.options.trap_percentage > 0:
|
||||||
|
total_trapweights = sum(self.options.trap_weight[trap] for trap in TRAPS_TABLE)
|
||||||
|
|
||||||
|
if total_trapweights <= 0:
|
||||||
|
raise Exception("ERROR: Traps are enabled, but all trap weights are zero or undefined")
|
||||||
|
|
||||||
|
# Total traps to generate (percentage of unfilled locations)
|
||||||
|
total_traps = round(unfilled_locations * (self.options.trap_percentage / 100))
|
||||||
|
|
||||||
|
for trap in TRAPS_TABLE:
|
||||||
|
trap_weight_ratio = self.options.trap_weight[trap] / total_trapweights
|
||||||
|
trap_count = round(total_traps * trap_weight_ratio)
|
||||||
|
for _ in range(trap_count):
|
||||||
|
self_itempool.append(self.create_item(trap))
|
||||||
|
|
||||||
|
# Handle rounding differences
|
||||||
|
while len(self_itempool) < total_traps:
|
||||||
|
self_itempool.append(self.create_item(self.get_other_filler_item(list(TRAPS_TABLE.keys()))))
|
||||||
|
|
||||||
|
self.multiworld.itempool += self_itempool
|
||||||
|
|
||||||
def set_rules(self):
|
def set_rules(self):
|
||||||
self.multiworld.completion_condition[self.player] = lambda state: state.has("Goal", self.player)
|
self.multiworld.completion_condition[self.player] = lambda state: state.has("Goal", self.player)
|
||||||
set_location_rules(self)
|
set_location_rules(self)
|
||||||
|
|||||||
Reference in New Issue
Block a user