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
 |