53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from math import ceil | ||
|  | from typing import List | ||
|  | 
 | ||
|  | from BaseClasses import MultiWorld, Item | ||
|  | from worlds.AutoWorld import World | ||
|  | 
 | ||
|  | from . import Constants | ||
|  | 
 | ||
|  | def get_junk_item_names(rand, k: int) -> str: | ||
|  | 	junk_weights = Constants.item_info["junk_weights"] | ||
|  | 	junk = rand.choices( | ||
|  | 		list(junk_weights.keys()), | ||
|  | 		weights=list(junk_weights.values()), | ||
|  | 		k=k) | ||
|  | 	return junk | ||
|  | 
 | ||
|  | def build_item_pool(mc_world: World) -> List[Item]: | ||
|  | 	multiworld = mc_world.multiworld | ||
|  | 	player = mc_world.player | ||
|  | 
 | ||
|  | 	itempool = [] | ||
|  | 	total_location_count = len(multiworld.get_unfilled_locations(player)) | ||
|  | 
 | ||
|  | 	required_pool = Constants.item_info["required_pool"] | ||
|  | 	junk_weights = Constants.item_info["junk_weights"] | ||
|  | 
 | ||
|  | 	# Add required progression items | ||
|  | 	for item_name, num in required_pool.items(): | ||
|  | 		itempool += [mc_world.create_item(item_name) for _ in range(num)] | ||
|  | 
 | ||
|  | 	# Add structure compasses | ||
|  | 	if multiworld.structure_compasses[player]: | ||
|  | 		compasses = [name for name in mc_world.item_name_to_id if "Structure Compass" in name] | ||
|  | 		for item_name in compasses: | ||
|  | 			itempool.append(mc_world.create_item(item_name)) | ||
|  | 
 | ||
|  | 	# Dragon egg shards | ||
|  | 	if multiworld.egg_shards_required[player] > 0: | ||
|  | 		num = multiworld.egg_shards_available[player] | ||
|  | 		itempool += [mc_world.create_item("Dragon Egg Shard") for _ in range(num)] | ||
|  | 
 | ||
|  | 	# Bee traps | ||
|  | 	bee_trap_percentage = multiworld.bee_traps[player] * 0.01 | ||
|  | 	if bee_trap_percentage > 0: | ||
|  | 		bee_trap_qty = ceil(bee_trap_percentage * (total_location_count - len(itempool))) | ||
|  | 		itempool += [mc_world.create_item("Bee Trap") for _ in range(bee_trap_qty)] | ||
|  | 
 | ||
|  | 	# Fill remaining itempool with randomly generated junk | ||
|  | 	junk = get_junk_item_names(multiworld.random, total_location_count - len(itempool)) | ||
|  | 	itempool += [mc_world.create_item(name) for name in junk] | ||
|  | 
 | ||
|  | 	return itempool |