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
|