73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from typing import List, NamedTuple
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FusionData(NamedTuple):
							 | 
						||
| 
								 | 
							
								    name: str
							 | 
						||
| 
								 | 
							
								    materials: List[str]
							 | 
						||
| 
								 | 
							
								    replaceable: bool
							 | 
						||
| 
								 | 
							
								    additional_spells: List[str]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fusions = {
							 | 
						||
| 
								 | 
							
								    "Elemental Hero Flame Wingman": FusionData(
							 | 
						||
| 
								 | 
							
								        "Elemental Hero Flame Wingman",
							 | 
						||
| 
								 | 
							
								        ["Elemental Hero Avian", "Elemental Hero Burstinatrix"],
							 | 
						||
| 
								 | 
							
								        True,
							 | 
						||
| 
								 | 
							
								        ["Miracle Fusion"]),
							 | 
						||
| 
								 | 
							
								    "Elemental Hero Madballman": FusionData(
							 | 
						||
| 
								 | 
							
								        "Elemental Hero Madballman",
							 | 
						||
| 
								 | 
							
								        ["Elemental Hero Bubbleman", "Elemental Hero Clayman"],
							 | 
						||
| 
								 | 
							
								        True,
							 | 
						||
| 
								 | 
							
								        ["Miracle Fusion"]),
							 | 
						||
| 
								 | 
							
								    "Elemental Hero Rampart Blaster": FusionData(
							 | 
						||
| 
								 | 
							
								        "Elemental Hero Rampart Blaster",
							 | 
						||
| 
								 | 
							
								        ["Elemental Hero Burstinatrix", "Elemental Hero Clayman"],
							 | 
						||
| 
								 | 
							
								        True,
							 | 
						||
| 
								 | 
							
								        ["Miracle Fusion"]),
							 | 
						||
| 
								 | 
							
								    "Elemental Hero Shining Flare Wingman": FusionData(
							 | 
						||
| 
								 | 
							
								        "Elemental Hero Shining Flare Wingman",
							 | 
						||
| 
								 | 
							
								        ["Elemental Hero Flame Wingman", "Elemental Hero Sparkman"],
							 | 
						||
| 
								 | 
							
								        True,
							 | 
						||
| 
								 | 
							
								        ["Miracle Fusion"]),
							 | 
						||
| 
								 | 
							
								    "Elemental Hero Steam Healer": FusionData(
							 | 
						||
| 
								 | 
							
								        "Elemental Hero Steam Healer",
							 | 
						||
| 
								 | 
							
								        ["Elemental Hero Burstinatrix", "Elemental Hero Bubbleman"],
							 | 
						||
| 
								 | 
							
								        True,
							 | 
						||
| 
								 | 
							
								        ["Miracle Fusion"]),
							 | 
						||
| 
								 | 
							
								    "Elemental Hero Wildedge": FusionData(
							 | 
						||
| 
								 | 
							
								        "Elemental Hero Wildedge",
							 | 
						||
| 
								 | 
							
								        ["Elemental Hero Wildheart", "Elemental Hero Bladedge"],
							 | 
						||
| 
								 | 
							
								        True,
							 | 
						||
| 
								 | 
							
								        ["Miracle Fusion"])
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fusion_subs = ["The Dark - Hex-Sealed Fusion",
							 | 
						||
| 
								 | 
							
								               "The Earth - Hex-Sealed Fusion",
							 | 
						||
| 
								 | 
							
								               "The Light - Hex-Sealed Fusion",
							 | 
						||
| 
								 | 
							
								               "Goddess with the Third Eye",
							 | 
						||
| 
								 | 
							
								               "King of the Swamp",
							 | 
						||
| 
								 | 
							
								               "Versago the Destroyer",
							 | 
						||
| 
								 | 
							
								               # Only in All-packs
							 | 
						||
| 
								 | 
							
								               "Beastking of the Swamps",
							 | 
						||
| 
								 | 
							
								               "Mystical Sheep #1"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def has_all_materials(state, monster, player):
							 | 
						||
| 
								 | 
							
								    data = fusions.get(monster)
							 | 
						||
| 
								 | 
							
								    if not state.has(monster, player):
							 | 
						||
| 
								 | 
							
								        return False
							 | 
						||
| 
								 | 
							
								    if data is None:
							 | 
						||
| 
								 | 
							
								        return True
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        materials = data.replaceable and state.has_any(fusion_subs, player)
							 | 
						||
| 
								 | 
							
								        for material in data.materials:
							 | 
						||
| 
								 | 
							
								            materials += has_all_materials(state, material, player)
							 | 
						||
| 
								 | 
							
								        return materials >= len(data.materials)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def count_has_materials(state, monsters, player):
							 | 
						||
| 
								 | 
							
								    amount = 0
							 | 
						||
| 
								 | 
							
								    for monster in monsters:
							 | 
						||
| 
								 | 
							
								        amount += has_all_materials(state, monster, player)
							 | 
						||
| 
								 | 
							
								    return amount
							 |