Hooks.once("ready", async function () { if (!game.automatedevocations) { game.automatedevocations = {}; game.automatedevocations[game.system.id] = {}; } if (game.system.id == "dnd5e") { game.automatedevocations.dnd5e = { "Arcane Hand": [ { creature: "Arcane Hand", number: 1, }, ], "Flaming Sphere": [ { creature: "Flaming Sphere", number: 1, }, ], "Spiritual Weapon": [ { creature: "Spiritual Weapon", number: 1, }, ], "Guardian of Faith": [ { creature: "Spectral Guardian", number: 1, }, ], "Faithful Hound": [ { creature: "Phantom Watchdog", number: 1, }, ], "Find Steed": [ { creature: "Warhorse", number: 1, }, { creature: "Pony", number: 1, }, { creature: "Camel", number: 1, }, { creature: "Elk", number: 1, }, { creature: "Mastiff", number: 1, }, ], "Giant Insect": [ { creature: "Giant Centipede", number: 10, }, { creature: "Giant Spider", number: 3, }, { creature: "Giant Wasp", number: 5, }, { creature: "Giant Scorpion", number: 1, }, ], "Arcane Sword": [ { creature: "Arcane Sword", number: 1, }, ], "Conjure Animals": (data) => { let multiplier = 1; if (data.level >= 5) multiplier = 2; if (data.level >= 7) multiplier = 3; let beasts = game.actors .filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "beast" && a.system.details.cr <= 2) .sort((a, b) => { return a.system.details.cr < b.system.details.cr ? 1 : -1; }); let creatures = []; for (let beast of beasts) { let number = 1; const cr = beast.system.details.cr; if (cr == 2) number = 1; else if (cr == 1) number = 2; else if (cr == 0.5) number = 4; else if (cr <= 0.25) number = 8; creatures.push({ creature: beast.name, number: number * multiplier, }); } return creatures; }, "Conjure Celestial": (data) => { let celestials = game.actors .filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "celestial" && a.system.details.cr <= 4) .sort((a, b) => { return a.system.details.cr < b.system.details.cr ? 1 : -1; }); let creatures = []; for (let celestial of celestials) { creatures.push({ creature: celestial.name, number: 1, }); } return creatures; }, "Conjure Elemental": (data) => { let elementals = game.actors .filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "elemental" && a.system.details.cr <= data.level) .sort((a, b) => { return a.system.details.cr < b.system.details.cr ? 1 : -1; }); let creatures = []; for (let elemental of elementals) { creatures.push({ creature: elemental.name, number: 1, }); } return creatures; }, "Conjure Fey": (data) => { let feys = game.actors .filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "fey" && a.system.details.cr <= data.level) .sort((a, b) => { return a.system.details.cr < b.system.details.cr ? 1 : -1; }); let creatures = []; for (let fey of feys) { creatures.push({ creature: fey.name, number: 1, }); } return creatures; }, "Conjure Minor Elementals": (data) => { let multiplier = 1; if (data.level >= 6) multiplier = 2; if (data.level >= 8) multiplier = 3; let elementals = game.actors .filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "elemental" && a.system.details.cr <= 2) .sort((a, b) => { return a.system.details.cr < b.system.details.cr ? 1 : -1; }); let creatures = []; for (let elemental of elementals) { let number = 1; const cr = elemental.system.details.cr; if (cr == 2) number = 1; else if (cr == 1) number = 2; else if (cr == 0.5) number = 4; else if (cr <= 0.25) number = 8; creatures.push({ creature: elemental.name, number: number * multiplier, }); } return creatures; }, "Conjure Woodland Beings": (data) => { let multiplier = 1; if (data.level >= 6) multiplier = 2; if (data.level >= 8) multiplier = 3; let feys = game.actors .filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "fey" && a.system.details.cr <= data.level) .sort((a, b) => { return a.system.details.cr < b.system.details.cr ? 1 : -1; }); let creatures = []; for (let fey of feys) { let number = 1; const cr = fey.system.details.cr; if (cr == 2) number = 1; else if (cr == 1) number = 2; else if (cr == 0.5) number = 4; else if (cr <= 0.25) number = 8; creatures.push({ creature: fey.name, number: number * multiplier, }); } return creatures; }, "Animate Dead": (data) => { let multiplier = 1 + (data.level - 3) * 2; return [ { creature: "Skeleton", number: multiplier, }, { creature: "Zombie", number: multiplier, }, ]; }, "Create Undead": (data) => { let multiplier = data.level - 3; if (data.level == 8) { return [ { creature: "Ghoul", number: 5, }, { creature: "Ghast", number: 2, }, { creature: "Wights", number: 2, }, ]; } if (data.level == 9) { return [ { creature: "Ghoul", number: 6, }, { creature: "Ghast", number: 3, }, { creature: "Wights", number: 3, }, { creature: "Mummy", number: 2, }, ]; } return [ { creature: "Ghoul", number: multiplier, }, ]; }, "Find Familiar": [ { creature: "Bat", number: 1, }, { creature: "Cat", number: 1, }, { creature: "Crab", number: 1, }, { creature: "Frog", number: 1, }, { creature: "Hawk", number: 1, }, { creature: "Lizard", number: 1, }, { creature: "Octopus", number: 1, }, { creature: "Owl", number: 1, }, { creature: "Poisonous Snake", number: 1, }, { creature: "Quipper", number: 1, }, { creature: "Rat", number: 1, }, { creature: "Raven", number: 1, }, { creature: "Sea Horse", number: 1, }, { creature: "Spider", number: 1, }, { creature: "Weasel", number: 1, }, ], }; } game.automatedevocations.originalBindings = deepClone(game.automatedevocations[game.system.id]); game.automatedevocations[game.system.id] = mergeObject(game.automatedevocations[game.system.id], game.settings.get(AECONSTS.MN, "customautospells")); Hooks.callAll("automated-evocations.dnd5e.ready"); });