Lots of weights cleanup
This commit is contained in:
@@ -84,33 +84,66 @@ class GrinchWorld(World):
|
|||||||
# Total available weight sum
|
# Total available weight sum
|
||||||
total_fillerweights = sum(self.options.filler_weight[filler] for filler in MISC_ITEMS_TABLE)
|
total_fillerweights = sum(self.options.filler_weight[filler] for filler in MISC_ITEMS_TABLE)
|
||||||
|
|
||||||
|
filler_total_count = 0
|
||||||
|
highest_filler = None
|
||||||
|
highest_filler_ratio = 0
|
||||||
|
|
||||||
# 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:
|
||||||
# This ratio is a decimal between 0 and 1, and when multiplied by 100 is the % of that filler
|
# This ratio is a decimal between 0 and 1, and when multiplied by 100 is the % of that filler
|
||||||
# item in the available unfilled locations
|
# item in the available unfilled locations
|
||||||
filler_weight_ratio = self.options.filler_weight[filler] / total_fillerweights
|
filler_weight_ratio = self.options.filler_weight[filler] / total_fillerweights
|
||||||
|
|
||||||
|
if filler_weight_ratio > highest_filler_ratio:
|
||||||
|
highest_filler_ratio = filler_weight_ratio
|
||||||
|
highest_filler = filler
|
||||||
|
|
||||||
filler_count = round(filler_locations * filler_weight_ratio)
|
filler_count = round(filler_locations * filler_weight_ratio)
|
||||||
|
|
||||||
|
filler_total_count += filler_count
|
||||||
|
|
||||||
for _ in range(filler_count):
|
for _ in range(filler_count):
|
||||||
self_itempool.append(self.create_item(filler))
|
self_itempool.append(self.create_item(filler))
|
||||||
|
|
||||||
|
# Back-filling empty locations with 20 Rotten Eggs
|
||||||
|
if filler_total_count < filler_locations:
|
||||||
|
for _ in filler_locations - filler_total_count:
|
||||||
|
self_itempool.append(self.create_item(highest_filler))
|
||||||
|
|
||||||
# # Make sure we don't underfill (in case of rounding losses)
|
# # Make sure we don't underfill (in case of rounding losses)
|
||||||
# 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()))))
|
||||||
|
|
||||||
|
trap_total_count = 0
|
||||||
|
highest_trap = None
|
||||||
|
highest_trap_ratio = 0
|
||||||
|
|
||||||
# Total available weight sum
|
# Total available weight sum
|
||||||
if self.options.trap_percentage > 0:
|
if self.options.trap_percentage > 0:
|
||||||
total_trapweights = sum(self.options.trap_weight[trap] for trap in TRAPS_TABLE)
|
total_trapweights = sum(self.options.trap_weight[trap] for trap in TRAPS_TABLE)
|
||||||
|
|
||||||
if self.options.trap_percentage > 0 && total_trapweights <= 0:
|
if total_trapweights <= 0:
|
||||||
raise Exception("ERROR: Traps are enabled, but all trap weights are zero or undefined")
|
raise Exception("ERROR: Traps are enabled, but all trap weights are zero or undefined")
|
||||||
|
|
||||||
for trap in TRAPS_TABLE:
|
for trap in TRAPS_TABLE:
|
||||||
trap_weight_ratio = self.options.trap_weight[trap] / total_trapweights
|
trap_weight_ratio = self.options.trap_weight[trap] / total_trapweights
|
||||||
|
|
||||||
|
if trap_weight_ratio > highest_trap_ratio:
|
||||||
|
highest_trap_ratio = trap_weight_ratio
|
||||||
|
highest_trap = trap
|
||||||
|
|
||||||
trap_count = round(trap_locations * trap_weight_ratio)
|
trap_count = round(trap_locations * trap_weight_ratio)
|
||||||
|
|
||||||
|
trap_total_count += trap_count
|
||||||
|
|
||||||
for _ in range(trap_count):
|
for _ in range(trap_count):
|
||||||
self_itempool.append(self.create_item(trap))
|
self_itempool.append(self.create_item(trap))
|
||||||
|
|
||||||
|
# Back-filling empty locations with 20 Rotten Eggs
|
||||||
|
if trap_total_count < trap_locations:
|
||||||
|
for _ in trap_locations - trap_total_count:
|
||||||
|
self_itempool.append(self.create_item(highest_trap))
|
||||||
|
|
||||||
self.multiworld.itempool += self_itempool
|
self.multiworld.itempool += self_itempool
|
||||||
|
|
||||||
def set_rules(self):
|
def set_rules(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user