#![enable(implicit_some)]
// Maps a tool kind to a set of abilities
// A set of abilities is a primary, a secondary, and a vec of all extra abilities
({
    Tool(Sword): (
        guard: Some(Contextualized(
            pseudo_id: "veloren.core.pseudo_abilities.sword.guard",
            abilities: [
                ((stance: Sword(Defensive)), (None, "common.abilities.sword.defensive_guard")),
                ((), (None, "common.abilities.sword.basic_guard")),
            ],
        )),
        primary: Contextualized(
            pseudo_id: "veloren.core.pseudo_abilities.sword.double_slash",
            abilities: [
                ((stance: Sword(Heavy)), (None, "common.abilities.sword.heavy_double_slash")),
                ((stance: Sword(Agile)), (None, "common.abilities.sword.agile_double_slash")),
                ((stance: Sword(Defensive)), (None, "common.abilities.sword.defensive_double_slash")),
                ((stance: Sword(Crippling)), (None, "common.abilities.sword.crippling_double_slash")),
                ((stance: Sword(Cleaving)), (None, "common.abilities.sword.cleaving_double_slash")),
                ((), (None, "common.abilities.sword.basic_double_slash")),
            ],
        ),
        secondary: Contextualized(
            pseudo_id: "veloren.core.pseudo_abilities.sword.secondary_ability",
            abilities: [
                ((stance: Sword(Heavy)), (None, "common.abilities.sword.heavy_slam")),
                ((stance: Sword(Agile), dual_wielding_same_kind: true), (None, "common.abilities.sword.agile_dual_perforate")),
                ((stance: Sword(Agile)), (None, "common.abilities.sword.agile_perforate")),
                ((stance: Sword(Defensive)), (None, "common.abilities.sword.defensive_vital_jab")),
                ((stance: Sword(Crippling)), (None, "common.abilities.sword.crippling_deep_rend")),
                ((stance: Sword(Cleaving), dual_wielding_same_kind: true), (None, "common.abilities.sword.cleaving_dual_spiral_slash")),
                ((stance: Sword(Cleaving)), (None, "common.abilities.sword.cleaving_spiral_slash")),
                ((), (None, "common.abilities.sword.basic_thrust")),
            ],
        ),
        abilities: [
            Contextualized(
                pseudo_id: "veloren.core.pseudo_abilities.sword.crescent_slash",
                abilities: [
                    ((stance: Sword(Heavy)), (Sword(CrescentSlash), "common.abilities.sword.heavy_crescent_slash")),
                    ((stance: Sword(Agile)), (Sword(CrescentSlash), "common.abilities.sword.agile_crescent_slash")),
                    ((stance: Sword(Defensive)), (Sword(CrescentSlash), "common.abilities.sword.defensive_crescent_slash")),
                    ((stance: Sword(Crippling)), (Sword(CrescentSlash), "common.abilities.sword.crippling_crescent_slash")),
                    ((stance: Sword(Cleaving)), (Sword(CrescentSlash), "common.abilities.sword.cleaving_crescent_slash")),
                    ((), (Sword(CrescentSlash), "common.abilities.sword.basic_crescent_slash")),
                ],
            ),
            Contextualized(
                pseudo_id: "veloren.core.pseudo_abilities.sword.fell_strike",
                abilities: [
                    ((stance: Sword(Heavy)), (Sword(FellStrike), "common.abilities.sword.heavy_fell_strike")),
                    ((stance: Sword(Agile)), (Sword(FellStrike), "common.abilities.sword.agile_fell_strike")),
                    ((stance: Sword(Defensive)), (Sword(FellStrike), "common.abilities.sword.defensive_fell_strike")),
                    ((stance: Sword(Crippling)), (Sword(FellStrike), "common.abilities.sword.crippling_fell_strike")),
                    ((stance: Sword(Cleaving)), (Sword(FellStrike), "common.abilities.sword.cleaving_fell_strike")),
                    ((), (Sword(FellStrike), "common.abilities.sword.basic_fell_strike")),
                ],
            ),
            Contextualized(
                pseudo_id: "veloren.core.pseudo_abilities.sword.skewer",
                abilities: [
                    ((stance: Sword(Heavy)), (Sword(Skewer), "common.abilities.sword.heavy_skewer")),
                    ((stance: Sword(Agile)), (Sword(Skewer), "common.abilities.sword.agile_skewer")),
                    ((stance: Sword(Defensive)), (Sword(Skewer), "common.abilities.sword.defensive_skewer")),
                    ((stance: Sword(Crippling)), (Sword(Skewer), "common.abilities.sword.crippling_skewer")),
                    ((stance: Sword(Cleaving)), (Sword(Skewer), "common.abilities.sword.cleaving_skewer")),
                    ((), (Sword(Skewer), "common.abilities.sword.basic_skewer")),
                ],
            ),
            Contextualized(
                pseudo_id: "veloren.core.pseudo_abilities.sword.cascade",
                abilities: [
                    ((stance: Sword(Heavy)), (Sword(Cascade), "common.abilities.sword.heavy_cascade")),
                    ((stance: Sword(Agile)), (Sword(Cascade), "common.abilities.sword.agile_cascade")),
                    ((stance: Sword(Defensive)), (Sword(Cascade), "common.abilities.sword.defensive_cascade")),
                    ((stance: Sword(Crippling)), (Sword(Cascade), "common.abilities.sword.crippling_cascade")),
                    ((stance: Sword(Cleaving)), (Sword(Cascade), "common.abilities.sword.cleaving_cascade")),
                    ((), (Sword(Cascade), "common.abilities.sword.basic_cascade")),
                ],
            ),
            Contextualized(
                pseudo_id: "veloren.core.pseudo_abilities.sword.cross_cut",
                abilities: [
                    ((stance: Sword(Heavy), dual_wielding_same_kind: true), (Sword(CrossCut), "common.abilities.sword.heavy_dual_cross_cut")),
                    ((stance: Sword(Agile), dual_wielding_same_kind: true), (Sword(CrossCut), "common.abilities.sword.agile_dual_cross_cut")),
                    ((stance: Sword(Defensive), dual_wielding_same_kind: true), (Sword(CrossCut), "common.abilities.sword.defensive_dual_cross_cut")),
                    ((stance: Sword(Crippling), dual_wielding_same_kind: true), (Sword(CrossCut), "common.abilities.sword.crippling_dual_cross_cut")),
                    ((stance: Sword(Cleaving), dual_wielding_same_kind: true), (Sword(CrossCut), "common.abilities.sword.cleaving_dual_cross_cut")),
                    ((dual_wielding_same_kind: true), (Sword(CrossCut), "common.abilities.sword.basic_dual_cross_cut")),
                    ((stance: Sword(Heavy)), (Sword(CrossCut), "common.abilities.sword.heavy_cross_cut")),
                    ((stance: Sword(Agile)), (Sword(CrossCut), "common.abilities.sword.agile_cross_cut")),
                    ((stance: Sword(Defensive)), (Sword(CrossCut), "common.abilities.sword.defensive_cross_cut")),
                    ((stance: Sword(Crippling)), (Sword(CrossCut), "common.abilities.sword.crippling_cross_cut")),
                    ((stance: Sword(Cleaving)), (Sword(CrossCut), "common.abilities.sword.cleaving_cross_cut")),
                    ((), (Sword(CrossCut), "common.abilities.sword.basic_cross_cut")),
                ],
            ),
            Contextualized(
                pseudo_id: "veloren.core.pseudo_abilities.sword.finisher",
                abilities: [
                    ((stance: Sword(Heavy)), (Sword(Finisher), "common.abilities.sword.heavy_guillotine")),
                    ((stance: Sword(Agile)), (Sword(Finisher), "common.abilities.sword.agile_hundred_cuts")),
                    ((stance: Sword(Defensive)), (Sword(Finisher), "common.abilities.sword.defensive_counter")),
                    ((stance: Sword(Crippling)), (Sword(Finisher), "common.abilities.sword.crippling_mutilate")),
                    ((stance: Sword(Cleaving), dual_wielding_same_kind: true), (Sword(Finisher), "common.abilities.sword.cleaving_dual_bladestorm")),
                    ((stance: Sword(Cleaving)), (Sword(Finisher), "common.abilities.sword.cleaving_bladestorm")),
                    ((), (Sword(Finisher), "common.abilities.sword.basic_mighty_strike")),
                ],
            ),
            Simple(Sword(HeavySweep), "common.abilities.sword.heavy_sweep"),
            Simple(Sword(HeavyPommelStrike), "common.abilities.sword.heavy_pommel_strike"),
            Simple(Sword(AgileQuickDraw), "common.abilities.sword.agile_quick_draw"),
            Simple(Sword(AgileFeint), "common.abilities.sword.agile_feint"),
            Simple(Sword(DefensiveRiposte), "common.abilities.sword.defensive_riposte"),
            Simple(Sword(DefensiveDisengage), "common.abilities.sword.defensive_disengage"),
            Simple(Sword(CripplingGouge), "common.abilities.sword.crippling_gouge"),
            Simple(Sword(CripplingHamstring), "common.abilities.sword.crippling_hamstring"),
            Contextualized(
                pseudo_id: "common.abilities.sword.cleaving_whirlwind_slice",
                abilities: [
                    ((dual_wielding_same_kind: true), (Sword(CleavingWhirlwindSlice), "common.abilities.sword.cleaving_dual_whirlwind_slice")),
                    ((), (Sword(CleavingWhirlwindSlice), "common.abilities.sword.cleaving_whirlwind_slice")),
                ],
            ),
            Simple(Sword(CleavingEarthSplitter), "common.abilities.sword.cleaving_earth_splitter"),
            Simple(Sword(HeavyFortitude), "common.abilities.sword.heavy_fortitude"),
            Simple(Sword(HeavyPillarThrust), "common.abilities.sword.heavy_pillar_thrust"),
            Simple(Sword(AgileDancingEdge), "common.abilities.sword.agile_dancing_edge"),
            Contextualized(
                pseudo_id: "common.abilities.sword.agile_flurry",
                abilities: [
                    ((stance: Sword(Agile), dual_wielding_same_kind: true), (Sword(AgileFlurry), "common.abilities.sword.agile_dual_flurry")),
                    ((stance: Sword(Agile)), (Sword(AgileFlurry), "common.abilities.sword.agile_flurry")),
                ],
            ),
            Simple(Sword(DefensiveStalwartSword), "common.abilities.sword.defensive_stalwart_sword"),
            Simple(Sword(DefensiveDeflect), "common.abilities.sword.defensive_deflect"),
            Simple(Sword(CripplingEviscerate), "common.abilities.sword.crippling_eviscerate"),
            Simple(Sword(CripplingBloodyGash), "common.abilities.sword.crippling_bloody_gash"),
            Simple(Sword(CleavingBladeFever), "common.abilities.sword.cleaving_blade_fever"),
            Simple(Sword(CleavingSkySplitter), "common.abilities.sword.cleaving_sky_splitter"),
        ],
    ),
    Tool(Axe): (
        guard: Some(Simple(None, "common.abilities.axe.basic_guard")),
        primary: Simple(None, "common.abilities.axe.triple_chop"),
        secondary: Simple(None, "common.abilities.axe.cleave"),
        abilities: [
            Simple(Axe(BrutalSwing), "common.abilities.axe.brutal_swing"),
            Simple(Axe(Berserk), "common.abilities.axe.berserk"),
            Simple(Axe(RisingTide), "common.abilities.axe.rising_tide"),
            Simple(Axe(SavageSense), "common.abilities.axe.savage_sense"),
            Simple(Axe(AdrenalineRush), "common.abilities.axe.adrenaline_rush"),
            Contextualized(
                pseudo_id: "common.abilities.axe.execute",
                abilities: [
                    ((combo: Some(50)), (Axe(Maelstrom), "common.abilities.axe.maelstrom")),
                    ((), (Axe(Execute), "common.abilities.axe.execute")),
                ],
            ),
            Simple(Axe(Rake), "common.abilities.axe.rake"),
            Simple(Axe(Bloodfeast), "common.abilities.axe.bloodfeast"),
            Contextualized(
                pseudo_id: "common.abilities.axe.fierce_raze",
                abilities: [
                    ((dual_wielding_same_kind: true), (Axe(FierceRaze), "common.abilities.axe.dual_fierce_raze")),
                    ((), (Axe(FierceRaze), "common.abilities.axe.fierce_raze")),
                ],
            ),
            Simple(Axe(Furor), "common.abilities.axe.furor"),
            Simple(Axe(Fracture), "common.abilities.axe.fracture"),
            Contextualized(
                pseudo_id: "common.abilities.axe.lacerate",
                abilities: [
                    ((combo: Some(50)), (Axe(Riptide), "common.abilities.axe.riptide")),
                    ((), (Axe(Lacerate), "common.abilities.axe.lacerate")),
                ],
            ),
            Simple(Axe(SkullBash), "common.abilities.axe.skull_bash"),
            Simple(Axe(Sunder), "common.abilities.axe.sunder"),
            Simple(Axe(Plunder), "common.abilities.axe.plunder"),
            Simple(Axe(Defiance), "common.abilities.axe.defiance"),
            Simple(Axe(Keelhaul), "common.abilities.axe.keelhaul"),
            Contextualized(
                pseudo_id: "common.abilities.axe.bulkhead",
                abilities: [
                    ((combo: Some(50)), (Axe(Capsize), "common.abilities.axe.capsize")),
                    ((), (Axe(Bulkhead), "common.abilities.axe.bulkhead")),
                ],
            ),
        ],
    ),
    Tool(Hammer): (
        guard: Some(Simple(None, "common.abilities.hammer.basic_guard")),
        primary: Simple(None, "common.abilities.hammer.singlestrike"),
        secondary: Simple(None, "common.abilities.hammer.charged"),
        abilities: [
            Simple(Some(Hammer(UnlockLeap)), "common.abilities.hammer.leap"),
        ],
    ),
    Tool(Bow): (
        primary: Simple(None, "common.abilities.bow.charged"),
        secondary: Simple(None, "common.abilities.bow.repeater"),
        abilities: [
            Simple(Some(Bow(UnlockShotgun)), "common.abilities.bow.shotgun"),
        ],
    ),
    Tool(Staff): (
        primary: Simple(None, "common.abilities.staff.firebomb"),
        secondary: Simple(None, "common.abilities.staff.flamethrower"),
        abilities: [
            Simple(Some(Staff(UnlockShockwave)), "common.abilities.staff.fireshockwave"),
        ],
    ),
    Tool(Sceptre): (
        primary: Simple(None, "common.abilities.sceptre.lifestealbeam"),
        secondary: Simple(None, "common.abilities.sceptre.healingaura"),
        abilities: [
            Simple(Some(Sceptre(UnlockAura)), "common.abilities.sceptre.wardingaura"),
        ],
    ),
    Custom("Husk"): (
        primary: Simple(None, "common.abilities.custom.husk.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.husk.triplestrike"),
        abilities: [],
    ),
    Custom("Husk Brute"): (
        primary: Simple(None, "common.abilities.custom.husk_brute.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.husk_brute.chargedmelee"),
        abilities: [],
    ),
    Custom("Bushly"): (
        primary: Simple(None, "common.abilities.custom.bushly.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.bushly.dash"),
        abilities: [],
    ),
    Custom("Irrwurz"): (
        primary: Simple(None, "common.abilities.custom.irrwurz.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.irrwurz.magicball"),
        abilities: [],
    ),
    Tool(Spear): (
        primary: Simple(None, "common.abilities.spear.doublestrike"),
        secondary: Simple(None, "common.abilities.spear.dash"),
        abilities: [],
    ),
    Custom("Hammer Simple"): (
        primary: Simple(None, "common.abilities.hammersimple.doublestrike"),
        secondary: Simple(None, "common.abilities.hammersimple.doublestrike"),
        abilities: [],
    ),
    // TODO: Later investigate if we want to make this back to a simple axe when more things need a simpler axe ability set
    Custom("Gnarling Axe"): (
        primary: Simple(None, "common.abilities.gnarling.axe.chop"),
        secondary: Simple(None, "common.abilities.gnarling.axe.chop"),
        abilities: [],
    ),
    Custom("Gnarling Dagger"): (
        primary: Simple(None, "common.abilities.gnarling.dagger.stab"),
        secondary: Simple(None, "common.abilities.gnarling.dagger.stab"),
        abilities: [],
    ),
    Custom("Gnarling Blowgun"): (
        primary: Simple(None, "common.abilities.gnarling.blowgun.dart"),
        secondary: Simple(None, "common.abilities.gnarling.blowgun.dart"),
        abilities: [],
    ),
    Custom("Gnarling Chieftain"): (
        primary: Simple(None, "common.abilities.gnarling.chieftain.flamestrike"),
        secondary: Simple(None, "common.abilities.gnarling.chieftain.firebarrage"),
        abilities: [
            Simple(None, "common.abilities.gnarling.chieftain.fireshockwave"),
            Simple(None, "common.abilities.gnarling.chieftain.redtotem"),
            Simple(None, "common.abilities.gnarling.chieftain.greentotem"),
            Simple(None, "common.abilities.gnarling.chieftain.whitetotem"),
        ],
    ),
    Custom("Gnarling Totem Red"): (
        primary: Simple(None, "common.abilities.gnarling.totem.red"),
        secondary: Simple(None, "common.abilities.gnarling.totem.red"),
        abilities: [],
    ),
    Custom("Gnarling Totem Green"): (
        primary: Simple(None, "common.abilities.gnarling.totem.green"),
        secondary: Simple(None, "common.abilities.gnarling.totem.green"),
        abilities: [],
    ),
    Custom("Gnarling Totem White"): (
        primary: Simple(None, "common.abilities.gnarling.totem.white"),
        secondary: Simple(None, "common.abilities.gnarling.totem.white"),
        abilities: [],
    ),
    Custom("Deadwood"): (
        primary: Simple(None, "common.abilities.custom.deadwood.lifestealbeam"),
        secondary: Simple(None, "common.abilities.custom.deadwood.dash"),
        abilities: [],
    ),
    Custom("Mandragora"): (
        primary: Simple(None, "common.abilities.custom.mandragora.basic"),
        secondary: Simple(None, "common.abilities.custom.mandragora.scream"),
        abilities: [],
    ),
    Custom("Wood Golem"): (
        primary: Simple(None, "common.abilities.custom.woodgolem.strike"),
        secondary: Simple(None, "common.abilities.custom.woodgolem.spin"),
        abilities: [
            Simple(None, "common.abilities.custom.woodgolem.shockwave")
        ],
    ),
    Custom("Coral Golem"): (
        primary: Simple(None, "common.abilities.custom.coralgolem.strike"),
        secondary: Simple(None, "common.abilities.custom.coralgolem.spin"),
        abilities: [
            Simple(None, "common.abilities.custom.coralgolem.shockwave")
        ],
    ),
    Custom("Simple Flying Melee"): (
        primary: Simple(None, "common.abilities.custom.simpleflyingmelee.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.simpleflyingmelee.singlestrike"),
        abilities: [],
    ),
    Custom("Sword Simple"): (
        primary: Simple(None, "common.abilities.swordsimple.doublestrike"),
        secondary: Simple(None, "common.abilities.swordsimple.dash"),
        abilities: [],
    ),
    Custom("Staff Simple"): (
        primary: Simple(None, "common.abilities.staffsimple.firebomb"),
        secondary: Simple(None, "common.abilities.staffsimple.flamethrower"),
        abilities: [],
    ),
    Custom("Bow Simple"): (
        primary: Simple(None, "common.abilities.bowsimple.basic"),
        secondary: Simple(None, "common.abilities.bowsimple.basic"),
        abilities: [],
    ),
    Custom("Axe Simple"): (
        primary: Simple(None, "common.abilities.axesimple.doublestrike"),
        secondary: Simple(None, "common.abilities.axesimple.doublestrike"),
        abilities: [],
    ),
    Custom("Dagger Simple"): (
        primary: Simple(None, "common.abilities.daggersimple.singlestrike"),
        secondary: Simple(None, "common.abilities.daggersimple.singlestrike"),
        abilities: [],
    ),
    Tool(Dagger): (
        primary: Simple(None, "common.abilities.dagger.tempbasic"),
        secondary: Simple(None, "common.abilities.dagger.tempbasic"),
        abilities: [],
    ),
    Tool(Shield): (
        primary: Simple(None, "common.abilities.shield.tempbasic"),
        secondary: Simple(None, "common.abilities.shield.block"),
        abilities: [],
    ),
    Custom("Stone Golem"): (
        primary: Simple(None, "common.abilities.custom.stonegolemfist.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.stonegolemfist.shockwave"),
        abilities: [
            Simple(None, "common.abilities.custom.stonegolemfist.spin"),
        ],
    ),
    Custom("Beast Claws"): (
        primary: Simple(None, "common.abilities.custom.beastclaws.basic"),
        secondary: Simple(None, "common.abilities.custom.beastclaws.basic"),
        abilities: [],
    ),
    Custom("Tursus Claws"): (
        primary: Simple(None, "common.abilities.custom.tursus.tursus_claws"),
        secondary: Simple(None, "common.abilities.custom.tursus.tusk_bash_leap"),
        abilities: [
            Simple(None, "common.abilities.custom.tursus.tusk_stab"),
        ],
    ),
    Custom("Wendigo Magic"): (
        primary: Simple(None, "common.abilities.custom.wendigomagic.frostbomb"),
        secondary: Simple(None, "common.abilities.custom.wendigomagic.singlestrike"),
        abilities: [],
    ),
    Custom("Tidal Warrior"): (
        primary: Simple(None, "common.abilities.custom.tidalwarrior.pincer"),
        secondary: Simple(None, "common.abilities.custom.tidalwarrior.scuttle"),
        abilities: [
            Simple(None, "common.abilities.custom.tidalwarrior.bubbles"),
            Simple(None, "common.abilities.custom.tidalwarrior.totem"),
        ],
    ),
    Custom("Tidal Totem"): (
        primary: Simple(None, "common.abilities.custom.tidalwarrior.totem_wave"),
        secondary: Simple(None, "common.abilities.custom.tidalwarrior.totem_wave"),
        abilities: [],
    ),
    // Note: Consider making a ranking system once we get more entities
    // TODO: Make all purple item droppers have purple CR and a unique skillset
    Custom("Quad Med Quick"): (
        primary: Simple(None, "common.abilities.custom.quadmedquick.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.quadmedquick.dash"),
        abilities: [],
    ),
    Custom("Quad Med Jump"): (
        primary: Simple(None, "common.abilities.custom.quadmedjump.leap"),
        secondary: Simple(None, "common.abilities.custom.quadmedjump.doublestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.quadmedjump.quickleap"),
        ],
    ),
    Custom("Quad Med Charge"): (
        primary: Simple(None, "common.abilities.custom.quadmedcharge.doublestrike"),
        secondary: Simple(None, "common.abilities.custom.quadmedcharge.dash"),
        abilities: [],
    ),
    Custom("Quad Med Hoof"): (
        primary: Simple(None, "common.abilities.custom.quadmedhoof.basic"),
        secondary: Simple(None, "common.abilities.custom.quadmedhoof.basic"),
        abilities: [],
    ),
    Custom("Quad Med Basic"): (
        primary: Simple(None, "common.abilities.custom.quadmedbasic.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.quadmedbasic.triplestrike"),
        abilities: [],
    ),
    Custom("Frostfang"): (
        primary: Simple(None, "common.abilities.custom.frostfang.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.frostfang.triplestrike"),
        abilities: [],
    ),
    Custom("Roshwalr"): (
        primary: Simple(None, "common.abilities.custom.roshwalr.doublehusk"),
        secondary: Simple(None, "common.abilities.custom.roshwalr.slowcharge"),
        abilities: [
            Simple(None, "common.abilities.custom.roshwalr.freezeshockwave"),
        ],
    ),
    Custom("Basilisk"): (
        primary: Simple(None, "common.abilities.custom.basilisk.petrify"),
        secondary: Simple(None, "common.abilities.custom.basilisk.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.basilisk.dash"),
        ],
    ),
    Custom("Asp"): (
        primary: Simple(None, "common.abilities.custom.asp.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.asp.firebomb"),
        abilities: [],
    ),
    Custom("Maneater"): (
        primary: Simple(None, "common.abilities.custom.maneater.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.maneater.poisonball"),
        abilities: [],
    ),
    Custom("Quad Low Breathe"): (
        primary: Simple(None, "common.abilities.custom.quadlowbreathe.flamethrower"),
        secondary: Simple(None, "common.abilities.custom.quadlowbreathe.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.quadlowbreathe.dash"),
        ],
    ),
    Custom("Quad Low Tail"): (
        primary: Simple(None, "common.abilities.custom.quadlowtail.charged"),
        secondary: Simple(None, "common.abilities.custom.quadlowtail.triplestrike"),
        abilities: [],
    ),
    Custom("Quad Low Quick"): (
        primary: Simple(None, "common.abilities.custom.quadlowquick.dash"),
        secondary: Simple(None, "common.abilities.custom.quadlowquick.quadstrike"),
        abilities: [],
    ),
    Custom("Quad Low Basic"): (
        primary: Simple(None, "common.abilities.custom.quadlowbasic.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.quadlowbasic.singlestrike"),
        abilities: [],
    ),
    Custom("Quad Low Beam"): (
        primary: Simple(None, "common.abilities.custom.quadlowbeam.lifestealbeam"),
        secondary: Simple(None, "common.abilities.custom.quadlowbreathe.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.quadlowbreathe.dash"),
        ],
    ),
    Custom("Quad Small Basic"): (
        primary: Simple(None, "common.abilities.custom.quadsmallbasic.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.quadsmallbasic.singlestrike"),
        abilities: [],
    ),
    Custom("Driggle"): (
        primary: Simple(None, "common.abilities.custom.driggle.bite"),
        secondary: Simple(None, "common.abilities.custom.driggle.flamethrower"),
        abilities: [],
    ),
    Custom("Mossy Snail"): (
        primary: Simple(None, "common.abilities.custom.mossy_snail.headbutt"),
        secondary: Simple(None, "common.abilities.custom.mossy_snail.hastened"),
        abilities: [],
    ),
    Custom("Treant Sapling"): (
        primary: Simple(None, "common.abilities.custom.treant_sapling.shockwave"),
        secondary: Simple(None, "common.abilities.custom.treant_sapling.shockwave"),
        abilities: [],
    ),
    Custom("Theropod Basic"): (
        primary: Simple(None, "common.abilities.custom.theropodbasic.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.theropodbasic.triplestrike"),
        abilities: [],
    ),
    Custom("Theropod Small"): (
        primary: Simple(None, "common.abilities.custom.theropodsmall.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.theropodsmall.triplestrike"),
        abilities: [],
    ),
    Custom("Theropod Bird"): (
        primary: Simple(None, "common.abilities.custom.theropodbird.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.theropodbird.triplestrike"),
        abilities: [],
    ),
    Custom("Theropod Charge"): (
        primary: Simple(None, "common.abilities.custom.theropodbasic.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.theropodbasic.dash"),
        abilities: [],
    ),
    // Arthropods
    Custom("Antlion"): (
        primary: Simple(None, "common.abilities.custom.arthropods.antlion.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.arthropods.antlion.charge"),
        abilities: [],
    ),
    Custom("Black Widow"): (
        primary: Simple(None, "common.abilities.custom.arthropods.blackwidow.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.arthropods.blackwidow.ensnaringwebs"),
        abilities: [
            Simple(None, "common.abilities.custom.arthropods.blackwidow.poisonball"),
        ],
    ),
    Custom("Horn Beetle"): (
        primary: Simple(None, "common.abilities.custom.arthropods.hornbeetle.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.arthropods.hornbeetle.harden"),
        abilities: [
            Simple(None, "common.abilities.custom.arthropods.hornbeetle.leap"),
        ],
    ),
    Custom("Emberfly"): (
        primary: Simple(None, "common.abilities.custom.emberfly.leap"),
        secondary: Simple(None, "common.abilities.custom.emberfly.leap"),
        abilities: [],
    ),
    Custom("Tarantula"): (
        primary: Simple(None, "common.abilities.custom.arthropods.tarantula.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.arthropods.tarantula.ensnaringwebs"),
        abilities: [
            Simple(None, "common.abilities.custom.arthropods.tarantula.leap"),
        ],
    ),
    Custom("Weevil"): (
        primary: Simple(None, "common.abilities.custom.arthropods.weevil.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.arthropods.weevil.harden"),
        abilities: [
            Simple(None, "common.abilities.custom.arthropods.weevil.threadshot"),
        ],
    ),
    Custom("Dagonite"): (
        primary: Simple(None, "common.abilities.custom.arthropods.dagonite.leapshockwave"),
        secondary: Simple(None, "common.abilities.custom.arthropods.dagonite.leapshockwave"),
        abilities: [
            Simple(None, "common.abilities.custom.arthropods.dagonite.leapshockwave"),
        ],
    ),
    // Crustaceans
    Custom("Crab"): (
        primary: Simple(None, "common.abilities.custom.crab.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.crab.triplestrike"),
        abilities: [],
    ),
    /// TODO: Organize the rest into further catagories and give purple tier droppers+ custom skillsets
    Custom("Turret"): (
        primary: Simple(None, "common.abilities.custom.turret.arrows"),
        secondary: Simple(None, "common.abilities.custom.turret.arrows"),
        abilities: [],
    ),
    Custom("Flamethrower"): (
        primary: Simple(None, "common.abilities.custom.turret.flamethrower_strong"),
        secondary: Simple(None, "common.abilities.custom.turret.flamethrower_strong"),
        abilities: [],
    ),
    Custom("Organ"): (
        primary: Simple(None, "common.abilities.custom.organ.organaura"),
        secondary: Simple(None, "common.abilities.custom.organ.organaura"),
        abilities: [
            Simple(None, "common.abilities.custom.arthropods.weevil.threadshot"),
        ],
    ),
    Custom("Haniwa Sentry"): (
        primary: Simple(None, "common.abilities.custom.turret.flamethrower"),
        secondary: Simple(None, "common.abilities.custom.turret.flamethrower"),
        abilities: [],
    ),
    Custom("Mindflayer"): (
        primary: Simple(None, "common.abilities.custom.mindflayer.cursedflames"),
        secondary: Simple(None, "common.abilities.custom.mindflayer.necroticvortex"),
        abilities: [
            Simple(None, "common.abilities.custom.mindflayer.dimensionaldoor"),
            Simple(None, "common.abilities.custom.mindflayer.necroticsphere"),
            Simple(None, "common.abilities.custom.mindflayer.summonminions"),
        ],
    ),
    Custom("Flamekeeper"): (
        primary: Simple(None, "common.abilities.custom.dwarves.flamekeeper.lava_mortar"),
        secondary: Simple(None, "common.abilities.custom.dwarves.flamekeeper.flamecrush"),
        abilities: [
            Simple(None, "common.abilities.custom.dwarves.flamekeeper.summon_flamethrower"),
            Simple(None, "common.abilities.custom.dwarves.flamekeeper.summon_clockwork"),
            Simple(None, "common.abilities.custom.dwarves.flamekeeper.flamethrower"),
            Simple(None, "common.abilities.custom.dwarves.flamekeeper.lavawave"),
            Simple(None, "common.abilities.custom.dwarves.flamekeeper.mines"),
        ],
    ),
    Custom("Clockwork"): (
        primary: Simple(None, "common.abilities.custom.dwarves.clockwork.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.dwarves.clockwork.triplestrike"),
        abilities: [],
    ),
    Custom("HermitAlligator"): (
        primary: Simple(None, "common.abilities.custom.dwarves.hermit_alligator.tail"),
        secondary: Simple(None, "common.abilities.custom.dwarves.hermit_alligator.wave"),
        abilities: [
            Simple(None, "common.abilities.custom.dwarves.hermit_alligator.bombs"),
            Simple(None, "common.abilities.custom.dwarves.hermit_alligator.beam"),
            Simple(None, "common.abilities.custom.dwarves.hermit_alligator.heal"),
        ],
    ),
    Custom("Minotaur"): (
        primary: Simple(None, "common.abilities.custom.minotaur.cleave"),
        secondary: Simple(None, "common.abilities.custom.minotaur.cripplingstrike"),
        abilities: [
            Simple(None, "common.abilities.custom.minotaur.charge"),
            Simple(None, "common.abilities.custom.minotaur.frenzy"),
        ],
    ),
     Custom("Dullahan"): (
        primary: Simple(None, "common.abilities.custom.dullahan.melee"),
        secondary: Simple(None, "common.abilities.custom.dullahan.fierce_darts"),
        abilities: [
            Simple(None, "common.abilities.custom.dullahan.knife_rain"),
            Simple(None, "common.abilities.custom.dullahan.dash"),
        ],
     ),
     Custom("Cyclops"): (
        primary: Simple(None, "common.abilities.custom.cyclops.doublestrike"),
        secondary: Simple(None, "common.abilities.custom.cyclops.optic_blast"),
        abilities: [
            Simple(None, "common.abilities.custom.cyclops.hammer_shockwave"),
            Simple(None, "common.abilities.custom.cyclops.dash"),
            Simple(None, "common.abilities.custom.cyclops.reinforce"),

        ],
     ),
    Custom("Clay Golem"): (
        primary: Simple(None, "common.abilities.custom.claygolem.strike"),
        secondary: Simple(None, "common.abilities.custom.claygolem.laser"),
        abilities: [
            Simple(None, "common.abilities.custom.claygolem.shockwave"),
            Simple(None, "common.abilities.custom.claygolem.rocket"),
        ],
    ),
    Custom("Yeti"): (
        primary: Simple(None, "common.abilities.custom.yeti.strike"),
        secondary: Simple(None, "common.abilities.custom.yeti.icespikes"),
        abilities: [
            Simple(None, "common.abilities.custom.yeti.frostbreath"),
            Simple(None, "common.abilities.custom.yeti.snowball"),
        ],
    ),
    Custom("Harvester"): (
        primary: Simple(None, "common.abilities.custom.harvester.scythe"),
        secondary: Simple(None, "common.abilities.custom.harvester.firebreath"),
        abilities: [
            Simple(None, "common.abilities.custom.harvester.ensnaringvines"),
            Simple(None, "common.abilities.custom.harvester.explodingpumpkin"),
        ],
    ),
    // TODO: Allow ability sets to expand other ability sets
    Custom("Ice Drake"): (
        primary: Simple(None, "common.abilities.custom.icedrake.multi_bite"),
        secondary: Simple(None, "common.abilities.custom.icedrake.icy_bite"),
        abilities: [
            Simple(None, "common.abilities.custom.icedrake.icebombs"),
            Simple(None, "common.abilities.custom.icedrake.icebreath"),
        ],
    ),
    Custom("Dagon"): (
    primary: Simple(None, "common.abilities.custom.dagon.dagonbombs"),
    secondary: Simple(None, "common.abilities.custom.dagon.seaurchins"),
        abilities: [
            Simple(None, "common.abilities.custom.dagon.steamwave"),
            Simple(None, "common.abilities.custom.dagon.steambeam"),
            Simple(None, "common.abilities.custom.dagon.steamheal"),
        ],
    ),
    Custom("Cardinal"): (
        primary: Simple(None, "common.abilities.sceptre.lifestealbeam"),
        secondary: Simple(None, "common.abilities.sceptre.healingaura"),
        abilities: [
            Simple(None, "common.abilities.custom.cardinal.steambeam"),
            Simple(None, "common.abilities.custom.cardinal.summondagonites"),
        ],
    ),
    Custom("Sea Bishop"): (
        primary: Simple(None, "common.abilities.custom.sea_bishop.longbeam"),
        secondary: Simple(None, "common.abilities.custom.sea_bishop.longbeam"),
        abilities: [],
    ),
    Custom("Oni"): (
        primary: Simple(None, "common.abilities.custom.oni.dash"),
        secondary: Simple(None, "common.abilities.custom.oni.doublestrike"),
        abilities: [],
    ),
    Custom("Bird Large Breathe"): (
        primary: Simple(None, "common.abilities.custom.birdlargebreathe.firebomb"),
        secondary: Simple(None, "common.abilities.custom.birdlargebreathe.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.birdlargebreathe.flamethrower"),
        ],
    ),
    Custom("Bird Large Fire"): (
        primary: Simple(None, "common.abilities.custom.birdlargefire.longstrike"),
        secondary: Simple(None, "common.abilities.custom.birdlargefire.shortstrike"),
        abilities: [
            Simple(None, "common.abilities.custom.birdlargefire.legstrike"),
            Simple(None, "common.abilities.custom.birdlargefire.summontornadoes"),
            Simple(None, "common.abilities.custom.birdlargefire.firerain"),
            Simple(None, "common.abilities.custom.birdlargefire.heat_laser"),
            Simple(None, "common.abilities.custom.birdlargefire.from_the_ashes"),
        ],
    ),
    Custom("Flame Wyvern"): (
        primary: Simple(None, "common.abilities.custom.flamewyvern.firebomb"),
        secondary: Simple(None, "common.abilities.custom.flamewyvern.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.flamewyvern.fireshockwave"),
            Simple(None, "common.abilities.custom.flamewyvern.flamethrower"),
        ],
    ),
    Custom("Frost Wyvern"): (
        primary: Simple(None, "common.abilities.custom.frostwyvern.frostbomb"),
        secondary: Simple(None, "common.abilities.custom.frostwyvern.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.frostwyvern.iceshockwave"),
            Simple(None, "common.abilities.custom.frostwyvern.frostthrower"),
        ],
    ),
    Custom("Cloud Wyvern"): (
        primary: Simple(None, "common.abilities.custom.cloudwyvern.lightningbomb"),
        secondary: Simple(None, "common.abilities.custom.cloudwyvern.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.cloudwyvern.lightningshockwave"),
            Simple(None, "common.abilities.custom.cloudwyvern.lightningthrower"),
        ],
    ),
    Custom("Sea Wyvern"): (
        primary: Simple(None, "common.abilities.custom.seawyvern.inkbomb"),
        secondary: Simple(None, "common.abilities.custom.seawyvern.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.seawyvern.inkshockwave"),
            Simple(None, "common.abilities.custom.seawyvern.inkthrower"),
        ],
    ),
    Custom("Weald Wyvern"): (
        primary: Simple(None, "common.abilities.custom.wealdwyvern.poisonbomb"),
        secondary: Simple(None, "common.abilities.custom.wealdwyvern.triplestrike"),
        abilities: [
            Simple(None, "common.abilities.custom.wealdwyvern.poisonshockwave"),
            Simple(None, "common.abilities.custom.wealdwyvern.poisonthrower"),
        ],
    ),
    Custom("Bird Large Basic"): (
        primary: Simple(None, "common.abilities.custom.birdlargebasic.triplestrike"),
        secondary: Simple(None, "common.abilities.custom.birdlargebasic.summontornadoes"),
        abilities: [
            Simple(None, "common.abilities.custom.birdlargebasic.dash"),
        ],
    ),
    Custom("Bird Medium Basic"): (
        primary: Simple(None, "common.abilities.custom.birdmediumbasic.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.birdmediumbasic.singlestrike"),
        abilities: [],
    ),
    Custom("Frost Gigas"): (
        primary: Simple(None, "common.abilities.custom.gigas_frost.cleave"),
        secondary: Simple(None, "common.abilities.custom.gigas_frost.wide_cleave"),
        abilities: [
            Simple(None, "common.abilities.custom.gigas_frost.icespike_smash"),
            Simple(None, "common.abilities.custom.gigas_frost.leapshockwave"),
            Simple(None, "common.abilities.custom.gigas_frost.ice_volley"),
            Simple(None, "common.abilities.custom.gigas_frost.frost_summons"),
            Simple(None, "common.abilities.custom.gigas_frost.flashfreeze"),
            Simple(None, "common.abilities.custom.gigas_frost.icespike_targeted"),
            Simple(None, "common.abilities.custom.gigas_frost.bonk"),
            Simple(None, "common.abilities.custom.gigas_frost.whirlwind"),
        ],
    ),
    Custom("Boreal Bow"): (
        primary: Simple(None, "common.abilities.custom.boreal_warrior.bow.charged"),
        secondary: Simple(None, "common.abilities.custom.boreal_warrior.bow.repeater"),
        abilities: [
            Simple(None, "common.abilities.custom.boreal_warrior.bow.shotgun")
        ],
    ),
    Custom("Boreal Hammer"): (
        primary: Simple(None, "common.abilities.custom.boreal_warrior.hammer.singlestrike"),
        secondary: Simple(None, "common.abilities.custom.boreal_warrior.hammer.dash"),
        abilities: [
            Simple(None, "common.abilities.custom.boreal_warrior.hammer.leap")
        ],
    ),
    Custom("Tornado"): (
        primary: Simple(None, "common.abilities.custom.tornado.spin"),
        secondary: Simple(None, "common.abilities.empty.basic"),
        abilities: [],
    ),
    Custom("FieryTornado"): (
        primary: Simple(None, "common.abilities.custom.fiery_tornado.fiery_spin"),
        secondary: Simple(None, "common.abilities.custom.fiery_tornado.fiery_aura"),
        abilities: [],
    ),
    Custom("Golf Club"): (
        primary: Simple(None, "common.abilities.hammer.singlestrike"),
        secondary: Simple(None, "common.abilities.tool.golf_club.charged"),
        abilities: [],
    ),
    Custom("DoubleBass"): (
        primary: Simple(None, "common.abilities.music.double_bass"),
        secondary: Simple(None, "common.abilities.music.double_bass"),
        abilities: [],
    ),
    Custom("Flute"): (
        primary: Simple(None, "common.abilities.music.flute"),
        secondary: Simple(None, "common.abilities.music.flute"),
        abilities: [],
    ),
    Custom("GlassFlute"): (
        primary: Simple(None, "common.abilities.music.glass_flute"),
        secondary: Simple(None, "common.abilities.music.glass_flute"),
        abilities: [],
    ),
    Custom("Lyre"): (
        primary: Simple(None, "common.abilities.music.lyre"),
        secondary: Simple(None, "common.abilities.music.lyre"),
        abilities: [],
    ),
    Custom("WildskinDrum"): (
        primary: Simple(None, "common.abilities.music.wildskin_drum"),
        secondary: Simple(None, "common.abilities.music.wildskin_drum"),
        abilities: [],
    ),
    Custom("IcyTalharpa"): (
        primary: Simple(None, "common.abilities.music.icy_talharpa"),
        secondary: Simple(None, "common.abilities.music.icy_talharpa"),
        abilities: [],
    ),
    Custom("Washboard"): (
        primary: Simple(None, "common.abilities.music.washboard"),
        secondary: Simple(None, "common.abilities.music.washboard"),
        abilities: [],
    ),
    Custom("Kalimba"): (
        primary: Simple(None, "common.abilities.music.kalimba"),
        secondary: Simple(None, "common.abilities.music.kalimba"),
        abilities: [],
    ),
    Custom("Melodica"): (
        primary: Simple(None, "common.abilities.music.melodica"),
        secondary: Simple(None, "common.abilities.music.melodica"),
        abilities: [],
    ),
    Custom("Lute"): (
        primary: Simple(None, "common.abilities.music.lute"),
        secondary: Simple(None, "common.abilities.music.lute"),
        abilities: [],
    ),
    Custom("Guitar"): (
        primary: Simple(None, "common.abilities.music.guitar"),
        secondary: Simple(None, "common.abilities.music.guitar"),
        abilities: [],
    ),
    Custom("DarkGuitar"): (
        primary: Simple(None, "common.abilities.music.dark_guitar"),
        secondary: Simple(None, "common.abilities.music.dark_guitar"),
        abilities: [],
    ),
    Custom("Sitar"): (
        primary: Simple(None, "common.abilities.music.sitar"),
        secondary: Simple(None, "common.abilities.music.sitar"),
        abilities: [],
    ),
    Tool(Debug): (
        primary: Simple(None, "common.abilities.debug.forwardboost"),
        secondary: Simple(None, "common.abilities.debug.upboost"),
        abilities: [
            Simple(None, "common.abilities.debug.possess"),
        ],
    ),
    Tool(Farming): (
        primary: Simple(None, "common.abilities.farming.basic"),
        secondary: Simple(None, "common.abilities.farming.basic"),
        abilities: [],
    ),
    Tool(Pick): (
        primary: Simple(None, "common.abilities.pick.swing"),
        secondary: Simple(None, "common.abilities.pick.swing"),
        abilities: [],
    ),
    Tool(Shovel): (
        primary: Simple(None, "common.abilities.shovel.dig"),
        secondary: Simple(None, "common.abilities.shovel.dig"),
        abilities: [],
    ),
    Tool(Empty): (
        primary: Simple(None, "common.abilities.empty.basic"),
        secondary: Simple(None, "common.abilities.empty.basic"),
        abilities: [],
    ),
    // Adlets
    // TODO: Do we want to eventually convert these to simple variants of weapons?
    Custom("Adlet Hunter"): (
        primary: Simple(None, "common.abilities.adlet.hunter.stab"),
        secondary: Simple(None, "common.abilities.adlet.hunter.throw"),
        abilities: [],
    ),
    Custom("Adlet Icepicker"): (
        primary: Simple(None, "common.abilities.adlet.icepicker.spike"),
        secondary: Simple(None, "common.abilities.adlet.icepicker.leap"),
        abilities: [],
    ),
    Custom("Adlet Tracker"): (
        primary: Simple(None, "common.abilities.adlet.tracker.arrow"),
        secondary: Simple(None, "common.abilities.adlet.tracker.trap"),
        abilities: [],
    ),
    Custom("Adlet Elder"): (
        primary: Simple(None, "common.abilities.adlet.elder.triplestrike"),
        secondary: Simple(None, "common.abilities.adlet.elder.dash"),
        abilities: [
            Simple(None, "common.abilities.adlet.elder.trap"),
            Simple(None, "common.abilities.adlet.elder.leap"),
        ],
    ),
})
